關於DSP的boot mode / boot loader /上電順序 /在線升級等問題的總結


使用器件 ti dsp c2000 2837x

1、dsp的上電過程和boot mode以及boot loader

 

1)dsp的上電順序,

對於雙核系統而言 , 他的上電啟動順序如下所示:

 

系統復位或者重新上電之后:

 

cpu2系統重新上電之后,一直處於復位狀態

 

cpu1系統會自動跳轉到地址0x3fffc0中獲取復位向量,福為向量的目的就是為了使得系統自動跳轉到0X3F8000地址上,開始執行boot ROM 段中存儲的boot loader代碼段;

 

對於cpu1而言,cpu1的boot ROM段中的boot loader程序首先會從TI - OTP內存段中獲取設備的配置自,並配置好器件。

 

完成之后,boot loader 開始執行DCSM 和OTP JTAGLOCK流程:DCSM流程:1)讀取OTP中的Zx_poinyer;2)解碼指針值;3)度去除TI-OTP中的SECDC;4)讀取Zx BOOT模式;5)讀取ZX DCSM模塊

 

完成之后,boot loader檢測FUSEERR寄存器中是否存在錯誤標志位,並采取錯誤處理機制

 

之后初始化RAM和內存端的ECC/PARITY

 

完成之后cpu1將引導CPU2系統跳出復位操作,之后便不管cpu2的運行狀態

 

之后CPU1系統的boot loader將會根據外部的GPIO 和XRST(一般鏈接下載器才會有) 來確定程序的啟動方式是從flash啟動還是ram啟動,或者是在XRST為低的情況下,更具PIE向量表(地址為0xd00)的第一個32位的值來確定啟動方式(一般是鏈接了下載器的情況);

 

確定完之后,CPU1的boot loader代碼段會將各種信息都更新到指定的RAM段中,以便於CPU1的程序去讀取這些狀態字。

 

此時按照啟動方式開始跳轉程序,如果是flash啟動則將程序指針跳轉到0x80000(flash的其實地址),如果是ram啟動則將程序指針跳轉到0x00000(ram段的起始地址),同時結束boot loader並進入CPU1的主程序。

 

如果此時的啟動方式是外設啟動,那么boot loader則會等待外部程序按照一定的格式將程序加載到ram中,程序代碼傳輸完成之后,跳轉到運行指針開始運行程序代碼段。

 

此時cpu1的boot loader 完成使命,已退出,並開始執行CPU1中的用戶程序。

 

此時的CPU2系統知識退出了復位狀態,任然在等待啟動模式確定,需要cpu1的用戶程序來引導cpu2的引導,如果是cpu2也要從flash啟動,則通過ipc command即可觸發,但是如果cpu2也需要從外設啟動,那么需要cpu1的應用首先設置好外設的引腳,之后在觸發cpu2開始接受程序。

 

關於鏈接下載器的xrst為低是的系統啟動過程參考手冊

關於外設啟動的代碼輸入格式也可以參考手冊

 

//--------------------------------------------------------------------------------------------

 

2、實現在線升級的個些方案 : 

次方案是用 : 升級代碼 + 用戶應用程序的方式來實現

 

升級代碼的用途是下載到DSP中上電就開始運行的代碼段,主要功能是上電之后首先監測是否有升級指令發出,如果有則進入升級流程,如果沒有則通過(LB )的跳轉指令跳轉到指定的程序運行其實處。

 

假設 : 將用戶應用程序的其實地址定義為0XC0000;當監測到需要升級的指令,則升級代碼通過外設將上位機輸送過來的代碼通過DSP的flash API寫入到以0XC0000為起始地址的FLASH sector中,當所有的數據全部書寫完成之后,通過跳轉指令,將程序指針跳轉到0XC0000上,便開始執行用戶程序。

 

數據格式 : 上位機輸送給升級代碼的格式就是bin文件當中的內容,dsp將.out文件轉化為bin文件,然后dsp接受到這個文件直接寫入到flash中就可以,原因是 :將同一個程序的.out文件下載到dsp中,然后通過uniflsh去查看內部代碼段的內容和bin文件的內容是一樣的。

 

至於為什么bin文件和.out文件的格式和datasheet上的數據流內容不一樣,我還沒找到原因


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM