# TI F280025C -- Bootloader
Bootloader是指
* 一段特殊程式碼,也可以指一段為了更新韌體而設計的 Operating System
* 也可稱為 boot program 或 Bootstrap loader
* 是系統上電後第一段執行的程式碼
以 TI F280025C 為例,一般而言燒錄程式碼的起始位置為 Memory Map Flash Sector0 的起始位置 0x00080000

接下來會以 TI 提供的範例程式碼進行學習,以利後續針對 Bootloader 的設計。
---
## Device
- F280025C LaunchPad™ development kit for C2000™ real-time MCU

- CCS

---
## Research
以下的參考範例程式都是以 flash_kernel_ex3_sci_flash_kernel.c 為主
• Boot Mode 一開始由 GPIO 設定決定模式
• 設定好 GPIO 準位決定使用哪種 Boot Mode
• 皆使用第一個外設實例 ( SCIA, SPIA, I2CA, CANA and else )

• 最多可以設定 0~3 Boot Mode Select Pin
• 最多可以設定 1~8 Boot Mode

BOOTPIN-CONFIG 設定 BMSP 對應 GPIO,以下腳位不能作為 BMSP 使用

• GPIO 20 and GPIO 21
• GPIO 36 and GPIO 38
• GPIO 47 to GPIO 60
• GPIO 63 to GPIO 223

• 使用 BMSP2 ( BMSP0 and BMSP1 Disable ),搜尋值只有 0 & 4
• 使用 BMSP0 ( BMSP1 and BMSP2 Disable ),搜尋值只有 0 & 1

BOOTDEF 決定每個模式對應的 Boot Option

不同 Boot Mode 進入點

透過修改相關的 BOOTDEF 參數,也可以使用不同的 GPIO 設定

由上位機 ( PC 或者其他裝置 ) 傳遞的 Data Stream Structure 如下

打開範例程式 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 格式檔案的文件內容

程式碼需透過 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 後重新執行指令
:::

完成後會有項目可以選擇,首先選擇輸入 1 進行 “程式碼.txt”的燒錄

完成燒錄後會給出燒錄程式的起始位址,後續執行 6-Run CPU1 需輸入該位址才可以執行程式,開始執行後則會跳回終端機指令輸入狀態

---
## 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)