發表文章

目前顯示的是 2月, 2019的文章

文章總列表

ELM327 OBD-II 心得 (5) ,CAN BUS塞了爛裝置會怎樣

圖片
上一篇 我描述Pi-WIRE怎麼發動中間人攻擊。這篇我想聊一下製作過程踩到的坑,分析在CANBUS掛上爛東西會怎樣。用這個故事分析OBD-II Dongle(ELM327,HUD抬頭顯示器)究竟能不能用,或著注意事項 我買了4個CANBUS收發模組,每片樹莓派都放WaveShare + Niren混搭。能省則省,所以我去淘寶都找便宜的買 WaveShare  RS485 CAN HAT  * 2 Niren MCP2515 CAN Module * 2 貪便宜模組 用已經會動的東西(ELM327)驗證不會動的東西(Pi-CAR)是重要的技巧。樹莓派接上 貪便宜模組 ,很快就碰壁了: 長封包必死 ELM327送0902,其實會送滿8bytes:09 02 00 00 00 00 00 00 可以下ATCAF0讓ELM327不要塞滿8byte,變成短封包 短封包也不一定活 有時候一次OK 有時候會重傳 有時候就死掉了! 拿示波器查問題,檢查CAN-H信號並開了反向(inverse)。下圖包括第一次傳送,錯誤禎(Error Frame),第二次傳送 第一次傳送,ELM327送出0902 具體會送出0x7E8 [2] 0x09 0x02 0x7E8是工業規格,ISO 15765制定的要和CANBUS當好朋友都要從這裡開始 我手算過CANBUS信號,Bit stuffing是其中的眉角 Bit stuffing:連續5個0會安插一個1;連續5個1會安插一個0 錯誤禎, 貪便宜模組自我感覺不良好,要社會大眾等他 整個CANBUS停了40us ELM327等錯誤幀過了,重送一次,最後 貪便宜模組 給了回應,完成傳輸 貪便宜模組 錯在哪裡?原來是石英震盪器不準,標示8M實際7.77Mhz!真的會吐血!便宜沒好貨,買開發工具回來修理我也是醉了。買新的16Mhz震盪器,修好 貪便宜模組 順便提升性能 親身體驗爛東西掛上CANBUS觸發錯誤禎與重傳機制也是種學習: CANBUS上每個人都要監聽封包,是自己的就收下,不然丟掉 貪便宜模組 因為clock錯了,自我感覺不好,送出Error Frame 整個CANBUS喪失40us 如果每次 貪便宜模組

ELM327 OBD-II 心得 (4),中間人攻擊框架

圖片
用樹梅派做一輛車(Pi-CAR) ELM327要和汽車打交道,所以我得先做一輛車,蝦米?做一輛車?! 右上角是樹梅派加讓CANBUS收發器做的車,他收到0902的命令,會回應VIN碼 ELM327 ---- Pi-CAR 左邊是ELM327發出0902,讀到Pi-CAR回報的VIN 中間是CANBUS的線,連上去的是500kbps的CANBUS,沒接的是125kbps 右邊是Pi-CAR收到0902會回應VIN,他說自己是一台XC60 用樹梅派做一條線(Pi-WIRE) 拿出第二片樹莓派,裝上兩個CANBUS收發器,做一條線(Pi-WIRE)。這條線對ELM327和Pi-CAR是隱形的,他們不知道中間過了一手 ELM327 ---- Pi-WIRE ---- Pi-CAR ELM327發出0902,讀到Pi-CAR回報的VIN Pi-WIRE是一條線 來自ELM327,轉發Pi-CAR,順便側錄(我知道ELM327說了什麼) 來自Pi-CAR,轉發ELM327,順便側錄(我知道Pi-CAR說了什麼) Pi-CAR收到0902會回應VIN 下圖上方(ELM327)和下方(Pi-CAR)和前次的結果一樣。中間視窗是Pi-WIRE側錄的結果,他知道ELM327送了些什麼,也知道Pi-CAR送了些什麼 Pi-WIRE用途多多 我打算拿HUD,拿真的車做底下的實驗,看看HUD到底是怎麼讀取速度。可以驗證這些add-on的裝置,究竟對系統做了些什麼事。這題我還沒真的玩,我手邊這堆用杜邦線鬆垮垮的東西,我還沒做好準備壓上車(還得去買個OBD-II母頭) HUD ---- Pi-WIRE---- REAL-CAR HUD 不知道 有沒有發送命令 Pi-WIRE是一條線 來自HUD,轉發REAL-CAR,順便側錄( 我知道HUD說了些什麼 ) 來自REAL-CAR,轉發HUD,順便側錄(我知道REAL-CAR說了些什麼) REAL-CAR收到命令行動 這東西壓上車還真的有點怕怕的 下一篇我會就製作這些開發工具踩到的坑,聊一下汽車加裝OBD-II裝置,或著說修改CANBUS的風險和注意事項

ELM327 OBD-II 心得 (3),試著解析ELM327錄到的CAN封包

圖片
我折騰ELM327是因為VOLVO XC60電動尾門不能遙控關門,必須人到現場按下按鈕才會動。我每次都覺得這個設計很瞎。 我假設這個按鈕連到CANBUS,壓下去會發送某個信號,只要監聽到這個信號,我就能遙控關門 接受挑戰! 拿手邊的 深圳牌藍芽ELM327接上車, 試著讀VIN成功 !試跑ATMA(Monitor All)監看CANBUS,結果…………… 什麼都沒發生!!!!豪小我嗎? 第一篇 文章提問ELM327什麼時候讓人不滿意,現在我可以回答了 AT命令實作不全 深圳牌ELM327成本導向,Torque沒用的命令會拔光光 藍芽連線不穩 我有時候下的命令斷行會出錯,可能藍芽模組不靠譜 就算真的監看CANBUS,資料量也遠超過藍芽能承受的 折騰USB ELM327 頻寬要夠大,所以我改買USB ELM327繼續折騰,繼續踩坑 淘寶買的USB ELM327依舊是深圳版,還是沒有ATMA 我覺得自己是笨蛋…………… 露天找到ELM327 v2.2 可以下ATMA,只是經常會緩衝區爆掉(Buffer Full) 同個賣家,買可以切換高低速CANBUS的版本(一開始就要買這個) VOLVO有兩條CANBUS,電動尾門是低速的 High Speed(pin 6/14),500kbps,還是會BUFFER FULL Low Speed(pin 3/11),125kbps,可以成功監聽,錄下完整命令 試解Low Speed CANBUS信號 我錄了一些Low Speed CANBUS的紀錄,有幾道命令很有趣 2E7 8 80 00 0A 27 0D 0A 02 13  格式是 ?? ?? SS MM HH DD MM YY 解析出來是2019/2/10 13:10:39 0A, second = 10 27, minute = 39 0D, hour = 13 (PM 1:00) 0A, day = 10 02, month = 2 13, year = 19 (2019) 300 8 00 00 00 00 00 00 00 00 301 8 00 00 00 00 00 00 00 00 用途不明,每秒出現一次 31

ELM327 OBD-II 心得 (2),ELM327底層介面

圖片
首先到Google Play搜尋ELM327 Terminal,不用太糾結,隨便一套都可以。如果真的有選擇困難,那就 這套 吧。因為他最近才更新過,而且介面看起來滿漂亮的 想辦法連上車後,輸入0902就可以讀取汽車的 VIN碼 (車子唯一的辨識碼)。這些PID(0902)是 工業規格 ,每家車商都得實作,底下是幾個常見的code。所以抬頭顯示器(HUD)不需要區分廠牌,只要有OBD2接頭都可以用 01 0D 車速 01 0C 引擎轉速 底下是我車子回報的VIN碼,有興趣可以查一下文件,解看看 :-) 7E8 08 01 14 49 02 01 59 56 41 7E8 08 21 44 5A 41 38 42 44 48 7E8 08 22 32 30 37 36 36 38 32 用Torque讀CANBUS的人很多,但是很少人看ELM327究竟做什麼。到 ELM公司官網 下載他們的 AT command列表 ,這就是這顆IC所有的能力了,不同版本支援的能力也不大相同 可能是歷史因素,ELM327 命令 已經變成某種非正式標準,所有想寫手機和汽車打交道的軟體都會支援ELM327 命令 。反過來說,任何一個人想做車用OBD-II的讀取頭,只要照著ELM327 命令 實作,就能和現有的手機軟體互聯(即使他本質不是ELM327) 所以深圳的公司用8051刻了ELM327 1.5(或著就自己亂改),但是人家根本沒出過v1.5;想做手機讀取頭的公司,最好開出的軟體介面和ELM327命令相容,否則客人買回去不能接Torque,產品會賣不掉 手機軟體開發者會盡量少用一些特殊命令,這樣相容性才好。實務上讀引擎轉速,速度,讀錯誤碼,這些操作都不需要特殊命令,所以這類Probe其實接手機大概功能都會動。 如果您問我,哪個版本的ELM327可以買... 說實話我不是很確定,畢竟我手上也沒幾個。但是後面我會分享CANBUS如果有個爛掉的裝置,會對系統造成什麼傷害