Post date: Jan 23, 2014 5:49:04 AM
這是第三次實際以邏輯分析儀測量 CAN 訊號的實驗,之前兩次的量測都沒有如預期般的量到訊號,第一次測量沒有抓到訊號,第二次測量沒有 OBDII scanner 時沒辦法量到訊號,第三次測量終於可以如預期般的量到訊號,並找出之前兩次測試的錯誤點,以下先稍為介紹前面兩次測試的環境及結果。
第一次測量,很直覺地,直接將車上的 OBDII 接上 OBDII to DB9 cable 的 CAN_H 與 CAN_L 以及 Chassis ground 直接拉出來接上邏輯分析儀測量,結果測不到訊號,推測可能是 Chassis ground 與 Signal ground 沒有短路,邏輯分析儀的 ground floating ,但實驗用的車子離實驗室太遠,沒帶工具到現場,經過一番折騰之後...決定打包回實驗室,回到實驗室後開始搜刮可能會用到的工具放進工具箱裡,由於過去在實驗室中我們使用的是自己的 CAN Bus 開發板 EVB ,我們以 EVB 測量時沒有問題,訊號都正常,但是上車以後卻測不到訊號,結論是我們沒有實車測量的經驗,多 K 點書下次再進行挑戰,此次測量沒有留下紀錄。
第二次測量,這次量測我們把 Chassis ground 與 Signal ground 短路在一起,使用 OBDII to DB9 的線(OBDII to DB9 cable)將訊號拉出來,本來以為這次應該是萬全準備了,接地有了、CAN_H、CAN_L 也有了,這次接上邏輯分析儀總該出現東西了吧。結果當然是槓龜,原因為何其實真的不知道,不過還好學長準備了一顆 OBDII Scanner ,從露天上買來的,一顆幾百塊台幣,還附贈手機 APP ,於是我們將 OBDII Scanner 插上車,將邏輯分析儀夾上 OBDII Scanner 的 CAN_H 與 CAN_L ,神奇的事情就這樣發生了,我們一直夢寐以求的 CAN 訊號終於出現了,不過到底訊號對還錯我們無法判斷,畢竟我車子上面的 CAN Bus 各個 ECU 都在傳遞自己的訊號,所以抓到了一堆碼也不知道是甚麼。
邏輯分析儀從 CAN Bus 上抓出來的封包會自動解碼,挺方便的,不過有個很奇怪的事情是,抓取到的封包一直錯誤,身為一個專業的 toolman 馬上覺得這次測量應該還是有問題,經過一番掙扎後,心中帶著 "為什麼沒有 OBDII Scanner 就量不到訊號?" 的疑問步履蹣跚的走回實驗室,並詢問其他學長的建議,這次的量測依然沒有任何紀錄,僅有從邏輯分析儀截下的圖。至於封包不斷發生錯誤的情況在使用 CAN transceiver 以後就沒有出現錯誤了。
OBDII to DB9 cable
OBDII Scanner
(from https://www.sparkfun.com/products/10087)
(from http://goods.ruten.com.tw/item/show?21303159374301)
第二次量測從邏輯分析儀上擷取到的畫面
第三次量測,這次為了保險起見,事先整理了很多資料,還做了一份 PPT 整理我們遇到的問題以及畫下量測時的接線圖,不過由於 PPT 中的部分內容仍在更正中,因此暫不提供,有需要請 email 跟我聯絡。
大致介紹一下這次的測量內容,由於前面兩次的測量都沒有如預期中的量到車上的 CAN Bus 訊號,因此這次我們將範圍縮小,僅對實驗室購入的 CAN simulator 做量測訊號的實驗,由於前面兩次測試都沒辦法直接測量到 CAN Bus 上的訊號,與教授及學長討論之後推測可能 OBDII Scanner 會送出 request ,Bus 上的 ECU 才會回應,而第二次測量得到的錯誤訊息可能是因為沒有 CAN transceiver 因此波形很醜,因而造成封包解碼出現錯誤,因此學長提供了一塊 CAN Transceiver 的模組給我們用。
將 OBDII simulator 插上從網路上買來的 OBDII 一對二分街頭,將 CAN simulator 分接出來的兩個 OBDII 一邊接 OBDII Scanner 一邊接上邏輯分析儀,接線圖如 2014-01-21 OBDII CAN simulator probe 第三次測試接線圖(with bluetooth CAN scanner) 所示,結果如我們預期般的可以測量到 CAN Bus 的訊號,不過這次測量到的 message 很少,僅有幾個特定的 ID 與 Data 不斷的重複,於是我們決定直接將邏輯分析儀直接接上 OBDII Scanner 找出 request 封包,果然得到兩組訊號 XXX.xxx ,於是我們將 OBDII Scanner 插回分接頭與 CAN simulator 連接,以邏輯分析儀重新測量,發現 OBDII Scanner 每丟出一次 request 之後, CAN simulator 回應的訊號都是某幾組特定 ID ,再來的工作就是將封包的訊息進行解碼,就能夠知道一些基礎的訊息如轉子轉速等訊息,由於 OBDII Scanner 是全部有 OBDII 的車款都適用,由此可知我們這次測量到的 message 並不是甚麼機密,不過可以為將來對其他 message 解碼鋪路。
OBDII 一對二分接頭
(from http://goods.ruten.com.tw/item/show?21401142487778)
2014-01-21 OBDII CAN simulator probe 第三次測試接線圖(with bluetooth CAN scanner)
2014-01-21 OBDII CAN simulator probe 第三次測試接線圖(without bluetooth CAN scanner)
經過三次測量 CAN Bus 訊號之後,我們猜測車上面的 CAN Bus 平時不會有訊號,直到有 ECU 送出 request 之後才會有 message 在上面跑,如此說來車上的 CAN 只是拿來做狀態監控,似乎沒有拿來做控制,當我們做完這結論後開心地衝去再一次實車量測 CAN Bus ,奇蹟的事情發生了,還沒送出 request 就可以接收到 CAN Bus 上的訊號,跟第一次還有第二次測量的結果完全相反,一定有誤會於是我翻出了第一、二次測量時的電路圖發現一件很詭異的事情,由於指導教授的關係我們得到一塊 CAN Bus 的測試板,不過電路圖中的 DB9 接頭中 CAN_H 與 CAN_L 的位置對應到 CiA 訂定的 OBDII to DB9 不一樣,不是接到 DB9 中的 CAN_H 與 CAN_L 而是接到1850 Bus+ & 1850 Bus- ,而前面兩次我們的測量都是用 CAN 的邏輯分析儀在測量 1850 Bus 難怪直接從 OBDII to DB9 的 DB9 讀不到訊號!所以車上的 CAN 還是有機會做控制。
雖然發現了問題卻還沒有得到答案,在念點書希望能找到答案,最後附上一張 OBDII to DB9 table ,不要再量錯了。
(from http://www.obd2allinone.com/sc/details.asp?item=obd2cable)