DSP28335—FLASH燒寫的方法

2020-10-25 08:00:40

把燒寫到RAM程式修改成燒寫到FLASH的方法

首先,希望大家明白一點,想把一個原來是燒寫到DSP的片內RAM的程式修改成是燒寫到DSP片內FLASH的程式,不僅僅是修改一個cmd檔案就結束了,還需要做其他幾個步驟,這裡我重點強調一下。

第一步:把28335_RAM_lnk.cmd這個從project中移除,用右鍵選擇28335_RAM_lnk.cmd然後選delate。

第二步:右鍵選擇project名稱,然後選add file to
project,然後出現瀏覽框,在\Code of TMS320F28335
CCS4\v120\DSP2833x_common\cmd這個子資料夾下,選擇F28335.cmd,點OK,至此可以在project的檔案列表內看到F28335.cmd被新增到project中。

第三步:在main()函數中新增如下語句

MemCopy(&RamfuncsLoadStart,
&RamfuncsLoadEnd, &RamfuncsRunStart); InitFlash();

上述兩句話新增在InitPieVectTable();這句的下面的一行。

新增語句的時候,注意不要新增錯了,每一個字母都要正確,括號也要用英文括號。

第四步:新增DSP2833x_MemCopy.c這個檔案到project中,右鍵選擇project名稱,然後選add file to
project,然後出現瀏覽框,找到\Code of TMS320F28335
CCS4\v120\DSP2833x_common\source資料夾中的DSP2833x_MemCopy.c這個檔案,然後點OK。

第五步:編譯,點rebuild,編譯至少要保證沒有ERROR,否則請檢查一下

在第三步操作的地方是不是有錯誤。

其次,我再強調一下,不是RAM中執行正確的程式,就在FLASH中執行也一定正確。希望大家糾正一下以前的錯誤觀念,據我瞭解,很多買家朋友都會有上面的理解誤區。這是因為同樣的程式在DSP的RAM中執行消耗的時間要遠遠短於在FLASH中執行的時間。

我下面就給大家舉個例子,有一箇中斷函數cpu_timer_isr10ms(),這個函數每隔10ms由CPU定時器1產生中斷觸發,自動跳轉進入執行一次。這個cpu_timer_isr1ms()內部包括三個子函數依次是adc_sanple(),pwm_update(),gpio_toggle()

如下

cpu_timer_isr1ms()

{

adc_sanple();

pwm_update();

gpio_toggle();

}

其中假設adc_sanple()這個子函數在RAM中的執行時間是1ms,pwm_update()這個子函數在RAM中的執行時間是2ms,gpio_toggle()這個子函數在RAM中的執行時間是3ms,那麼1+2+3=6<10,所以完全沒有問題,在RAM中上面這些程式都可以執行很好。

但是,如果把上面這些程式放到FLASH中執行,很有可能adc_sanple()這個子函數在FLASH中的執行時間是3ms,pwm_update()這個子函數在FLASH中的執行時間是7ms,這是因為同樣的程式在DSP的RAM中執行消耗的時間要遠遠短於在FLASH中執行的時間。這樣前兩個函數就把10ms都用掉了,根本輪不上gpio_toggle()這個子函數被執行,就被DSP強制終止了,所以買家朋友就看不到gpio_toggle()的現象。於是很多買家就以為是DSP開發板出了什麼問題,其實完全是自己程式出了問題。

三、DSP燒寫片內FLASH常見問題和解決方法

下面講解固化燒寫DSP的FLASH程式時候常見的困難,一般就是三種情況 1、

DSP的Boot mode 模式選擇不正確

這種錯誤的現象是可以正常Load program程式到DSP的FLASH,按照我的教學操作燒寫程式到RAM和FLASH都是沒有問題的,都可以正常燒寫,也不會報錯,但是掉電後重新啟動,DSP沒有反應,所謂的沒有反應就是說,本來寫的程式是讓GPIO輸出高電平,掉電後,DSP的GPIO沒有相應的輸出高電平。

這個錯誤,而且還有一個很關鍵的現象,就是說,燒寫程式到DSP的FLASH後,不拔掉DSP模擬器,像教學中說的那樣,點RUN,DSP的FLASH程式可以正確的執行,顯現正常的現象。

如果你的現象符號上面的特點,那麼就很有可能是「DSP的Boot mode 模式選擇不正確」導致的錯誤。如何改正這個錯誤呢?

如果是購買的本店的TMS320F28335開發板,正確的設定從FLASH啟動的Boot mode就把DSP開發板上的撥碼開關都撥到ON的位置即可,其實這點我已經在光碟中用txt檔案強調了一下,這裡我再強調一下。而且即便是你把DSP程式下載到DSP片內RAM中執行,也把撥碼開關打到ON的位置。

DSP開發板上的撥碼開關都撥到ON的位置的本質含義是:將F28335的GPIO84、GPIO85、GPIO86、GPIO87這四個引腳用1k到10k之間電阻上拉到3.3V,這樣就是選擇了從DSP內部FLASH處boot程式這個Bood mode。

2、

ccxml檔案設定處的晶片型號和開發板上的DSP型號不一致

舉個例子,實際的DSP是TMS320F2808,ccxml檔案選擇的晶片型號是TMS320C2808,這個是錯誤的。

再舉例子,實際的DSP型號是TMS320F28335,ccxml檔案選擇的晶片型號是TMS320F28334,這個也是錯誤的。

在這樣錯誤的時候,是可以成功的Connect的,但是無法正常固化程式到DSP的FLASH。

3、

把本來應該是Load program到RAM的out檔案誤以為是可以固化到DSP的FLASH中的

可以Load program到RAM的Out檔案和可以固化(燒寫)到FLASH的out檔案,內容是不同的,不能張冠李戴。

在本店DSP開發板配套的例程程式碼檔案夾Code of
TMS320F28335 CCS4中,只有FLASH這個子資料夾中的debug資料夾下的out是可以Load program到DSP的片內FLASH的,其他的如果不做修改,那麼都是預設燒寫到DSP的片內RAM中的

四、最後的一招

如果你已經把前面的第二章、第三章兩個章節的內容都操作了,但是仍然不正確,那麼就用這「最後的一招」,就是在我的FLASH例程程式基礎上,移植你自己編寫的程式,並且強烈推薦一點點的移植,這樣一邊移植,一邊編譯,一邊load到FLASH中去看現象,來檢查哪裡出問題了。因為我的FLASH例程是肯定正確的,如果你把程式移植到我的FLASH例程中,仍然出現程式在FLASH中不執行的現象,那麼100%是你程式寫的不對了。我建議一點點的移植的目的,就是這樣比較容易檢查到程式哪裡出錯誤了。

至此我就把DSP燒寫片內FLASH常見的問題和相應的解決方法講解完畢。

以上是轉載微博的以為大佬之手,給和我一樣需要幫助的小白。。。。