TI TM4C ROM Bootloader

使用 TM4C ROM bootloader 的三種方式:

Flash Empty

當 MCU Flash Address 0x00000004 內容值是 0xFFFFFFFF
會直接進入 HW ROM Boootloader (Power ON or RESET)
也就是說MCU 內是沒燒入程式或是 Flash Erease 的狀態

BOOTCFG Setting GPIO

修改 BOOTCFG register 可指定 GPIO 強制進入 ROM Bootloader
這邊說明使用 GPIO PF4 Keep LOW 進入 HW ROM Bootloader (Power ON or RESET)
當程式設定過後就不會再執行此設定
若要清除改變設定,就要回復到預設狀態
利用 Tool 清除
LM Flash Programmer → Other Utilities → Debug Port Unlonk → Select Fury, DustDevil, TM4C123 and TM4C129 Classes → click unlock
1
2
3
4
5
6
7
8
9
10
11
12
void CheckBootloaderCFG(void)
{
unsigned long bootcfg;
bootcfg = HWREG(FLASH_BOOTCFG);
if(bootcfg & FLASH_BOOTCFG_NW) {
HWREG(FLASH_FMA) = 0x75100000;
HWREG(FLASH_FMD) = FLASH_BOOTCFG_PORT_F | FLASH_BOOTCFG_PIN4 |
FLASH_BOOTCFG_KEY | FLASH_BOOTCFG_DBG1;
HWREG(FLASH_FMC) = DLASH_FMC_WRKEY | FLASH_FMC_COMT;
while((HWREG(FLASH_FMC) & FLASH_FMC_COMT) == FLASH_FMC_COMT);
}
}

Call ROM Bootloader API

也可在應用程序中調用 ROM Library 來使用 ROM Bootloader
以下範例使用 UART0 來說明
當使用 LM Flash Programmer 的 Serial(UART) 需勾選 Disbale Auto Buad Support
此 UART是固定傳輸速率

void JumpToBootloader(void)
{
// Set UART0 use ROM bootloader
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
ROM_UARTConfigSetExpClk(
UART0_BASE, SysCtlClockGet(), 115200,
(UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | UART_CONFIG_WLEN_8));
ROM_UARTEnable(UART0_BASE);
// Disable all processor interrupts.
HWREG(NVIC_DIS0) = 0xffffffff;
HWREG(NVIC_DIS1) = 0xffffffff;
// Call the ROM UART bootloader
ROM_UpdateUART();
}
資料來源:https://leapwing.github.io/2016/08/12/TM4C-ROMBootloader/


留言

這個網誌中的熱門文章

python serial 模組使用方法 #1

USB HID 教學 #1(轉載)

USB HID 教學 #2 (轉載)