历史上的今天
今天是:2024年12月16日(星期一)
2021年12月16日 | TINY4412 裸机程序之点灯
2021-12-16 来源:eefocus
电路

根据电路图,有4个LED灯,引脚分别是GPM4_0~ GPM4_3。且当IO引脚为高电平时,LED灯灭,当IO引脚为低电平时LED亮。
启动流程
Exynos4412属于12年出的SOC芯片,属于比较新的芯片,armv7架构。相较于前些年的arm9芯片,在启动上的功能更多一些,当然启动校验也更复杂一些。
BL0(brom)是在芯片内部的代码,在芯片出厂时已经固化。BL0进行简单的初始化之后,会根据配置检测对应介质上的代码,如果校验成功就能跳到代码执行(BL1)。
如果直接使用官方提供的BL1,那么就可以省去制作校验和的步骤。但是BL2就要遵循官方的规定,需要小于14KB。
这里我们直接使用官方的BL1,将裸机程序编译为BL2。
IROM CODE(BROM、BL0)流程图

BL1流程图

官方提供了BL1的固件 (E4412_N.bl1.bin)。BL1工作是做一些初始化并将BL2拷贝到片内内存运行。
IROM代码已经定死BL1大小只能是8K的代码,BL1可以使用官方提供的,也可以直接写。在官方的描述中(如下英文描述),BL2的大小可以用户定义,但是,如果使用了官方的BL1的话,那也就只能按人家说的做,则BL2只能是(14K-4B),后面四个字节用来做校验。通过mkbl2工具(主要是截取代码和计算校验)来制作。
但是如果你不使用官方的BL1的话,也可以自己写,有很多的灵活性。BL2的长度就可以自己定,或者没有BL2,直接将uboot拷贝到内存运行了,只要你的BL1不超过8K并能完成你要做的工作就可以,不一定非要用官方的BL1。
但是使用官方的BL1有很多好处,比如制作BL1加头,加校验,加签名等工作就不要做了。所以一般都会使用官方的BL1。
BL2流程图

BL2运行在芯片内部的sram上,可以实现一些休眠唤醒的功能。BL2会去完成加载OS的功能(uboot、linux kernle、atf、optee)。这里我们直接把裸机程序替换成BL2。
程序
获取代码:
git clone https://github.com/TinyWindzz/tiny4412_asm
(led_asm目录下)
led.S:
.text
.globl _start
_start:
ldr r0, =0x110002E0 //GPM4CON Register
ldr r1, =0x00001111 //Configurate GPM4_0 str r1, [r0] mov r1, #0xF0 //light All led on ldr r0, =0x110002E4 //GPM4DAT Register str r1, [r0] halt_loop: b halt_loop led.lds: SECTIONS { . = 0x02023400; .text : { *(.text) } .rodata ALIGN(4) : {*(.rodata*)} .data ALIGN(4) : { *(.data*) } .bss ALIGN(4) : { *(.bss) *(COMMON) } } 为什么链接地址是0x02023400,这个可以在irom手册上看到。 官方提供的BL1会默认将BL2加载到这个位置。 Makefile: CC=arm-tiny4412-linux-gnueabi- led.bin : led.S $(CC)gcc -c -o led.o led.S $(CC)ld -Tled.lds -N led.o -o led.elf $(CC)objcopy -O binary -S led.elf led.bin $(CC)objdump -D -m arm led.elf > led.dis clean: rm -f *.dis *.bin *.elf *.o Makefile中指定编译器为arm-tiny4412-linux-gnueabi-gcc,所以确保已装上。 arm-tiny4412-linux-gnueabi-gcc 烧写方式 将SD卡插入电脑,烧写完毕后插回开发板。 root@ubuntu:/work/tiny4412/asm/led_asm# make arm-tiny4412-linux-gnueabi-gcc -c -o led.o led.S arm-tiny4412-linux-gnueabi-ld -Tled.lds -N led.o -o led.elf arm-tiny4412-linux-gnueabi-objcopy -O binary -S led.elf led.bin arm-tiny4412-linux-gnueabi-objdump -D -m arm led.elf > led.dis root@ubuntu:/work/tiny4412/asm/led_asm# cd sd_fuse/tiny4412/ root@ubuntu:/work/tiny4412/asm/led_asm/sd_fuse/tiny4412# ./sd_fusing.sh /dev/sdb ../../led.bin /dev/sdb reader is identified. --------------------------------------- BL1 fusing 16+0 records in 16+0 records out 8192 bytes (8.2 kB, 8.0 KiB) copied, 0.0738208 s, 111 kB/s --------------------------------------- BL2 fusing 28+0 records in 28+0 records out 14336 bytes (14 kB, 14 KiB) copied, 0.182688 s, 78.5 kB/s --------------------------------------- u-boot fusing 0+1 records in 0+1 records out 40 bytes copied, 0.0101201 s, 4.0 kB/s --------------------------------------- TrustZone S/W fusing 184+0 records in 184+0 records out 94208 bytes (94 kB, 92 KiB) copied, 1.45966 s, 64.5 kB/s --------------------------------------- U-boot image is fused successfully. Eject SD card and insert it again. root@ubuntu:/work/tiny4412/asm/led_asm/sd_fuse/tiny4412# ./sd_fusing.sh /dev/sdb ../../led.bin 这条指令中/dev/sdb根据实际情况调整, 可以通过fdisk -l查看sd具体名称。 效果: sd_fusing.sh中核心的就是下面几条烧写指令,当然裸机程序点灯这里只需要 E4412_N.bl1.bin和bl2.bin就行。 dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position dd iflag=dsync oflag=dsync if=${E4412_UBOOT} of=$1 seek=$uboot_position dd iflag=dsync oflag=dsync if=./E4412_tzsw.bin of=$1 seek=$tzsw_position 参考文章: Tiny4412汇编流水灯代码,Tiny4412裸机LED操作 《Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf》 

史海拾趣
|
一、引言 过去工业控制计算机系统的软件功能都靠软件人员编程实现。工作量大,软件通用性差,且易产生错误。随着工业控制要求的不断提高,专门用于工业控制的组态软件应运而生,它是一套功能齐全的组态生成工具软件,通用性强,而 ...… 查看全部问答> |
|
_irqHandler PROC 1. STMFD sp!,{r0-r4,r12,lr} 2. mov r4,#0x80000000 //中断控制寄存器首地址(假设的) 3. ldr r0,[r4,#0] ...… 查看全部问答> |
|
计时制办公场地租赁,个人创业,兼职,自由职业人的最佳选择。 请见网站: http://www.ingress.cn 打工者们,你是否在为每天要起早贪黑奔赴公司同时上下班交通拥堵而烦心? 创业者们,你是否在为寻找物美价廉随时可退租的办公场地而操心? 企业 ...… 查看全部问答> |
|
请问: wince中的文件夹有没有后缀名? 我想把一个名为NandFlash的文件夹,放到桌面快捷方式, 我在WINCE500\\PLATFORM\\SMDK2440\\FILES创建了一个NandFlash.LNK文件,里面写上22#\\windows\\NandFlash 我又在Project.bib 里面加上 NandFlash ...… 查看全部问答> |
|
今天听单片机老师讲课讲中断,说分了好几种,被他弄得一头雾水,还是没明白他说的中断都有什么,怎么配置,查了查2553手册,愣是没找到讲解终端的地方,球大神指点123!不胜感激。… 查看全部问答> |




