友善之臂 NANO T3 运行裸机程序

一、NANO T3的资源特性。

    NANO T3使用 三星的S5P6818作为片上SOC(即CPU)。S5P6818基于contex-A53内核,该内核有2个内存控制器(Memory Controller),其特性如下:

MCU-A features:
 MCU-A is organized DREX and DDRPHY
 Supports DDR3/LVDDR3 (Low Voltage DDR3)/LPDDR3/LPDDR2 memory
 Supports 8/16/32-bit SDRAM of 2 GByte
 Single Bank of Memory (32-bit data bus width)
 Supports Power down mode

 Supports Self Refresh mode

MCU-S features:

 Static memory
 Two Static Memory Chip Selects
 NAND Flash Interface
 23-bit address supports using latch address
 SLC NAND, MLC NAND with ECC (Supports BCH-algorithm)

 Static Memory Map Shadow

S5P6818内存映射如下:


从上图我们可以知道以下重要信息:

1、S5P6818自带SRAM,起始地址是: 0xffff 0000

2、S5P6818可以使用DDR作为内存,最大容量 2GB,起始地址为:0x4000 0000.


二、NANO T3的上电启动过程:

1、开发板上电后,首先启动的是 ROMboot 引导程序,该程序被烧录在板上的EEPROM上,由板子的开发商提供。

2、ROMboot执行过程中,会根据用户的选择从不同外设加载代码,对于NANO T3,如果没有按下boot键,则从EMMC加载代码,如果按下boot键,从SD卡加载代码,可以从官方wiki知道详细步骤。

3、我们要将裸板程序烧录到SD卡,SD卡的程序由2或三部分组成:

    (1)直接在板内SRAM运行程序

        此时先烧录nsih程序(后面称为1stboot),这个程序占用200字节空间,由官方提供,之后再跟上用户自己的程序。

    (2)驱动板上DDR,跳转到外部内存上运行

        此时代码结构为 1stboot + 2ndboot + 用户程序,2ndboot 同样由官方提供,官方还提供一个工具(mk6818)将这些代码连接起来。


三、编写汇编程序

1、使用内部sram 的汇编程序(驱动LED)

由于1stboot 占用200字节空间,用户程序从 0xffff 0200开始

这里仅提供Makefile的编写代码,用户程序读者可到我最后附上的链接查看:

led.bin:led.S
	arm-none-eabi-gcc -o led_s.o -c led.S
	arm-none-eabi-ld -Ttext=0xffff0200 led_s.o -o led_s_elf
	arm-none-eabi-objcopy -I elf32-littlearm -O binary led_s_elf led_s.bin
	./mk6818.exe led_s_pak.bin nsih.txt led_s.bin

clean:
	rm -f led_s_pak.bin led_s.bin led_s_elf *.o

这里用到的文件:led.S、Makefile、mk6818.exe、nsih.txt

注意:因为1stboot(即nsih.txt文件,其会被mk6818转换为机器代码)需要200字节空间,所以用户程序从0xffff 0200开始执行。


2、使用DDR作为内存

程序会跳转到DDR上执行,起始地址 0x43c0 0000(这是由2ndboot 指定的),附Makefile:

led.bin:led.S
	arm-none-eabi-gcc -o led_s.o -c led.S
	arm-none-eabi-ld -Ttext=0x43c00000 led_s.o -o led_s_elf
	arm-none-eabi-objcopy -I elf32-littlearm -O binary led_s_elf led_s.bin
	./mk6818.exe led_s_pak.bin nsih.txt 2ndboot led_s.bin

clean:
	rm -f led_s_pak.bin led_s.bin led_s_elf *.o

文件增加了2ndboot。没错,它是DDR的驱动程序,这样我们就可以使用ddr了。

四、将程序烧录到SD卡(这里只演示在DDR上执行的程序)

1、需要先准备编译器,配置好环境变量,这些都参照官方wiki

2、目录文件:


3、编译程序:


led_s_pak.bin是最终要烧录到SD卡的可执行程序

4、烧录到SD卡,运行结果:

烧录方法:使用winhex工具: 

选择工具->打开磁盘->选择要烧录的sd卡


标记200~10000的区域,选择以00填充


打开编译得到的led_s_pak.bin,全选,以16进制复制

回到sd卡页面,标记200位置,右键->编辑->写入


保存扇区,将SD卡插入NANO-T3,按住boot键然后打开电源,可以看到led灯在来回闪烁。

五、代码和工具下载

代码下载地址:

https://github.com/ccyxchen/NANO-T3-LED

编译器下载地址:

git clone https://github.com/friendlyarm/prebuilts.git

板子的官方wiki:

http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T3/zh#.E5.BF.AB.E9.80.9F.E4.BB.8ESD.E5.8D.A1.E5.90.AF.E5.8A.A8

winhex破解版:

https://download.csdn.net/download/ccyxchen/10327169

猜你喜欢

转载自blog.csdn.net/ccyxchen/article/details/79815860
T3
今日推荐