K線學習博客來自:https://blog.csdn.net/haha1fan/article/details/78007839
針對自己不會的進行記錄(省的回顧看的時候還要重複記錄)
6、數據格式
發送一字節的數據格式爲(重點):
起始位 + 數據 + 停止位
1 + 8 + 1
如下:
7、實訓
從最底層開始,直接看K線的電平變化吧
截一段設備向ECU發送請求的數據:
**IO[0]:**用作K線通訊發送和接收數據的端口,變化電平高低(1,0)表示數據位的值
T:表示電平持續的時間
一個數據位的時間 = 1/波特率即: 1 / 10416 = 95 ns(約等於)
那就簡單了,把上面電平持續時間時間除以95,可以得出K線的電平變化情況:
單位:一個數據位的時間單位
把每字節的起始位和結束位去掉,可以很容易看出,這個設備發送命令字節間的時間間隔P1,爲4.5ms
所以解析一下電平圖代表的數據實際是:
這邊要怎麼看!!!
0 0000 0001 1 (對於47中的1還有45個)
即是0000 0001
1 1000 1000 1(對於46的1還有45個)
即是1000 1000
0 1000 1111 1 (對於50的1還有45個)
即是1000 1111
對於0 1000 0000 1(對於46的1還有45個)
得到1000 0000
因爲45/10 = 4.5 所以是4.5ms~
注意:數據先從低位開始發送,0000 0001 實際爲 1000 0000 則 0x80
向ECU發送請求的數據爲:0x80,0x11,0xF1,0x01
這段數據是沒實際作用的,因爲原地址後面沒有命令字,沒發實有用的命令
隨便再搞一段ECU返回設備的數據:
電平持續時間時間除以95,可以得出K線的電平變化情況:
可知ECU返回命令字節間的時間間隔P2,爲0ms
同上解析方法,很容易得出實際的數據爲:
ECU返回設備的數據爲:0x81,0xF1,0x11,0x7E
意思:ECU返回鏈路保持
大家對比發來的數據,是不是發現問題,校驗位呢???
實際ECU返回設備的數據是:0x81,0xF1,0x11,0x7E,0x01 ,因爲取的電平圖漏了一字節,還有一個校驗位沒截完…好吧我也懶得從新取數據了,大家知道就好
注意:這兩段電平不是對應的一發一收的,是我取兩條簡單的來解析,所以請求和返回沒對應起來,大家不要誤會
CAN線導師推薦學習:https://blog.csdn.net/langshi_2011/category_8936756.html