圖 3:UCD3xxx 存儲結構
介紹如何生成X0 和Hex 文件以前,需要先了解一下UCD3xxx 系列數(shù)字控制器存儲結構,如圖3 所示。UCD3xxx 三種模式:復位模式、ROM 模式以及Flash 模式。這三種狀態(tài)對應的存儲映射是不一樣的。復位模式下,所有內存都映射為ROM;ROM 模式下,程序閃存(Program Flash)被映射在0x10000至0x17FFF,數(shù)據(jù)閃存(Data Flash)是從0x18800 至0x18FFF,隨機存取存儲(RAM)放在0x19000 至 0x19FFF;Flash 模式下,數(shù)據(jù)和隨機存取位置不變,程序閃存位置被重新映射到0 至0x7FFF。程序閃存最后4 個字節(jié)是保存整個程序閃存的校驗和。
UCD3xxx 起機過程是:上電開始進入復位模式;上電完成后進入ROM模式,此時芯片會自動跳轉到0xA000 執(zhí)行。在0xA000 至0xAFFF 這一段地址內,固化了一段ROM 程序,這段程序除了做一些芯片自身的初始化外,它還會計算程序閃存的校驗和,然后和程序閃存最后4 個字節(jié)保存的校驗和對比,如果不一致,此時程序會停下來,等待主機命令。如果對比結果一致,那么芯片就會進入Flash 模式,ROM 程序會執(zhí)行跳轉指令進入程序閃存中運行。
?
3 如何在CCS 集成開發(fā)環(huán)境下生成X0 和Hex 文件
圖 4:CCS 編譯器編譯選項設置
X0 和Hex 文件的生成離不開格式轉換程序:Hex470.exe 和 FusionX0ToHex.exe。Hex470.exe 是匯編語言工具包里面自帶的程序。FusionX0ToHex.exe 是TI 數(shù)字電源設計(Fusion Digital Power Designer)圖形用戶界面(GUI)所帶的轉換程序。Hex470.exe 和 FusionX0ToHex.exe 可以用命令行來調用,下面分別介紹各自的命令格式。
Hex470.exe 的命令行格式為:Hex470 [選項] 文件名,hex470 是調用轉換程序的命令,選項是控制轉換過程的附加信息(具體信息可參考文獻2),文件名是指輸入文件的名稱。Hex470 可以把CCS 編譯生成的后綴為Out 的文件轉換成各種格式的Hex 文件,如:
Hex470 –i sample.out
這段命令是把生成的sample.out 文件轉換成Intel Hex 格式文件,文件名稱為sample.hex;
Hex470 –x sample.out
這段命令是把生成的的sample.out 文件轉換成X0 格式文件,文件名稱sample.x0。
既然Hex470 可以直接把Out 文件轉換成Hex 文件,那為什么要先轉成X0 再轉換成Hex 文件呢?有兩個原因:Hex470 不會計算程序閃存的校驗和;Hex470 生成的Hex 文件地址是基于程序閃存模式,而燒寫器需要的地址是ROM模式,也就是從0x10000 至0x17FFF,所以UCD3xxx 不支持Hex470 直接生成的Hex 文件,需要通過FusionX0ToHex.exe 轉換程序把X0 文件轉換成Hex 格式文件,具體命令格式是:
FusionX0ToHex ??????--infile x0-file
--format intel|srec|hexdump
--pflash-checksum calc|none|source
--export pflash|dflash|both|source
--outfile hex-file
--infile 主要指定輸入X0 文件。
--format 主要指定生成哪種Hex 格式,分別為intel、srec(Motorola S-Record)和hexdump。
--pflash-checksum 主要指定程序閃存的校驗模式,calc 模式-基于X0 文件計算校驗位并寫入相應位置;none 模式-校驗位默認為0xFFFFFFFF;source 模式是使用X0 自己的校驗位。
--export 指定輸出哪一部分存儲,pflash 指只輸出程序閃存部分。dflash 指輸出數(shù)據(jù)閃存部分。both 是輸出程序和數(shù)據(jù)閃存。無論哪一部分,如果X0 文件中沒有就用0xFF 填充。source 是直接把X0 輸出。
--outfile 是指定輸出Hex 文件名稱。
介紹如何生成X0 和Hex 文件以前,需要先了解一下UCD3xxx 系列數(shù)字控制器存儲結構,如圖3 所示。UCD3xxx 三種模式:復位模式、ROM 模式以及Flash 模式。這三種狀態(tài)對應的存儲映射是不一樣的。復位模式下,所有內存都映射為ROM;ROM 模式下,程序閃存(Program Flash)被映射在0x10000至0x17FFF,數(shù)據(jù)閃存(Data Flash)是從0x18800 至0x18FFF,隨機存取存儲(RAM)放在0x19000 至 0x19FFF;Flash 模式下,數(shù)據(jù)和隨機存取位置不變,程序閃存位置被重新映射到0 至0x7FFF。程序閃存最后4 個字節(jié)是保存整個程序閃存的校驗和。
UCD3xxx 起機過程是:上電開始進入復位模式;上電完成后進入ROM模式,此時芯片會自動跳轉到0xA000 執(zhí)行。在0xA000 至0xAFFF 這一段地址內,固化了一段ROM 程序,這段程序除了做一些芯片自身的初始化外,它還會計算程序閃存的校驗和,然后和程序閃存最后4 個字節(jié)保存的校驗和對比,如果不一致,此時程序會停下來,等待主機命令。如果對比結果一致,那么芯片就會進入Flash 模式,ROM 程序會執(zhí)行跳轉指令進入程序閃存中運行。
?
3 如何在CCS 集成開發(fā)環(huán)境下生成X0 和Hex 文件

X0 和Hex 文件的生成離不開格式轉換程序:Hex470.exe 和 FusionX0ToHex.exe。Hex470.exe 是匯編語言工具包里面自帶的程序。FusionX0ToHex.exe 是TI 數(shù)字電源設計(Fusion Digital Power Designer)圖形用戶界面(GUI)所帶的轉換程序。Hex470.exe 和 FusionX0ToHex.exe 可以用命令行來調用,下面分別介紹各自的命令格式。
Hex470.exe 的命令行格式為:Hex470 [選項] 文件名,hex470 是調用轉換程序的命令,選項是控制轉換過程的附加信息(具體信息可參考文獻2),文件名是指輸入文件的名稱。Hex470 可以把CCS 編譯生成的后綴為Out 的文件轉換成各種格式的Hex 文件,如:
Hex470 –i sample.out
這段命令是把生成的sample.out 文件轉換成Intel Hex 格式文件,文件名稱為sample.hex;
Hex470 –x sample.out
這段命令是把生成的的sample.out 文件轉換成X0 格式文件,文件名稱sample.x0。
既然Hex470 可以直接把Out 文件轉換成Hex 文件,那為什么要先轉成X0 再轉換成Hex 文件呢?有兩個原因:Hex470 不會計算程序閃存的校驗和;Hex470 生成的Hex 文件地址是基于程序閃存模式,而燒寫器需要的地址是ROM模式,也就是從0x10000 至0x17FFF,所以UCD3xxx 不支持Hex470 直接生成的Hex 文件,需要通過FusionX0ToHex.exe 轉換程序把X0 文件轉換成Hex 格式文件,具體命令格式是:
FusionX0ToHex ??????--infile x0-file
--format intel|srec|hexdump
--pflash-checksum calc|none|source
--export pflash|dflash|both|source
--outfile hex-file
--infile 主要指定輸入X0 文件。
--format 主要指定生成哪種Hex 格式,分別為intel、srec(Motorola S-Record)和hexdump。
--pflash-checksum 主要指定程序閃存的校驗模式,calc 模式-基于X0 文件計算校驗位并寫入相應位置;none 模式-校驗位默認為0xFFFFFFFF;source 模式是使用X0 自己的校驗位。
--export 指定輸出哪一部分存儲,pflash 指只輸出程序閃存部分。dflash 指輸出數(shù)據(jù)閃存部分。both 是輸出程序和數(shù)據(jù)閃存。無論哪一部分,如果X0 文件中沒有就用0xFF 填充。source 是直接把X0 輸出。
--outfile 是指定輸出Hex 文件名稱。
電子發(fā)燒友App









評論