性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

☆☆☆☆☆-----請高手幫忙分析一組串口間通訊數據的校驗方式 -----☆☆☆☆☆

問題概述:從一部小機器上讀到幾串數據,已經分析出后兩位為校驗碼,但不清楚是用什么原理做的校驗?特請大家?guī)兔Ψ治鲂r灤a是通過什么算法得到.

測試環(huán)境:一部小機器內部有三塊單片機(為A機,B機,C機,其中A機已知是主機,且A機為發(fā)送端,B機和C機是接收端),通訊方式采用232串口.通過機器上的設置按鈕可以改變主機A的發(fā)送參數,現在可以把主機A發(fā)送的數據截獲下來,已經分析出每串數據的后兩位為校驗碼.但就是不清楚其采用什么樣的校驗方式?

主機A----發(fā)給B機的數據(通過修改機器某個參數(對應下面數據的第2位)為8個不同的值,截獲的8次不同發(fā)送數據)
:C1420000D80000000200000000000000000000A7
:C2420000D80000000200000000000000000000A6
:C3420000D80000000200000000000000000000A5
:C4420000D80000000200000000000000000000A4
:C5420000D80000000200000000000000000000A3
:C6420000D80000000200000000000000000000A2
:C7420000D80000000200000000000000000000A1
:C8420000D80000000200000000000000000000A0

主機A----發(fā)給C機的數據(通過修改機器某個參數(對應下面數據的第4位)為3個不同的值,截獲的3次不同發(fā)送數據)
:E000000901010000007F
:E001000901010000007E
:E002000901010000007D
主機A----發(fā)給C機的數據(通過修改機器另一個參數(對應下面數據的第8位)為3個不同的值,截獲的3次不同發(fā)送數據)
:E0000001010100000087
:E0000002010100000086
:E0000008010100000080
-----------------------------------------------------------------------------------------------------------------------------------------
下面主要是B機和C機返回給A機的數據,(由于這些數據實時都在變化,且較長,怕影響大家的思路,故開始沒有介紹,)
對整個系統(tǒng)為半雙工通信,下面是A機發(fā)送數據后收到從B機和C機返回的數據,由于B機和C機發(fā)給A主機的數據比較復雜,主要是許多路電壓和電流方面的數據,并且隨時都在變化(AD采集的結果都會時刻變化)下面的數據只是"某個時刻"的截獲數據,

B機返回給A機的數據::(某時刻截獲的返回給A機的3組數據,每組的最后兩位為校驗碼)
:C0D0080100000041749F780E747F6F776EDF6DFCD0E3D51F001F001F00400040004000807F7F807F7F0E3200B0E0000360005F005F00006E32F300F200F20000020808080000000000FB00FC00000000000000000000000000000000000000000000E63096
:C1D008010000003A74AF782074876F7A6EDF6DF8D0DED51F001F001F00400040004000807F7F807F7F0E3200B0E000035F005F005F00006E32F300F200F20000020808080000000000FB00FC00000000000000000000000000000000000000000000E6307B
:C2D008010000003B7487781B747C6F7C6EDC6DFBD0EAD51F001F001F004000400040007F7F7F807F7F0E3200B0E0000360005F005F00006E32F300F200F20000020808080000000000FB00FC00000000000000000000000000000000000000000000E63070

C機返回給A機的數據:(某時刻截獲的返回給A機的3組數據,每組的最后兩位為校驗碼)
:E0E00100506D286E006F10747077E8744C324C320000000000004000000000000000000000000000000000000000000000102E
:E0E00100286E286E006F10747877E87447324C3200000000000040000000000000000000000000000000000000000000001034
:E0E00100506D506D006F38739876E8744C324C3200000000000040000000000000000000000000000000000000000000001022
全部回復(5)
正序查看
倒序查看
mckeeqin
LV.1
2
2009-01-04 12:41
不是CRC,也不是累加和,常用的校驗方式都試過,都不行啊
0
回復
whatcall
LV.5
3
2009-01-04 18:15
@mckeeqin
不是CRC,也不是累加和,常用的校驗方式都試過,都不行啊
我覺得可以肯定是一種計算累加和的一種方式(但是最后的校驗字節(jié)是和的補碼).從你列的所有數據來看,都符合這個規(guī)律,比如:

:C1420000D80000000200000000000000000000A7
:C2420000D80000000200000000000000000000A6

C1增加為C2,A7則減小到A6.

其余兩種數據也一樣,并且這兩種之間的第一組中校驗碼錢的字節(jié)和差8(09->01 ),校驗碼從7F到87(也差8).
(1):E000000901010000007F
(2):E001000901010000007E

(1):E0000001010100000087  (累加和=0xE3,
(2):E0000002010100000086   (累加和=0xE4,

所以我推斷是(累加和+某一特定數),然后再取反.
對于后兩種,某一特定數=0x96

對于C1420000D80000000200000000000000000000A7,某一特定數=0xE6.

當然這不是最清晰的描述,你需要更多的數據組合去驗證.
0
回復
mckeeqin
LV.1
4
2009-01-05 13:08
@whatcall
我覺得可以肯定是一種計算累加和的一種方式(但是最后的校驗字節(jié)是和的補碼).從你列的所有數據來看,都符合這個規(guī)律,比如::C1420000D80000000200000000000000000000A7:C2420000D80000000200000000000000000000A6C1增加為C2,A7則減小到A6.其余兩種數據也一樣,并且這兩種之間的第一組中校驗碼錢的字節(jié)和差8(09->01),校驗碼從7F到87(也差8).(1):E000000901010000007F(2):E001000901010000007E(1):E0000001010100000087  (累加和=0xE3,(2):E0000002010100000086  (累加和=0xE4,所以我推斷是(累加和+某一特定數),然后再取反.對于后兩種,某一特定數=0x96對于C1420000D80000000200000000000000000000A7,某一特定數=0xE6.當然這不是最清晰的描述,你需要更多的數據組合去驗證.
whatcall 你好,先謝謝你的回復,你提示的思路我試了,對B機可以推出一個特定值,對C機發(fā)的數據也可以推出一個特定值,可是對返回給A機的數據就不吻合了,(B機和C機返回給A機的數據剛在一樓做了補充,由于這些數據實時都在變化,且較長,怕影響大家的思路,故開始沒有介紹)
0
回復
whatcall
LV.5
5
2009-01-05 23:40
@mckeeqin
whatcall你好,先謝謝你的回復,你提示的思路我試了,對B機可以推出一個特定值,對C機發(fā)的數據也可以推出一個特定值,可是對返回給A機的數據就不吻合了,(B機和C機返回給A機的數據剛在一樓做了補充,由于這些數據實時都在變化,且較長,怕影響大家的思路,故開始沒有介紹)
數據確實很多,而且沒有按字節(jié)隔開,看起來很費勁.你說的最后“兩位”,我想值得應該是最后“一個字節(jié)”,對不對?
既然你驗證過了不符合,是不是再考慮考慮這一串數據當中有沒有可能某幾個字節(jié)是不參與檢驗的?或者校驗嗎是16位的(2個字節(jié))?當然只有再找更多的數據來驗證了,確實沒什么好方法.尤其是CRC或其變種,校驗碼與前面的數據關系不是很直觀.還有一些校驗方式比如異或(XOR)也可以試試.總之,祝你好運.
0
回復
mckeeqin
LV.1
6
2009-01-06 08:19
@whatcall
數據確實很多,而且沒有按字節(jié)隔開,看起來很費勁.你說的最后“兩位”,我想值得應該是最后“一個字節(jié)”,對不對?既然你驗證過了不符合,是不是再考慮考慮這一串數據當中有沒有可能某幾個字節(jié)是不參與檢驗的?或者校驗嗎是16位的(2個字節(jié))?當然只有再找更多的數據來驗證了,確實沒什么好方法.尤其是CRC或其變種,校驗碼與前面的數據關系不是很直觀.還有一些校驗方式比如異或(XOR)也可以試試.總之,祝你好運.
前面我說的最后兩位是指最后一個字節(jié),
校驗碼是16位的(2個字節(jié))估計不太可能,因為平時從發(fā)送的數據和接收的數據看,跟隨前面數據一起變化的一直是最后一個字節(jié),而非兩個字節(jié).
多謝你的關注 我一定會再努力試的!
0
回復
發(fā)