• 鋰電池知識

    電池知識

    鋰離子、磷酸鐵鋰、錳酸鋰、新能源

    TMS320VC5416并行自舉的巧妙實現

    2021-04-24 ryder

    摘要:提出了一種巧妙實現DSp并行自舉的辦法,即采用“兩次下載法”,利用DSp自身對FLASH編程,以實現DSp的并行自舉。這種在系統編程的DSp自舉實現方式無需文件轉換,簡單靈活。以TI公司的TMS320VC5416和閃爍存儲器SST39VF200為例,解析了該辦法的詳盡實現過程。


    隨著信息技術的飛速發展,數字信號解決器(DSp)得到了廣泛的使用。現今的高速DSp內存不再基于FLASH結構,而是采用存取速度更快的RAM結構。DSp掉電后其內部RAM中的程序和數據將全部丟失,所以在脫離仿真器的環境中,DSp芯片每次上電后非得自舉,將外部存儲區的執行代碼通過某種方式搬移到內部存儲區,并自動執行。目前使用非常廣泛的是TI公司的5000系列DSp,常用的自舉方式有并行自舉、串行自舉、主機接口(HpI)自舉和I/O自舉。HpI自舉需要有一個主機(如單片機)進行干預,雖然可以通過這個主機對DSp內部工作情況進行監控,但電路復雜、成本高;串口自舉代碼加載速度慢;I/O自舉僅占用一個端口地址,代碼加哉速度快,但一般的外部存儲器都需要接口芯片來滿足DSp的自舉時序,故電路復雜,成本高;并行自舉加載速度快,雖然需要占用DSp數據區的部分地址,但無需增加其它接口芯片,電路簡單。因此在TI公司的5000系列DSp中,并行自舉得到了廣泛的使用。


    將可執行代碼燒錄到外部存儲器,傳統的做法是通過編程器完成。先利用CCS軟件中的hex500.exe文件將要寫入的*.out文件轉換成編程器能夠識別的*.hex文件格式,再用編程器將轉換后的*.hex文件燒錄到外部EEROM中。然后,隨著芯片制造工藝的不斷提高,芯片集成度越來越高,存儲器正向小型化、貼片式的方向發展,很多貼片封裝的存儲器很難用編程器編程,更不可能頻繁插拔。與傳統的EEROM相比,FLASH存儲器具有支持在線擦寫且擦寫次數多、速度快、功耗低、容量大、價格低廉等優勢。目前在很多FLASH芯片采用3.3V單電源供電,與DSp連接時無需采用電平轉換芯片,因此電路連接簡單。在系統編程,利用系統本身的DSp筆直對外掛的FLASH存儲器編程,節省了編程器的費用和開發時間、使得DSp執行代碼可以在線更新。


    這里,在可執行代碼的FLASH燒錄方面,不再采用hex500.exe文件對*.out文件進行轉換,而是妙巧妙地采用“兩次下載法”,利用DSp對FLASH的寫操作將可執行代碼筆直寫到外掛FLASH中去。


    本文以一片TMS320VC5416外掛一片SST69VF200FLASH存儲器為例,解析要怎么樣通過DSp對FLASH在系統編程,以實現DSp并行自舉的詳盡辦法,并給出了DSp的C程序部分源碼。


    1DSp和FLASH構成的自舉系統


    DSp在自舉過程中,是將外部的存儲區當作數據存儲區來訪問的。因此在設計時,雖然FLASH內部存儲的是代碼,但對于DSp而言仍舊是數據。由于TMS320VC5416的數據總線是16位的,所以選用16位總線接口的FLASH存儲器。數據區中的0x0000~0x7FFF對應為DSp內存的RAM區,所以DSp要對外部的FLASH操作只能訪問0x8000~0xFFF的32K字存儲區。


    DSp自舉系統的基本連接如圖1所示。自舉系統中的選用的FLASH為SST公司的SS39VF200,該FLASH存儲器為128K字容量,16位總線接口。為了簡化起見,圖中沒有對FLASH進行分頁解決,僅僅是把它當成外部數據存儲區來解決。由于SS39VF200的讀信號OE和寫信號WE是分開的,且寫信號的優先級高于讀信號,而DSp的讀寫共用一個引腳,所以將DSp的讀寫信號與FLASH的寫信號相連接,而將其讀信號OE筆直接地,FLASH的片選信號CE筆直與DSp的數據區選擇信號OE相連接,這聲明將FLASH作為DSp的數據存儲區進行訪問。如上所述,DSp只能訪問外部數據區的0x8000~0xFFF區域的數據,因此對于39VF200而言,可以將最高位地址A16筆直接地。對于上述電路連接辦法,39VF200存儲器從0x0000開始的32K的空間是無法訪問的。


    2TMS320VC5416對SST39VF200的在系統編程


    2.1SS39VF200芯片解析


    SST39VF200的操作不像一般的RAM和ROM,除了讀數據的過程一樣外,其它的操作都不相同,非得按照一定的順序來執行。


    2.2TMS320VC5416對SST39VF200的編程操作


    通常,在對FLASH進行編程之前,非得將FLASH中待寫的區域進行擦除,然后才能進行編程操作。需要留意的是,每次對FLASH發出操作命令后,非得等到FLASH完成本次操作才能發送下一個操作命令。判斷FLASH執行命令完畢的方式有兩種,一是利用數據位D7判斷,如果FLASH尚未完成操作,則讀該位總是為低,完成操作后該位變成高;二是利用數據位D6判斷,如果FLASH尚未完成操作,則相鄰兩次讀到的D6位的值不同。當兩次讀到的D6位的值都是一樣的,聲明FLASH完成了本次操作。


    下面以數據位D6判斷操作完成與否,說明TMS320VC5416對SST39VF200寫操作的詳盡過程,其它操作過程與該過程基本相同。


    VoidWord_program(uint*Ad,uintDQ)//Ad為編程地址,DQ為編程數據


    {


    uint*Ad_Temp,Temp1,Temp2;//定義臨時地址指針和數據變量


    Ad_Temp=(uint*)(0x55555);//第一個寫周期


    *Ad_Temp=0x5555;//給地址0x5555,寫數據0x00AA


    Ad_Temp=(uint*)(0x2AAA);//第二個寫周期


    *Ad_Temp=0x0055;//給地址0x2AAA,寫數據0x0055


    Ad_Temp=(uint*)(0x5555);//第三個寫周期


    *Ad_Temp=0x00A0;//給地址0x5555寫數據0x00A0


    *Ad=DQ;//給編程地址寫編程數據


    Again;Temp1=*Ad&0x0040;//兩次讀D6(ToggleBit)


    Temp2=*Ad&0x0040;


    If(Temp1!=Temp2)//判斷是不是命令執行結束,否則持續讀ToggleBit


    gotoAgain;


    }

    圖2

    3TMS320VC5416的并行自舉


    通過在系統編程可以實現將執行代碼寫入FLASH。如果確定FLASH中用戶程序代碼的存儲格式并正確自舉以實現脫機運行是整個在系統編程的重點。


    3.1自舉表


    在解析DSp并行自舉過程之前,非得對DSp的自舉表加以說明。非得對DSp的自舉表加以說明。自舉表需按照TI公司規定的格式來創建。該表中存放在DSp初始化時要用到的特殊寄存器如SWWSR、BSCR等的值、程序入口地址、各段的目標首地址和長度以及要執行的代碼。


    3.2并知自舉過程


    完整的并行自舉的流程圖如圖2所示。


    SST39VF200FLASH存儲器是16位的,所以實際采用的是16位并行自舉,DSp內部的引導程序從數據空間地址0xFFFF讀取自舉表首地址,最后從自舉表中將可執行代碼搬移到DSp對應的RAM中。


    3.3"兩次下載法"實現并行自舉


    要怎么樣按照規定的自舉表格式將表中的各項內容寫入到外掛的FLASH中去?一般的做法是利用hex200.exe文件將*.out文件轉換后*.hex格式,然后讀取*.hex文件,將其寫入FLASH。這里采用一種更簡便的“兩次下載法”將自舉表寫入FLASH,整個過程無需文件轉換和文件讀取,并且完成此過程的代碼很小,幾乎不占用DSp內部的存儲空間。


    所謂的“兩次下載法”就是通過仿真器對DSp進行兩次加載來完成自舉表的建立。第一次加載用戶希望自舉的可執行代碼,稱為代碼1,加載完后不運行此代碼;緊接著加載建立自舉表的代碼,稱為代碼2。代碼1是DSp脫機運行時的代碼,代碼2僅僅是把代碼1按照自舉表的格式寫入到外部FLASH中的代碼。需要留意的是,代碼1和代碼2在分配程序存儲空間時不可以疊加,而且代碼2的數據空間非得蘊含代碼1和外部FLASH共同占用的空間,因為它要把代碼1按訪問數據的辦法寫到外部FLASH中。由于下載完代碼1后并沒有運行,而是緊接著下載代碼2,兩者的程序存儲區又不疊加,因此下載完碼2后,先前下載的代碼1仍然在DSp中,只是被代碼2看成數據而已。“兩次下載法”的詳盡操作步驟如下:


    (1)將DSp的Mp/MC引腳置高,讓DSp工作在微解決器方式。


    (2)將代碼1通過仿真器下載到DSp中,但不運行該代碼。


    (3)將代碼2通過仿真器下載到DSp中,運行此代碼。


    (4)代碼2運行結束后,去掉仿真器,并將Mp/MC引腳置低,讓DSp工作在微型計算機方式。


    (5)復位DSp,觀察程序運行的結果是不是正常。


    “兩次下載法”中兩次代碼的存儲區分配情況如圖3所示。

    圖中,代碼1中的數據段起始地址為0xA,數據段結束地址這0xB,代碼段起始地址為0xC,代碼段結束地址為0xD,其中0xB和0xC可以是同一地址,也可是不同地址;代碼2中的數據段起始地址為0xG,數據段結束地址為0xFFFF,代碼段起始地址為0xE,代碼段結束地址為0xF,其中0xF和0xG可以是同一地址,也可以是不同地址。對TMS320VC5416而言,因其0x0000~0x7FFF對應的是內部的32K字空間,所以兩個表中的地址大小關系為0xG<0xC<0xD<0x8000。


    基于上述思想,假設代碼1的程序段為0x4000~0x7FFF,數據段為0x3000~0x3FFF,代碼2的程序段為0x2000~0x2FFF,數據段為0x3000~0xFF7F(需要留意的是,代碼2的數據段非得蘊含代碼1的代碼段和FLASH所占據的地址空間,代碼2的代碼段絕對不能與代碼1的代碼段有疊加),外部FLASH占據的地址空間為0x8000~0xFF7F,自舉表的首地址從0x8000開始,并且SWWSR和BSCR的值分別為0x0E38和0x8806,程序入口地址為0x004089,代碼1長度為16K字,代碼1的存放起始地址為0x004000,那么代碼2在FLASH中建立自舉表的程序如下:


    UINTI;//定義臨時變量


    UINT*Addr1,*Addr2;//定義臨時地址指針變量


    Addr1=(uint*)0xffff;


    Word_program(Addr1,0x8000);//在數據空間0xffff地址寫自舉表起始地址0x8000


    Addr1=(uint*)0x8000;//自舉表首地址


    Word_program(Addr1,0x10AA);//自舉總線寬度為16位,即第一個字為0x10AA


    Addr1++;//累為地址


    Word_program(Addr1,0x0E38);//SWWSR的值


    Addr1++;//累加地址


    Word_program(Addr1,0x8806);//BRSC的值


    Addr1++;//累加地址


    Word_program(Addr1,0);//程序入口地址XpC為0


    Addr1++;//累加地址


    Word_program(Addr1,0x4089);//程序入口地址pC為0x4089


    Addr1++;//累加地址


    Word_program(Addr1,0x4000);//代碼長度為0x4000


    Addr1++;//累加地址


    Word_program(Addr1,0);//目標程序入口地址XpC為0


    Addr1++;


    Word_program(Addr1,0x4000);//目標程序入口地址pC為0x4000


    Addr1+;//累加地址


    Addr2=(uint*)0x4000//代碼1起始地址


    for(I=0;I<0x4000;I++)//寫代碼1到FLASH,長度為16K字


    Word_program(Addr1++,*(Addr1++));


    Word_program(Addr1,0x0000);//自舉表結尾的一個字寫入0x0000,自舉表建立結束


    代碼2除了上面的自舉表的建立外還包括FLASH的擦除和自舉表數據的校驗。需要留意的是,在對FLASH進行寫操作之前,非得對其進行擦除,擦除部分的程序可參考前面的Word_program()子函數。


    這樣,通過簡單的“兩次下載法”,利用代碼2將要脫機運行的代碼1以自舉表的格式寫到FLASH存儲器中,校驗正確后DSp即可脫機工作了。


    采用“兩次下載法”利用DSp自身對FLASH進行編程,可實現DSp的并行自舉。這種在系統編程的DSp自舉實現方式簡單靈活。文中給出的硬件電路僅適用于程序代碼小于32K字的系統中。在一般DSp系統中,都會有FpGA等可編程器件,利用它們可以靈活地對FLASH進行分頁操作。這樣,在程序量超過32K字的情況下,此辦法也適用。


    技術專區慕展上,世強帶來的SiC、GaN、三電平讓你的效率直達最high點要怎么樣利用二級輸出濾波器戒備開關電源噪聲陶瓷垂直貼裝封裝(CVMp)的焊接留意事項及布局DC-DC轉換器的均勻小信號數學建模及環路補償設計常用基準穩壓電源萌生方法是什么?

    聲明: 本站所發布文章部分圖片和內容自于互聯網,如有侵權請聯系刪除

    用手機掃描二維碼關閉
    二維碼
    国产在线精品一区二区高清不卡