通過串列埠SCI更新DSP28335的使用者程式

2021-07-26 03:49:16 字數 2914 閱讀 7677

先看這個: 資料

2017.08.21更新

0x30 0000 - 0x30 7fff    flashh 

0x30 8000 - 0x30 ffff    flashg 

0x31 0000 - 0x31 7fff    flashf 

0x31 8000 - 0x31 ffff    flashe 

0x32 0000 - 0x32 7fff    flashd

0x32 8000 - 0x32 ffff    flashc

0x33 0000 - 0x33 7fff    flashb 

0x33 8000 - 0x33 ff7f    flasha 

/*記憶體分配

* 使用者程式可寫入下面的區域,目前128k,如果不夠還可以將f盤新增進來;

* 也可將a盤新增進來,但是a盤有程式鎖,新增該部分需要做相應的處理。

** flashe      : origin = 0x318000, length = 0x008000     // on-chip flash

* flashd      : origin = 0x320000, length = 0x008000     // on-chip flash

* flashc      : origin = 0x328000, length = 0x008000     // on-chip flash

* flashb   : origin = 0x330000, length = 0x008000     // on-chip flash

** user_code:          sectorb|sectorc|sectord|sectore

* boot_loader_code:   sectorg|sectorf                 //(f盤為boot備用盤,目前沒有使用)

* flash_api_code:     sectorh

*/其中使用者程式中的cmd檔案請注意:

我把codestart寫到了flashe的起始位址,這樣當公升級完程式後bootload程式應該接著執行user_code段,此段正好在flashe中,所以程式就開始從更新的使用者程式執行。

flashe_begin   : origin = 0x318000, length = 0x000010      /* 存放使用者程式的codestart */

flashe_usercode : origin = 0x318010, length = 0x007ff0 /* on-chip flash */

.cinit : > flashe_usercode page = 0

.pinit : > flashe_usercode, page = 0

.text : > flashe_usercode page = 0

codestart : > flashe_begin page = 0

ramfuncs : load = flashe_usercode,

run = raml0,

load_start(_ramfuncsloadstart),

load_end(_ramfuncsloadend),

run_start(_ramfuncsrunstart),

load_size(_ramfuncsloadsize),

page = 0

.econst : > flashe_usercode page = 0

.switch : > flashe_usercode page = 0

28335sci_update_flash通過串列埠更新程式的**

example_2833xgpiotoggle測試程式,在串列埠除錯助手上不斷列印「user code」

參考程式 參考的dsp通過arm公升級程式和通過can匯流排公升級程式,使用時將工程單獨拿出來解壓

1.改動sci_echoback例程測試接收hex檔案是否有問題 shgao 12.15

2.成功在flashe中更新使用者程式(在串列埠助手上列印訊息) shgao 12.16

存在的問題:(1)在傳送每部分時,只能接收到單數行的資料並存到flash中,現在臨時解決方案:先傳送此部分,然後刪除一行再重**送此部分;

(2)接收完資料後採用asm("lb 0*********")跳轉到使用者程式的main函式處,有沒有固定起始位址的方法?

3.解決上述問題(2)   shgao  12.17

使用者程式的.cmd檔案中將codestart分配到flashe的起始位址,在公升級程式中公升級完成後執行的是.user_code段,

在公升級程式中user_code段正是以flashe起始的。

4.上電後若在串列埠助手中輸入字元'u',則進入公升級狀態,先將sectore|sectord|sectorc|sectorb擦除,

然後等待傳送hex檔案,當最後一行傳送完成後公升級完成,自動跳轉到使用者程式開始執行。

注意:每次公升級時需要重啟裝置。

5.解決上述問題(1) shgao  12.17

由於在flash_program後面有串列埠輸出的語句,這樣可能造成接收有問題,所以去除scib_msg語句。

if(scirxd.rcvdata[3] == 0x0000)

}// else

//

6.解決執行擦除函式flash_erase時,經常進入中斷 interrupt void illegal_isr(void),成功使用串列埠公升級使用者程式 12.18

原因:在擦除的時候不要開著memory串列埠檢視flash區域的內容,將memory視窗關閉即可成功擦除,然後接收hex檔案寫入到使用者flash。

DSP28335的SCI標準模式非FIFO使用

目錄 1.sci標準模式下傳送 2.sci標準模式下接收 3.示例說明 scibregs.scitxbuf a 在scibregs.scictl2 bit txempty 1之後 scitxbuf 中的資料自動到 txshf 移位暫存器中 txshf 移位到硬體引腳 txd資料到達rxd引腳之後,檢...

DSP 28335的GPIO輸入限定取樣

dsp 28335的gpio輸入限定取樣 先了解輸入限定取樣吧 為什麼會有這麼乙個2b的概念呢 屌絲的理解就是 首先呢 這是對輸入的io而言的 一般呢 我們把io設定為輸入狀態 就是要讀取這個io口的狀態 比如說 0 10ms之間這段時間io口一直是個低電平 但是呢由於雜訊咋 或者其他因素的影響在某...

DSP28335的CMD檔案的空間分配

仔細思考一下這個問題!帶著疑問進行下面的解答。首先我們已經有了配置好的暫存器資料,這個時候我們需要把配置好的暫存器資料傳遞給實際的物理暫存器中,這樣晶元才 能根據我們想 要的功能進行工作。這裡分兩個步驟進行 第一步 將暫存器檔案分配到資料空間的某個資料段中。第二步 在cmd檔案中將這個資料段直接對映...