welcom ! Handel home

2009年10月27日 星期二

CheckSum 說明

 CheckSum 說明
>> CheckSum定義原因 
   應於記憶體的資料檢測方法 , 包括程式碼( code ROM ) 及 參數資料碼( RAM or EERAM ) ,為防止 不正常因素導致的 code 破壞 使系統安全性受到危害 所做的防制措施 ﹐ 凡記憶體都有被不明因素引起的 (bit lose) or (bank lose)之風險而做的  , 一般以system Bus 倍精度為最佳 8 bit bus checksum 為16bit , 16bit bus 用 32 bit checksum 這樣可以偵測出bit ERR 的機率較高

>> CheckSum 算法
有兩種
[1] 補數法
     選定check 區段 由起使位址 加到結束位址 就是加總到最後剩一個byte,用0x10000 - sum = x 將 x 寫入最後一個  byte。 下次檢查,其值為00H則為正確。使 checksum 保持為 0x0000 
[2] 加總法
選定check 區段 由起使位址 加到結束位址 一直加,加到完!其值就是CheckSum 由上面延伸,就有8位元16 32 .....位元的方式,當然也有非規則的 CheckSum, 但通常應用在特殊用途上。以system Bus 倍精度為最佳 8 bit bus checksum 為16bit , 16bit bus 用 32 bit checksum

>> CheckSum 應用方法
計算checksum 應在何時應用啟動check ?
*於開機power on時重要週邊設定好後啟動 check prg code AND 參數RAM
*於進入測試MODE 時列為 重要項目並顯示測值及 軟體板本
*系統校正程序前後 做checksum 主要檢查 參數區 Rom RAM

2 則留言:

178創富理財 提到...

請問用加總法的check sum時,如果其中有byte的值為負數時,該怎麼解決才不會有問題?
因為我有4個bytes是從int轉過來的,所以會有負數的問題,經過check sum一樣算的出來,只是送往設備時,都會顯示check sum error的錯誤訊息,只要都是正的就不會錯誤,不知這種問題該如何解決??
感謝

Handel 提到...

CheckSum 加總發 應該以 unsingle Int無號數型態資料 進行運算 不能使用有號數資料型態計算也就不可能產生負數,checksum 也是以無號數型態紀錄