S19文件格式詳解(總結)

S19文件格式詳解

S-record格式文件是Freescale CodeWarrior編譯器生成的後綴名爲.S19的程序文件,是一段直接燒寫進MCU的ASCII碼,英文全稱問Motorola format for EEPROM programming

  1. 格式定義及含義
    S-record每行最大是78個字節,156個字符
    S-record format:

每個S記錄由記錄類型、記錄長度、存儲地址、代碼/數據、校驗和5個部分組成。
每字節數據被編碼成2個16進制字符,第一個字符代表數據的高四位,第二個字符代表數據的低4位。
記錄類型:2個字符(即1個字節),用來描述記錄的類型。記錄供定義了8種類型:

type(類型):2個字符。用來描述記錄的類型 (S0,S1,S2,S3,S5,S7,S8,S9)。
S0:S格式文件的第一個記錄,表示文件名(含路徑),存儲地址部分沒有使用,以0000置位。此記錄表示記錄的開始,無需下載到MCU。
S0 Record:記錄類型是“S0” (0x5330)。地址場沒有被用,用零置位(0x0000)。
數據場中的信息被劃分爲以下四個子域(此行表示程序的開始,不需燒入memory):
name(名稱):20個字符,用來編碼單元名稱
ver(版本):2個字符,用來編碼版本號
rev(修訂版本):2個字符,用來編碼修訂版本號
description(描述):0-36個字符,用來編碼文本註釋。
S1 Record:記錄類型是“S1” (0x5331)。地址場由2個字節地址來說明。數據場由可載入的數據組成。
S1: 地址爲2字節(4個字符)的記錄。
S2 Record:記錄類型是“S2” (0x5332)。地址場由3個字節地址來說明。數據場由可載入的數據組成。
S2: 地址爲3字節的記錄。
S3 Record:記錄類型是“S3” (0x5333)。地址場由4個字節地址來說明。數據場由可載入的數據組成。
S3: 地址爲4字節的記錄。
S5 Record:記錄類型是“S5” (0x5335)。地址場由2字節的值說明,包含了先前傳輸的S1、S2、S3記錄的計數。沒有數據場。
S5: 標記本文件的S1、S2、S3記錄的個數(此記錄不是一個S文件所必須的)。
S7 Record:記錄類型是“S7” (0x5337)。地址場由4字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S7: 地爲4字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S8 Record:記錄類型是“S8” (0x5338)。地址場由3字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S8: 地爲3字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S9 Record:記錄類型是“S9” (0x5339)。地址場由2字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S9: 地爲2字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。

count(計數):2個字符。 用來組成和說明了一個16進制的值,顯示了在記錄中剩餘成對字符的計數。
記錄長度: 2個字符(即1個字節),顯示在記錄中剩餘的字節數。即
記錄長度 = 存儲地址字節數 + 代碼/數據字節數 + 校驗和字節數

address(地址):2或3或4個字節(由記錄類型決定)。用來組成和說明了一個16進制的值,顯示了數據應該裝載的地址, 這部分的長度取決於載入地址的字節數。2個字節的地址佔用4個字符,3個字節的地址佔用6個字符,4個字節的地址佔用8個字符。
存儲地址: 2或3或4個字節(由記錄類型決定),用來表示代碼/數據應該裝載的起始地址。

data(數據):0—64字符。用來組成和說明一個代表了內存載入數據或者描述信息的16進制的值。
代碼/數據: 0-64字符(即0-32字節),表示需要下載到MCU中的數據。

checksum(校驗和):2個字符。這些字符當被配對並換算成16進制數據的時候形成了一個最低有效字符節,該字符節用來表達作爲補充數據,地址和數據庫的字符對所代表的(字節的)補碼的byte總和。即計數值、地址場和數據場的若干字符以兩個字符爲一對,將它們相加求和,和的溢 出部分不計,只保留最低兩位字符NN,checksum =0xFF-0xNN。
校驗和: 2個字符(即1字節),校驗數據,計算方法:
校驗和 = 0Xff – (記錄長度 + 存儲地址 + 代碼/數據)
(注意,爲校驗和不是字符的校驗和,而是實際二進制數的校驗和)

  1. 實例:
    S01F0000443A5C50726F6A6563745F335C62696E5C50726F6A6563742E61627371
    S123C000CF2100C6055B134A800BFE4A8000FE0000C015C031000000000000000000000092
    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 – (0x18+0xFE + 0×80 + 0×20 + 0Xf2 + … + 0x0A);

S19文件格式詳解

S-record格式文件是Freescale CodeWarrior編譯器生成的後綴名爲.S19的程序文件,是一段直接燒寫進MCU的ASCII碼,英文全稱問Motorola format for EEPROM programming

  1. 格式定義及含義
    S-record每行最大是78個字節,156個字符
    S-record format:

每個S記錄由記錄類型、記錄長度、存儲地址、代碼/數據、校驗和5個部分組成。
每字節數據被編碼成2個16進制字符,第一個字符代表數據的高四位,第二個字符代表數據的低4位。
記錄類型:2個字符(即1個字節),用來描述記錄的類型。記錄供定義了8種類型:

type(類型):2個字符。用來描述記錄的類型 (S0,S1,S2,S3,S5,S7,S8,S9)。
S0:S格式文件的第一個記錄,表示文件名(含路徑),存儲地址部分沒有使用,以0000置位。此記錄表示記錄的開始,無需下載到MCU。
S0 Record:記錄類型是“S0” (0x5330)。地址場沒有被用,用零置位(0x0000)。
數據場中的信息被劃分爲以下四個子域(此行表示程序的開始,不需燒入memory):
name(名稱):20個字符,用來編碼單元名稱
ver(版本):2個字符,用來編碼版本號
rev(修訂版本):2個字符,用來編碼修訂版本號
description(描述):0-36個字符,用來編碼文本註釋。
S1 Record:記錄類型是“S1” (0x5331)。地址場由2個字節地址來說明。數據場由可載入的數據組成。
S1: 地址爲2字節(4個字符)的記錄。
S2 Record:記錄類型是“S2” (0x5332)。地址場由3個字節地址來說明。數據場由可載入的數據組成。
S2: 地址爲3字節的記錄。
S3 Record:記錄類型是“S3” (0x5333)。地址場由4個字節地址來說明。數據場由可載入的數據組成。
S3: 地址爲4字節的記錄。
S5 Record:記錄類型是“S5” (0x5335)。地址場由2字節的值說明,包含了先前傳輸的S1、S2、S3記錄的計數。沒有數據場。
S5: 標記本文件的S1、S2、S3記錄的個數(此記錄不是一個S文件所必須的)。
S7 Record:記錄類型是“S7” (0x5337)。地址場由4字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S7: 地爲4字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S8 Record:記錄類型是“S8” (0x5338)。地址場由3字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S8: 地爲3字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S9 Record:記錄類型是“S9” (0x5339)。地址場由2字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S9: 地爲2字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。

count(計數):2個字符。 用來組成和說明了一個16進制的值,顯示了在記錄中剩餘成對字符的計數。
記錄長度: 2個字符(即1個字節),顯示在記錄中剩餘的字節數。即
記錄長度 = 存儲地址字節數 + 代碼/數據字節數 + 校驗和字節數

address(地址):2或3或4個字節(由記錄類型決定)。用來組成和說明了一個16進制的值,顯示了數據應該裝載的地址, 這部分的長度取決於載入地址的字節數。2個字節的地址佔用4個字符,3個字節的地址佔用6個字符,4個字節的地址佔用8個字符。
存儲地址: 2或3或4個字節(由記錄類型決定),用來表示代碼/數據應該裝載的起始地址。

data(數據):0—64字符。用來組成和說明一個代表了內存載入數據或者描述信息的16進制的值。
代碼/數據: 0-64字符(即0-32字節),表示需要下載到MCU中的數據。

checksum(校驗和):2個字符。這些字符當被配對並換算成16進制數據的時候形成了一個最低有效字符節,該字符節用來表達作爲補充數據,地址和數據庫的字符對所代表的(字節的)補碼的byte總和。即計數值、地址場和數據場的若干字符以兩個字符爲一對,將它們相加求和,和的溢 出部分不計,只保留最低兩位字符NN,checksum =0xFF-0xNN。
校驗和: 2個字符(即1字節),校驗數據,計算方法:
校驗和 = 0Xff – (記錄長度 + 存儲地址 + 代碼/數據)
(注意,爲校驗和不是字符的校驗和,而是實際二進制數的校驗和)

  1. 實例:
    S01F0000443A5C50726F6A6563745F335C62696E5C50726F6A6563742E61627371
    S123C000CF2100C6055B134A800BFE4A8000FE0000C015C031000000000000000000000092
    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 – (0x18+0xFE + 0×80 + 0×20 + 0Xf2 + … + 0x0A);

S19文件格式詳解

S-record格式文件是Freescale CodeWarrior編譯器生成的後綴名爲.S19的程序文件,是一段直接燒寫進MCU的ASCII碼,英文全稱問Motorola format for EEPROM programming

  1. 格式定義及含義
    S-record每行最大是78個字節,156個字符
    S-record format:

每個S記錄由記錄類型、記錄長度、存儲地址、代碼/數據、校驗和5個部分組成。
每字節數據被編碼成2個16進制字符,第一個字符代表數據的高四位,第二個字符代表數據的低4位。
記錄類型:2個字符(即1個字節),用來描述記錄的類型。記錄供定義了8種類型:

type(類型):2個字符。用來描述記錄的類型 (S0,S1,S2,S3,S5,S7,S8,S9)。
S0:S格式文件的第一個記錄,表示文件名(含路徑),存儲地址部分沒有使用,以0000置位。此記錄表示記錄的開始,無需下載到MCU。
S0 Record:記錄類型是“S0” (0x5330)。地址場沒有被用,用零置位(0x0000)。
數據場中的信息被劃分爲以下四個子域(此行表示程序的開始,不需燒入memory):
name(名稱):20個字符,用來編碼單元名稱
ver(版本):2個字符,用來編碼版本號
rev(修訂版本):2個字符,用來編碼修訂版本號
description(描述):0-36個字符,用來編碼文本註釋。
S1 Record:記錄類型是“S1” (0x5331)。地址場由2個字節地址來說明。數據場由可載入的數據組成。
S1: 地址爲2字節(4個字符)的記錄。
S2 Record:記錄類型是“S2” (0x5332)。地址場由3個字節地址來說明。數據場由可載入的數據組成。
S2: 地址爲3字節的記錄。
S3 Record:記錄類型是“S3” (0x5333)。地址場由4個字節地址來說明。數據場由可載入的數據組成。
S3: 地址爲4字節的記錄。
S5 Record:記錄類型是“S5” (0x5335)。地址場由2字節的值說明,包含了先前傳輸的S1、S2、S3記錄的計數。沒有數據場。
S5: 標記本文件的S1、S2、S3記錄的個數(此記錄不是一個S文件所必須的)。
S7 Record:記錄類型是“S7” (0x5337)。地址場由4字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S7: 地爲4字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S8 Record:記錄類型是“S8” (0x5338)。地址場由3字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S8: 地爲3字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。
S9 Record:記錄類型是“S9” (0x5339)。地址場由2字節的地址說明,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入memory。
S9: 地爲2字節,表示程序的開始執行地址,代碼/數據部分沒有被使用,此行表示程序的結束,無需下載到MCU。

count(計數):2個字符。 用來組成和說明了一個16進制的值,顯示了在記錄中剩餘成對字符的計數。
記錄長度: 2個字符(即1個字節),顯示在記錄中剩餘的字節數。即
記錄長度 = 存儲地址字節數 + 代碼/數據字節數 + 校驗和字節數

address(地址):2或3或4個字節(由記錄類型決定)。用來組成和說明了一個16進制的值,顯示了數據應該裝載的地址, 這部分的長度取決於載入地址的字節數。2個字節的地址佔用4個字符,3個字節的地址佔用6個字符,4個字節的地址佔用8個字符。
存儲地址: 2或3或4個字節(由記錄類型決定),用來表示代碼/數據應該裝載的起始地址。

data(數據):0—64字符。用來組成和說明一個代表了內存載入數據或者描述信息的16進制的值。
代碼/數據: 0-64字符(即0-32字節),表示需要下載到MCU中的數據。

checksum(校驗和):2個字符。這些字符當被配對並換算成16進制數據的時候形成了一個最低有效字符節,該字符節用來表達作爲補充數據,地址和數據庫的字符對所代表的(字節的)補碼的byte總和。即計數值、地址場和數據場的若干字符以兩個字符爲一對,將它們相加求和,和的溢 出部分不計,只保留最低兩位字符NN,checksum =0xFF-0xNN。
校驗和: 2個字符(即1字節),校驗數據,計算方法:
校驗和 = 0Xff – (記錄長度 + 存儲地址 + 代碼/數據)
(注意,爲校驗和不是字符的校驗和,而是實際二進制數的校驗和)

  1. 實例:
    S01F0000443A5C50726F6A6563745F335C62696E5C50726F6A6563742E61627371
    S123C000CF2100C6055B134A800BFE4A8000FE0000C015C031000000000000000000000092
    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 – (0x18+0xFE + 0×80 + 0×20 + 0Xf2 + … + 0x0A);

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章