STM32F103 ucLinux開發BOOT
STM3210E-EVAL官方開發板
主芯片STM32F103ZET6:
片內512K Flash,地址0x0800 0000 ~ 0x0807 FFFF;
64K RAM,地址0x2000 0000 ~2000 FFFF。
利用其FSMC功能外擴了NorFlash和SRAM:
NorFlash大小16M,地址0x6400 0000 ~ 6500 0000
SRAM大小1M,地址0x6800 0000 ~ 0x6810 0000
ST官網已經給出了uCLinux開發的套件,但是提供的BOOT只是個Hex文件,沒有源碼。
看過UBOOT源碼后,明白了BOOT都要做什么事,我在KEIL下編寫了一個超級簡單的BOOT,可以實現到內核的跳轉,並通過
printf函數打印輸出,源碼下載地址:
http://www.pudn.com/downloads611/sourcecode/embedded/detail2490802.html
主要源碼如下:
SystemInit(); //初始化時鍾
FSMC_SRAM_Init(); // SRAM初始化
FSMC_NOR_Init(); // NOR FLASH初始化
USART1_Configuration(USART1_BPS); // RS232配置,串口1作為控制台輸出
setup_start_tag(); //ATAG_CORE
//setup_memory_tags(); //我分析官網的HEX文件,沒有這個ATAG_MEM
setup_commandline_tag(g_strCmdLine); //ATAG_CMDLINE
setup_end_tag(); //ATAG_NONE
theKernel = (void (*)(int, int, unsigned int))((uint32_t)KernelStartAddrss); //跳轉地址,片內FLash是0x0800 3000,片外Nor Flash是0x6400 0000
theKernel(0, 2189, ((uint32_t)TagStartAddress)); //分析內核源碼,Tag起始地址應該是0x6800 0100。此句執行完后,則實現跳轉。
