了解更多關於bootloader 的C語言實現,請加我QQ: 1273623966 (驗證信息請填 bootloader)
歡迎咨詢或定制bootloader(在線升級程序)。
NXP S32K144 是ARM Cortex M4F 內核的32-bit MCU. 相比較S32K116有着更大的存儲空間和更多的功能以及更多的引腳。所以在有了S32K144 EVB后。我迫不及待的在“自己用C語言寫NXP S32K116 serial bootloader”基礎上完成了S32K144 C語言串口Bootloader. 由於S32K144與S32K116的硬件/軟件兼容性很好,所以整個的改動不多。
開發環境基本相同:IDE -- S32DS
Compiler-- arm gcc
SDK -- S32SDK_S32K14x_EAR_0.8.6(SDK和S32K116的不同)。
S32K144 flash size 1024Kbytes. 但是bootloader 只用了前面16K。linker script 如下:
MEMORY
{
/* Flash */
m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400
m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x00003BF0
/* SRAM_L */
m_data (RW) : ORIGIN = 0x1FFF8000, LENGTH = 0x00008000
/* SRAM_U */
m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00007000
}
S32K144 底層driver都是在Expert processor 中配置好然后自動生成的,包含CLOCK,PORT,FLASH, UART。
在S32K116 C語言bootloader的基礎上,底層只有Clock配置不同,其他都一樣。
Bootloader 應用層也都是沿用S32K116的,只有FEATURE_FLS_PF_BLOCK_SECTOR_SIZE不同,S32K144的是2048。S32K116 的是1024。
站在S32K116 bootloader基礎上,就這樣S32K144 bootloader Coding很快完成了. 但是也發現了問題。如果代碼編譯的優化等級為 -O3的話,bootloader 在擦除Flash時返回錯誤狀態。但是如果改用-O2,-O1, -Os就沒問題。
有可能是編譯器bug。 “-O0” 也試過,但是改成“-O0”后編譯就報錯,錯誤是因為程序超出了16K的空間。