0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

(exynos4412)Tiny4412裸机开发-点亮LED

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-08-12 09:18 次阅读

1. 前言

Tiny4412开发是友善之臂推出的AndroidLinux学习开发板,CPU采用三星的EXYNOS4412,32位芯片,属于Cortex-A系列,主频是1.5GHZ,可以运行ubuntu、Android5.0、纯Linux等操作系统

这篇文章就介绍利用这款开发板完成裸机开发,不涉及操作系统,直接当做单片机一样,完成LED灯、蜂鸣器的编程,了解这款芯片与常规的Cortex-M系列芯片编程有何区别。

核心板如图:

image-20220124143413952

下面是开发板的实物图:

image-20220124143157723

开发板的配置:

image-20220124143510661

2. 搭建交叉编译环境

进行裸机编程之前,需要先搭建交叉编译环境,安装arm-linux-gcc交叉编译器,交叉编译后的程序才能在开发板上运行。

什么叫交叉编译? PC机编译、在嵌入式开发板运行这种模式就叫交叉编译。

交叉编译器在开发板的光盘里有提供,直接拷贝到PC机Linux下解压,配置环境变量接口

详细操作步骤如下:

1.  在Linux用户目录下创建一个目录: mkdir work/arm-linux-gcc -p
​
2.  将交叉编译器拷贝到Linux系统共享目录。再解压到arm-linux-gcc目录下。
tar xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /home/wbyq/work/arm-linux-gcc/
​
3.  添加系统环境变量
 (1). root用户: 需要将代码写在/etc/profile文件中
 (2). 普通用户: 需要将代码写在 用户目录下的.bash_profile文件中
profile文件系统上电的时候会自动执行。
添加环境变量的命令:
export PATH=/home/wbyq/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin:$PATH
参数:
export  导出--全局声明
PATH  系统环境变量的名称. 作用: 保存Linux系统可执行文件的搜索路径.
​
输出环境变量的值:
[wbyq@wbyq ~]$ echo $PATH
/home/wbyq/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wbyq/bin
​
export LD_LIBRARY_PATH=/mnt/hgfs/linux-share-dir/sum:$LD_LIBRARY_PATH
参数:
LD_LIBRARY_PATH 系统环境变量的名称. 作用: 保存Linux系统动态库的搜索路径. xxx.so
​
4.  生效环境变量
(1). 立即生效:  当前终端有效
[wbyq@wbyq ~]$ source .bash_profile 
(2). 退出用户、重新登录系统,实现永久生效
​
5.  测试交叉编译器. 学习基本用法
​
[wbyq@wbyq linux_2021]$ arm-linux-gcc app.c
[wbyq@wbyq linux_2021]$ ls
a.out  app.c
[wbyq@wbyq linux_2021]$ ./a.out 
bash: ./a.out: cannot execute binary file
[wbyq@wbyq linux_2021]$ gcc app.c -o app1
[wbyq@wbyq linux_2021]$ arm-linux-gcc app.c -o app2
[wbyq@wbyq linux_2021]$ ls
a.out  app1  app2  app.c
[wbyq@wbyq linux_2021]$ file app1 
app1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
[wbyq@wbyq linux_2021]$ file app2
app2: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, not stripped
复制代码

3. 点亮LED灯

如果学习过单片机(51,STM32MSP430、AVR之类的)编程,完成当前章节的内容应该就很容易。

要完成LED灯的控制,需要完成以下几个步骤:

1. 查看原理图
​
2. 配置GPIO口 
​
3. 控制GPIO口输出电平控制LED
​
4. 编译程序:
xxx.lds 链接文件
设备: 字符设备、块设备、网络设备
SD卡设备: /dev/sdb
查看块大小: cat /sys/block/sdb/size   单位是块(1块512字节)
​
5. 烧写到开发板测试
dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=/dev/sdb seek=1
参数:
if=./E4412_N.bl1.bin  要写到SD卡上的文件
of=/dev/sdb  SD卡设备
seek=1  跳过的块.  一个块==512字节
​
执行烧写命令:
[wbyq@wbyq sd_fuse]$ sudo ./sd_write.sh /dev/sdb ../main.bin 
复制代码

(1)查看原理图,查找LED的接线位置

tiny4412开发板是分两层设计的,一个核心板,一个底板,LED灯是焊接在核心板上面,原理图就得打开核心板这份。

image-20220124144707586image-20220124144724303

(2)查看芯片手册,了解GPIO口如何配置

image-20220124144846728

配置方法也很好理解,在手册里做了详细介绍。LED属于输出控制器件,需要将GPIO口配置成输出模式。

GPIO的模式配置由CON寄存器完成,输出控制由DAT寄存器完成。

image-20220124144957228

(3)编写代码

/* LED的寄存器  GPM4_0 1 2 3*/
#define GPM4CON   (*(volatile unsigned int *)0x110002E0)
#define GPM4DAT   (*(volatile unsigned int *)0x110002E4)
​
int main(void)
{
    /*配置GPIO口模式--配置LED灯*/
    GPM4CON&=0xFFFF0000;
    GPM4CON|=0x00001111;
​
    /*3. 配置GPIO口模式--配置按键*/
    GPX3CON&=0xFF0000FF;
​
  GPM4DAT&=~(1<<0);
     GPM4DAT&=~(1<<1);
     GPM4DAT&=~(1<<2);
     GPM4DAT&=~(1<<3);
     while(1)
     {
         
     }
     return 0;
 }
复制代码

(4)Makefile编写

CC=arm-linux-gcc
main_sp.bin:start.o main.o
    arm-linux-ld -Tmain.lds -o main_sp.elf $^
    arm-linux-objcopy -O binary main_sp.elf main.bin
    arm-linux-objdump -D main_sp.elf > main_sp_elf.dis
%.o : %.S
    $(CC) -o $@ $< -c
 %.o : %.c
     $(CC) -o $@ $< -c 
 clean:
     rm *.o *.elf *.bin *.dis  -f
复制代码

(5)代码烧写脚本

#
# Copyright (C) 2011 Samsung Electronics Co., Ltd.
#        http://www.samsung.com/
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#modify by zth
#
####################################
​
if [ -z $2 ] #检查传入的第三个参数长度是否为 0
then
  echo "传参数顺序: ./脚本.sh    <要烧录的文件>"
  exit 0
fi
​
if [ -b $1 ]  #检查第二个参数是否是块设备
then
  echo "$1 SD卡设备正常!"
else
  echo "$1 SD卡设备错误!"
  exit 0  #退出脚本
fi
​
if [ -e $2 ]  #检查第三个参数(就是要烧录的文件是否存在)
then
  echo "$2 文件存在."
else
  echo "$2 文件不存在."
  exit 0  #退出脚本
fi
​
​
BDEV_NAME=`basename $1`  #变量赋值--块设备名称
BDEV_SIZE=`cat /sys/block/${BDEV_NAME}/size`
​
if [ ${BDEV_SIZE} -le 0 ]; then
    echo "Error: NO media found in card reader."
    exit 1
fi
​
​
if [ ${BDEV_SIZE} -gt 32000000 ]; then  echo "Error: Block device size (${BDEV_SIZE}) is too large"
    exit 1
fi
​
​
E4412_UBOOT=$2 #将要烧录文件赋值给变量E4412_UBOOT
MKBL2=./mkbl2 #需要当前路径下有一个mkbl2文件
​
​
if [ ! -f ${E4412_UBOOT} ]; then #检测文件是否是普通文件,非目录和设备文件
    echo "$2 文件非普通文件!请检查文件是否正确!"
    exit -1 #退出脚本文件
fi
​
if [ ! -f ${MKBL2} ]; then    #检测文件是否是普通文件,非目录和设备文件
    echo "当前目录下缺少 mkbl2 文件!"
    exit -1 #退出脚本文件
fi
​
${MKBL2} ${E4412_UBOOT} bl2.bin 14336  #14K 通过mkbl2文件烧录程序 地址是14336
#./mkbl2 main.bin bl2.bin 14336
​
####################################
# fusing images
​
signed_bl1_position=1
bl2_position=17
uboot_position=49
tzsw_position=705
​
#
echo "---------------------------------------"
echo "BL1 fusing"
​
#烧录命令 ./xx.sh /dev/sdb main.bin
dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
​
#
echo "---------------------------------------"
echo "BL2 fusing"
#烧录命令
dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
​
sync
​
​
#输出信息
echo "---------------------------------------"
echo "程序烧录成功!"
echo "请拔出SD卡,放入开发板运行!!"卡设备>

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23174

    浏览量

    658802
  • Linux
    +关注

    关注

    87

    文章

    11236

    浏览量

    209024
  • Exynos4412
    +关注

    关注

    1

    文章

    8

    浏览量

    12707
收藏 人收藏

    评论

    相关推荐

    (exynos4412)Tiny4412裸机开发-按键检测

    上篇文章已经介绍过LED裸机编程,完成LED灯控制,这篇文章就介绍利用这款开发板继续完成按键编程,了解GPIO口基本的输入输出配置。
    的头像 发表于 08-11 09:50 1792次阅读

    最新Cortex-a9开发板/Exynos4412/iTOP-4412开发板特点介绍

    `iTOP-Exynos4412开发板采用 Exynos4412的主芯片,具有更高的主频和更丰富外设,配置 2GB 双通道 DDR3的内存及16GB 存储,具有稳定性强、可靠性高,能适用于对性能
    发表于 11-01 11:29

    翼罗电子Samsung四核Exynos4412开发

    UT-Exynos4412开发板是一款功能极为强大的高端ARM Cortex-A9开发平台,采用Samsung最新的Exynos4412Exyno
    发表于 04-22 11:25

    exynos4412开发板 insmod成功但没有设备文件

    基于exynos4412开发板,通过NFS挂载方式启动时,LED.ko 文件可以 insmod 成功,且可以在/dev目录下看到相应设备文件,并且正常运行;通过上述NFS文件制作成ramdisk
    发表于 02-28 19:19

    Exynos4412开发板需要注意的IP地址

    Exynos4412开发板-网络-同一网段
    发表于 12-28 07:16

    Exynos4412开发板有什么用

    以三星的四核处理器Exynos4412为例,该开发板属于armv7架构,contexA9系列,32bit,cpu4核心1.5GHZ主频,eMMC 大小型号为:KLM4G。ARM里面,启动MMU以后
    发表于 07-16 06:54

    TINY4412 UART程序设计得相关资料分享

    嵌入式实验: TINY4412 UART 程序设计一、实验目的熟悉UART通信相关的寄存器的功能和设置方法,设置引脚复用,选择UART接收和发送对应的引脚用于UART通信,数据流格式设置,设置
    发表于 11-09 06:11

    基于Exynos4412主芯片的iTOP-Exynos4412开发板有何优点

    光盘资料+网盘资料+配套视频+售后支持,助您加速学习研发的进程 产品介绍 iTOP-Exynos4412开发板采用 Exynos4412的主芯片,具有更高的主频和更丰富外设,配置 2GB 双通道 DDR3的内存及 16GB 存储
    发表于 12-23 07:35

    如何去实现Exynos4412开发板的文件传输呢

    tftp和fastboot是什么?fastboot是怎样通过u***线进行连线的?如何去实现Exynos4412开发板的文件传输呢?
    发表于 12-27 07:17

    Exynos4412三星ARM四核旗舰开发平台android4.0GPS功能

    关键词:ARM , 4412 , 开发板 经过2012年的等待,四核的开发平台终于跟广大嵌入从业人员见面了,下面让我们来看下UT-Exynos 44
    发表于 10-28 00:56 479次阅读

    samsung首款四核处理器Exynos 4412开发板友坚上市

    关键词:开发板 UT-Exynos4412开发板是一款功能极为强大的高端ARM Coretex-A9开发平台,采用Samsung最新的Exynos4
    发表于 11-01 07:24 581次阅读

    海天雄电子Exynos4412核心板简介

    Exynos4412核心板基于Samsung Cortex-A9系列Exynos4412四核应用处理器,采用SCP封装,板上集成了2GB DDR3,8GB eMMC,提供专用的三星电源管理芯片,系统更加稳定可靠。
    的头像 发表于 11-04 10:33 2726次阅读
    海天雄电子<b class='flag-5'>Exynos4412</b>核心板简介

    友善之臂Tiny4412核心板介绍

    Tiny4412是一款高性能的四核Cortex-A9核心板,由广州友善之臂设计、生产和发行销售。
    的头像 发表于 11-05 17:40 1.2w次阅读
    友善之臂<b class='flag-5'>Tiny4412</b>核心板介绍

    使用EXYNOS4412处理器实现防跌倒系统的代码免费下载

    本文档的主要内容详细介绍的是使用EXYNOS4412处理器实现防跌倒系统的代码免费下载。
    发表于 12-02 08:00 2次下载
    使用<b class='flag-5'>EXYNOS4412</b>处理器实现防跌倒系统的代码免费下载

    嵌入式实验: TINY4412 UART 程序设计

    嵌入式实验: TINY4412 UART 程序设计一、实验目的熟悉UART通信相关的寄存器的功能和设置方法,设置引脚复用,选择UART接收和发送对应的引脚用于UART通信,数据流格式设置,设置
    发表于 11-03 20:06 13次下载
    嵌入式实验: <b class='flag-5'>TINY4412</b> UART 程序设计