---
# System prepended metadata

title: TI F280025C -- Bootloader
tags: [TI C2000]

---

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