【轉載】s19文件格式詳解
來源:http://blog.csdn.net/xxxl/article/details/19494187
1.概述
為了在不同的計算機平臺之間傳輸程序代碼和數據,摩托羅拉將程序和數據文件以一種可打印的格式(ASCII格式)編碼成s格式文件。s格式文件是Freescale推薦使用的標準文件傳送格式。編譯完成之後,FreescaleCodeWarrior編譯器將在bin文件夾下自動生成“*.abs.s19”文件,這個文件包含最終下載帶單片機中的所有內容。
2. 格式定義及含義
S格式文件中的每一行稱為一個S記錄,每個S記錄由記錄類型、記錄長度、存儲地址、代碼/數據、校驗和5個部分組成。
每字節數據被編碼成2個16進制字符,第一個字符代表數據的高四位,第二個字符代表數據的低4位。
5個部分具體內容如下:
記錄類型 記錄長度 存儲地址 代碼/數據 校驗和
記錄類型:2個字符(即1個字節),用來描述記錄的類型。記錄供定義了8種類型:
S0:S格式文件的第一個記錄,表示文件名(含路徑),存儲地址部分沒有使用,以0000置位。此記錄表示記錄的開始,無需下載到MCU。
S1: 地址為2字節(4個字符)的記錄。
S2: 地址為3字節的記錄。
S3: 地址為4字節的記錄。
S5: 標記本文件的S1、S2、S3記錄的個數(此記錄不是一個S文件所必須的)。
S7: 地為4字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S8: 地為3字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S9: 地為2字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
記錄長度: 2個字符(即1個字節),顯示在記錄中剩余的字節數。即
記錄長度 = 存儲地址字節數 + 代碼/數據字節數 + 校驗和字節數
存儲地址: 2或3或4個字節(由記錄類型決定),用來表示代碼/數據應該裝載的起始地址。
代碼/數據: 0-64字符(即0-32字節),表示需要下載到MCU中的數據。
校驗和: 2個字符(即1字節),校驗數據,計算方法:
校驗和 = 0Xff – (記錄長度 + 存儲地址 + 代碼/數據)
(註意,為校驗和不是字符的校驗和,而是實際二進制數的校驗和)
3. 實例:
S01F0000443A5C50726F6A6563745F335C62696E5C50726F6A6563742E61627371
S123C000CF2100C6055B134A800BFE4A8000FE0000C015C03100000000000000 0000000092
S218FE8020F2FEC013EC31270BED31180A30700434F920F10A0B
S9030000FC
說明;
第一行:S0,表示S19文件格式開始;1F為剩余字節數;0000無用;443A5C50726F6A6563745F335C62696E5C50726F6A6563742E616273
為D:\Project_3\bin\Project_3.abs.的ASCII碼;71為校驗和.
第二行: S1,表示本條記錄存儲地址長度為2字節;23(註意為16進制)剩余字
節數,C000,表示起始地址,92表示校驗和。即,本行表示將
CF2100C6055B134A800BFE4A8000FE0000C015C0310000000000000000000000依次下載到從地址C000開始的一段連續地址中。
第三行:S2,表示本條記錄存儲地址長度為3字節,18(16進制數)表示剩余字節數,FE8020表示起始地址,0B為校驗和。
校驗和的計算:以S2記錄為例,
校驗和 = 0xFF – (0xFE + 0×80 + 0×20 + 0Xf2 + … + 0x0A);
另記:在用Freescale CodeWarrior調試FLASH擦除和寫入時需註意以下幾點:
1. 已寫入過的FLASH地址需要在擦除後才能再次寫入。
2. 在內存監視窗口有時無法看到是否正確寫入和擦除,可用指針從地址處讀出數據檢查是否正確擦除及寫入。
3.在BDM模式下,用自己寫的FLASH下載代碼通過串口導入s19文件後,將導致芯片鎖定,若不解鎖(Unsecure),無法再次通過BDM或者串口下載s19文件。但當芯片脫離BDM獨立運行時未發現此問題。
註: 軟件版本;CW for S12(X) 5.0,芯片型號:MC9S12XDP512
【轉載】s19文件格式詳解