历史上的今天
返回首页

历史上的今天

今天是: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_0GPM4_1GPM4_2GPM4_3 output

        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》

推荐阅读

史海拾趣

Grayhill公司的发展小趣事
在通信设备中,稳定的电压和电流对于保证信号的传输质量至关重要。
启攀微(CHIPHOM)公司的发展小趣事

随着市场竞争的加剧和技术的不断进步,启攀微电子(CHIPHOM)意识到只有不断创新才能保持领先地位。公司加大了在新技术、新产品方面的研发投入,积极探索物联网、人工智能等新兴领域的应用。同时,公司还注重人才培养和团队建设,吸引了一批高素质的技术人才和管理人才加入公司。在创新驱动的引领下,启攀微电子(CHIPHOM)不断推出具有竞争力的新产品和解决方案,赢得了客户的广泛认可。

DIALIGHT公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

DIOTECH公司的发展小趣事

为了进一步提升市场份额和品牌影响力,DIOTECH公司开始加大市场拓展力度。通过参加国际电子展会、举办新品发布会等活动,公司成功吸引了全球范围内的客户和合作伙伴的关注。同时,公司还加强了品牌建设,通过一系列营销活动提升了品牌知名度和美誉度。这些努力使得DIOTECH逐渐成为了电子行业内的知名品牌。

亿宝科技(CNIBAO)公司的发展小趣事

随着环保意识的不断提高,亿宝科技积极响应国家绿色发展的号召。公司引进先进的环保设备和技术,减少生产过程中的污染物排放。同时,亿宝科技还注重产品的环保性能设计,推出了一系列绿色电子产品。这些产品不仅符合国家的环保标准,还赢得了消费者的青睐和认可。在绿色发展的道路上,亿宝科技展现了企业的责任和担当。

爱浦电子(AIPULNION)公司的发展小趣事

在产品质量得到保障的同时,爱浦电子也积极开展市场拓展和品牌建设工作。公司积极参加国内外电子展会和技术交流活动,与众多行业伙伴建立了紧密的合作关系。此外,爱浦电子还注重品牌形象的塑造,通过统一的对外标识和全新的VI企业形象,提升了公司整体形象。这些努力使得爱浦电子在市场上逐渐树立起了良好的口碑和品牌形象。

问答坊 | AI 解惑

MCGS组态软件设计及其应用

一、引言     过去工业控制计算机系统的软件功能都靠软件人员编程实现。工作量大,软件通用性差,且易产生错误。随着工业控制要求的不断提高,专门用于工业控制的组态软件应运而生,它是一套功能齐全的组态生成工具软件,通用性强,而 ...…

查看全部问答>

ARM c程序的问题

_irqHandler PROC    1. STMFD   sp!,{r0-r4,r12,lr}    2. mov     r4,#0x80000000  //中断控制寄存器首地址(假设的)    3. ldr     r0,[r4,#0] ...…

查看全部问答>

给论坛的建议

我希望论坛能够在下载扣金币方面可以放松点,比如每次只扣一个或者在某个贴上下载只扣若干个就好了,因为有些文件确实比较大,要下好几个压缩文件才能行的,而每下一个就扣好几,很多人都有些不舍得,毕竟金币有比较难得,特别是新手就更麻烦了,我 ...…

查看全部问答>

计时制办公场地租赁,个人创业,兼职,自由职业人的最佳选择。

计时制办公场地租赁,个人创业,兼职,自由职业人的最佳选择。 请见网站: http://www.ingress.cn 打工者们,你是否在为每天要起早贪黑奔赴公司同时上下班交通拥堵而烦心? 创业者们,你是否在为寻找物美价廉随时可退租的办公场地而操心? 企业 ...…

查看全部问答>

wince 桌面快捷方式

请问: wince中的文件夹有没有后缀名? 我想把一个名为NandFlash的文件夹,放到桌面快捷方式, 我在WINCE500\\PLATFORM\\SMDK2440\\FILES创建了一个NandFlash.LNK文件,里面写上22#\\windows\\NandFlash 我又在Project.bib 里面加上 NandFlash ...…

查看全部问答>

uIP能不能抗死亡之ping?

能不能? 在代码的哪一部分证明?…

查看全部问答>

0

居然要全部下完才能都打开?这个有点不厚道…

查看全部问答>

LM3S程序求教

//————————————————头文件————————————————————#include \"inc/hw_ints.h\"//硬件中断#include \"inc/hw_memmap.h\"#include \"inc/hw_types.h\"//硬件类型#include \"driverlib/gpio.h\"//GPIO#include \"dri ...…

查看全部问答>

中断究竟是个怎么回事?

今天听单片机老师讲课讲中断,说分了好几种,被他弄得一头雾水,还是没明白他说的中断都有什么,怎么配置,查了查2553手册,愣是没找到讲解终端的地方,球大神指点123!不胜感激。…

查看全部问答>

DCDC电源中的电流检测

文章介绍了7中电流检测的办法,可以作为电流检测的入门读物 …

查看全部问答>