# TI F280025C -- Bootloader Bootloader是指 * 一段特殊程式碼,也可以指一段為了更新韌體而設計的 Operating System * 也可稱為 boot program 或 Bootstrap loader * 是系統上電後第一段執行的程式碼 以 TI F280025C 為例,一般而言燒錄程式碼的起始位置為 Memory Map Flash Sector0 的起始位置 0x00080000 ![image](https://hackmd.io/_uploads/r1KTpj_81e.png) 接下來會以 TI 提供的範例程式碼進行學習,以利後續針對 Bootloader 的設計。 --- ## Device - F280025C LaunchPad™ development kit for C2000™ real-time MCU ![image](https://hackmd.io/_uploads/SJXgjX9rJe.png) - CCS ![Untitled (1)](https://hackmd.io/_uploads/Bk8bimqS1g.png) --- ## Research 以下的參考範例程式都是以 flash_kernel_ex3_sci_flash_kernel.c 為主 • Boot Mode 一開始由 GPIO 設定決定模式 • 設定好 GPIO 準位決定使用哪種 Boot Mode • 皆使用第一個外設實例 ( SCIA, SPIA, I2CA, CANA and else ) ![image](https://hackmd.io/_uploads/HJ0iyh_Ikx.png) • 最多可以設定 0~3 Boot Mode Select Pin • 最多可以設定 1~8 Boot Mode ![image](https://hackmd.io/_uploads/S1aA1ndU1l.png) BOOTPIN-CONFIG 設定 BMSP 對應 GPIO,以下腳位不能作為 BMSP 使用 ![image](https://hackmd.io/_uploads/Sko5ehdUyg.png) • GPIO 20 and GPIO 21 • GPIO 36 and GPIO 38 • GPIO 47 to GPIO 60 • GPIO 63 to GPIO 223 ![image](https://hackmd.io/_uploads/ryUsehOL1l.png) • 使用 BMSP2 ( BMSP0 and BMSP1 Disable ),搜尋值只有 0 & 4 • 使用 BMSP0 ( BMSP1 and BMSP2 Disable ),搜尋值只有 0 & 1 ![image](https://hackmd.io/_uploads/rJyAe2O8ke.png) BOOTDEF 決定每個模式對應的 Boot Option ![image](https://hackmd.io/_uploads/SJ5AxnOIJg.png) 不同 Boot Mode 進入點 ![image](https://hackmd.io/_uploads/H1Ox-2dUyx.png) 透過修改相關的 BOOTDEF 參數,也可以使用不同的 GPIO 設定 ![image](https://hackmd.io/_uploads/rJNbWhdLJx.png) 由上位機 ( PC 或者其他裝置 ) 傳遞的 Data Stream Structure 如下 ![image](https://hackmd.io/_uploads/HycGZ2uLyg.png) 打開範例程式 flash_kernel_ex3_sci_flash_kernel.c,如果想要改變 kernel boot mode,可以改變 SCI_BOOT ``` // parameter SCI_BOOT for GPIO28,29 // refer to cpu1bootrom.h for alternate SCI Boot Pin configurations // EntryAddr = sciGetFunction(SCI_BOOT); return(EntryAddr); ``` 當專案進行編譯後,會產出 .out 檔案,透過 TI 提供的方式可以將 .out 檔案轉成範例程式所需要的檔案格式 下圖解釋由 .out 轉成 .txt 可匯入 Boot mode 格式檔案的文件內容 ![image](https://hackmd.io/_uploads/HJZMNhdLyx.png) 程式碼需透過 TI 的 hex2000.exe 將編譯後產出的 .out 檔案轉成 .txt 檔案,後續在 boot mode 中可以轉傳到 MCU 進行 Bootloader 韌體更新 hex2000.exe 檔案位置 C:\ti\ccs1270\ccs\tools\compiler\ti-cgt-c2000_22.6.1.LTS\bin 打開終端機,轉換檔案的指令如下 ``` 終端機指令 hex2000.exe -boot -sci8 -a -o “轉出檔案名稱.txt” “程式碼.out” ``` 需要準備以下檔案 • flash_kernel_ex3_sci_flash_kernel.txt • 執行的程式碼.txt 使用 TI 自行開發的 serial_flash_programmer.exe,透過 SCIA 腳位跟 PC 進行 Bootloader 程式執行 serial_flash_programmer.exe 位置如下 C:\ti\C2000Ware_5_02_00_00\utilities\flash_programmers\serial_flash_programmer F280025C 屬於 F28002x,參考 Kernel B 下載,指令如下,COM7 需替換成裝置管理員搜尋到的通道 ``` 終端機指令 serial_flash_programmer.exe -d f28002x -k flash_kernel_ex3_sci_flash_kernel.txt –a 程式碼.txt -p COM7 ``` 執行後應該會持續更新呈現下圖的畫面 :::warning 畫面沒有更新可能是需要將 MCU 進行 Reset 進入 SCI boot mode,可以在 Reset 後重新執行指令 ::: ![image](https://hackmd.io/_uploads/HJuVBhO81l.png) 完成後會有項目可以選擇,首先選擇輸入 1 進行 “程式碼.txt”的燒錄 ![image](https://hackmd.io/_uploads/BJuBBndLJl.png) 完成燒錄後會給出燒錄程式的起始位址,後續執行 6-Run CPU1 需輸入該位址才可以執行程式,開始執行後則會跳回終端機指令輸入狀態 ![image](https://hackmd.io/_uploads/rJLPB3_I1g.png) --- ## Reference [TMS320F28002x Real-Time Microcontrollers](https://www.ti.com/lit/ug/spruin7c/spruin7c.pdf?ts=1715822121655&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTMS320F280025) [Serial Flash Programming of C2000™ Microcontrollers](https://www.ti.com/lit/an/sprabv4h/sprabv4h.pdf?ts=1736075652362&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTMS320F28377D) [C2000 串口烧录程序应用手册](https://www.ti.com/cn/lit/an/zhca806/zhca806.pdf) [TMS320F280025的BOOT流程](https://blog.csdn.net/booksyhay/article/details/120172063)