此帖子是借用同事James寫的一篇文章,我認為寫得很不錯,分享給大家。
8000的基本型CAN Command用於建立CAN BUS通訊,可讓系統藉由ADLink PCI – 7841進行CAN BUS的問答。命令格式如下:
由以上命令的參數來看,寫出資料就是指定CAN-ID與Data,應沒有使用上的疑問,但讀取資料沒有指定CAN-ID的參數,所有的資料都會被讀回,而實際應用上幾乎都是取回特定ID的資料再做分析。本文即是說明如何對ID進行過濾,取得真正需要的資料。
若要指定ID讀取資料,必須在ReadCAN_HexData之前加上此命令:
較需注意的是Acceptance code與Acceptance mask,透過這兩個參數的比對可決定哪些ID對應的資料可被讀回。Acceptance code為ID是否被允許的基準,Acceptance mask則是根據Acceptance code進行ID的過濾。
假設mask的bit 3為1,表示ID的bit 3必需與code的bit 3相同;若mask的bit 3為0,代表ID的bit3是0或1皆可。每個Bit都經過這樣的比對後,就能定義出被接受的ID有哪些。
在CAN-ID mode為11 bit的情況下,舉幾個例子:
Acceptance code: 0018(Hex) 0000 0000 0001 1000(Binary)
Acceptance mask: FFF8(Hex) 1111 1111 1111 1000(Binary)
在此配置之下,ID的bit 0 ~ bit 2皆可以是0或是1,bit 3 ~ bit 15則必須跟code相同,所以在此設定之後,ReadCAN_Hexdata可讀回ID: 0018 ~ 001F的全部資料。
若要0018這個ID讀取資料,則可將Acceptance code設定為指定0018,Acceptance mask設為FFFF,意指每一個bit都需與code相符合,如此ReadCAN_Hexdata便只會接受ID: 0018的資料。
透過以上方式,可以自由在PCI – 7841上進行資料讀寫。
但若是車輛相關應用,需要快速、持續的讀寫,建議使用EVCAN系列的命令搭配外掛程式:EV Plug-In為佳。