本人喜欢折腾
本贴给喜欢裸机开发的人,提供一个思路。
不欢迎上来就讨论裸机无用、裸机麻烦、嘲笑只会用现成IDE不研究GCC和系统的人,请绕行。
本人也是初次用这些,程序难免存在一些问题和不懂的地方,欢迎一块讨论。
一、IAR工程下的bootloader
iar_bootloader\project\bootloader\iar目录下面有IAR工程。可以用jlink仿真,可以烧写到spinor(W25Q256)。
1.此bootloader是将awboot移植(抄袭)到了IAR下面,做了魔改,用来支持spinor flash(因为手里只有spinor flash),启动裸机程序。
2.这个bootloader含有t113-s3芯片的加载头,会初始化led,uart,clk,ddr,spi等外设。芯片上电从spi flash启动时,T113-S3内部的BROM会识别加载头,并将bootloader程序加载到T113-S3的内部SRAM(0x00020000),并运行。然后bootloader会读取spinor flash里面(0x00100000-0x00200000)的内容到DDR(0x40000000),并跳转到DDR运行。所以裸机程序需要烧写到spinor flash的(0x00100000-0x00200000)处。
/* Boot head information for BROM */
b __iar_program_start ;DCD 0xEA000016
DCB 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
DCD 0x12345678 /* checksum */
DCD 20000 /* spl size:little large then .bin*/
DCD 0x30 /* boot header size */
DCD 0x30303033 /* boot header version */
DCD 0x00020000 /* return value */
DCD 0x00028000 /* run address */
DCD 0x0 /* eGON version */
DCB 0x00, 0x00, 0x00, 0x00 /* platform information - 8byte */
3.此bootloader用IAR编译完会生成bootloader.bin,然后需要使用mksunxi.exe,把.bin文件的大小信息添加到加载头。
mksunxi.exe bootloader.bin。
4.然后将带有大小信息的bootloader.bin,烧写到spinor flash的0x00000000处。
xfel.exe spinor write 0x0 bootloader.bin。
5.重新启动,串口会打印信息,串口使用的是PB4,PB5引脚,波特率115200.
------BootLoader Info---------------------
BootLoader spinor memory map:
AWBoot: 0x00000000-0x00010000 64KB
User Bin: 0x00100000-0x00200000 1MB
BootLoader sdram memory map:
Bare ROM: 0x40000000-0x40100000 1MB
Bare RAM: 0x40100000-0x40200000 1MB
------BootLoader Start--------------------
DRAM: TYPE = DDR3, CLK = 792 MHz
DRAM: SIZE = 128MB
CLK: PLL_CPUX = 1200MHz
CLK: PLL_PERI(2X) = 1200MHz
CLK: PLL_PERI(1X) = 600MHz
CLK: PLL_PERI(800) = 800MHz
CLK: PLL_DDR = 1584MHz
SPI: CLKIN = 600MHz, DIV = 3, N = 1, M = 3
SPI: CLOCK ACTUAL = 100MHz MCLK = 200MHz
DMA: USE CHANNEL 0
SPI-NOR: MFR:0xEF DEV:0x4019
SPI NOR: READ USER BIN TIME:20986uS
------BootLoader Jump Successed-----------
bootloader使用的的spinor空间在0x00000000-0x00010000预留了64KB。
裸机程序使用的spinor空间在0x00100000-0x00200000预留了1MB。
二、IAR下的LED工程
1.编译运行
iar_project\project\1_demo\iar目录下面有IAR工程,可以用Jlink连接板子进行仿真,也可以编译完成后生成一个demo.bin文件,烧写到spinor(0x00100000)。链接地址是0x40000000
可以用如下命令烧写到spinor
xfel.exe spinor write 0x100000 demo.bin`命令烧写到spinor.
重启后,会发现bootloader已经将led程序加载并运行起来,闪灯。
总的来说,就是先烧写bootloader到spinor的0x0处,再烧写demo.bin到spinor的0x00100000处
这样重启后就会先运行bootloader,再运行裸机程序demo.bin。
完整工程分享到这里:
t113-s3.rar
离线