說明
- 如果想詳細了解CCP,可以下載
AN-AMC-1-102_Introduction_to_CCP.pdf
或者ccp211.pdf
- 本文不涉及到專業的知識講解,如果想查看更加專業的知識可以選擇看完以上任意一個文檔。這里旨在用通俗易懂的文字描述。
CCP簡介
CCP(CAN Calibration Protocol),中文:CAN標定協議
,顧名思義就是基於CAN總線的一種應用層協議。
- 以下是網絡的標准版解釋:
CCP是一種基於CAN總線的ECU標定協議,已經在許多歐美汽車廠商得到應用,采用CCP協議可以快速有效地實現對汽車電控單元的標定。 - 以下是我的理解:CCP協議就是一種基於CAN通信的協議,類似於UDS協議,均是基於CAN報文來傳輸數據,不能脫離CAN報文的限制。
CCP can do this...
- Read
- RAM
- PORTS
- ROM
- FLASH
- Write
- RAM
- PORTS
- FLASH
CCP 通信
基於CCP協議的ECU標定,是采用主-從通信方式。大體的可以簡化為如下的幾步:
- 選擇哪一個
從機
進行連接 - 選擇控制方式
- 接收數據
- 斷開連接
CCP 報文
CCP有如下兩種報文
CRO
: Command Receive Object , 即命令接收對象DTO
: Data Transmission Object,數據傳輸對象。
聯想到是主-從通信模式
,所以很好的CRO就是命令,DTO就是報告的消息了。詳情可參考圖片:
CCP 工作模式
CCP有兩種工作模式:
- Polling(查詢模式):你一問,我一答。
- DAQ(Data Acquisition)模式:可以理解為托管,即主機設定好相關的傳輸規則(后續會說),從機根據該規則進行自動的發送消息。
- 詳細可參考該圖:
CCP 報文幀格式
由於是基於CAN總線協議的,所以逃不開這些東西,所以,CAN ID是必須要的。那么對於CCP本身,有用的部分就是數據場,即一個8個Byte的數組。鑒於UDS也是基於CAN的應用程序協議,並且其有多幀傳輸的功能,着重說明,CCP是一幀一幀發送的。不存在拼接兩個幀數據的情況。
對於CCP報文格式,分兩部分進行說明。
CRO
Command + CTR + Data
- Command: 就是一些列的
命令
標號了,這個是人為規定的,就是協議定為多少就是多少。 - CTR:Counter就是一個計數用的。
- 所以,一個有效的命令參數位為6位,那么6位能夠表示什么?后面就會知道了。
DTO
其格式為:
上面說了,ECU回復的消息有兩種,這里添加一種錯誤處理。即可以回復信息的種類為3種:
- CRM : Command Return Message
- 對命令的直接回答
- Event Message
- 檢測到自身錯誤的一種事件型消息
- Data Acquisition Message
- 從設備自動上傳的一種消息
既然DTO自由一個ID,那么如何區分是是屬於那種信息?當然不同的協議有不同的判斷標准。CCP是利用第一個數據即一個Byte來判斷的。
- 0xFF:CRM
- Event:0xFE
- 其他的就是DAQ的。后面會談這個是如何實現的。
DAQ List
什么是DAQ List?就是從設備支持的DAQ的上傳表,至於上傳表里面有哪些元素?元素的屬性是什么?這個就需要慢慢了解了。
DAQ屬性
為什么需要划分DAQ?在ECU中對CAN信號有一個周期處理的概念,這里就是通過對標定數據的采樣和上傳周期來區分是那個DAQ的,可以理解為:同一個DAQ,采樣和上傳的周期是一樣的。
周期又是如何確定的?
這就涉及到兩個名詞:Event Channel
事件通道和prescaler
預分頻值。
事件通道可以理解為:每多少ms,ECU打通一次該通道,或者說觸發一次。如果是10ms,表明ECU每10ms觸發一次該事件。
預分頻值可以理解為:我們以事件通道的時間為基准進行分頻,這樣就可以復用事件通道了。即如果20ms的周期進行上傳,預分頻值設定為2.如果是50ms的周期進行上傳,預分頻值設置為5就可以了。
DAQ包含元素
通過了解,CCP只能通過單幀進行數據/命令傳輸,所以,對消息的組織有一定的要求,拋開一些附帶的解析符和驗證符以外,能夠表示信息實在有限。故,一條報文就簡單的表示一個信息。在一個DAQ中,包含有多個ODT,我們可以稱其為ODT列表。那么這個ODT列表是做什么的?
ODT列表
每一個DAQ是通過ODT來組成的。那么ODT又是什么?就是傳輸數據的基本信息框架。
我們知道,一個DAQ-DTO傳輸的數據是7Byte,那么這7個數據記錄在哪里?主機如何知道當前pid所帶的信息對應到的是哪一個數據?那么,這里就需要借助ODT了。
- 元素
- 地址
- 數據長度
那么,一個ODT里面最多有7個元素,一個ODT中所有元素的數據長度最多為7Byte。因為再多的話,一個PID就封裝不進去了。(如果有壓縮算法的話)
以上關於DAQ list相關的說明,可以參考下面的圖來進行理解:
這里為什么每個PID里面有7個元素,因為很多情況下,限定了每個元素的數據長度為1,所以一個ODT正好可以放入7個數據元素。
ODT個數
通過PID知道,ECU支持的最大的ODT列表的個數是有限制的。0x00-0xFD,當然,如果想支持多一點也是沒有問題的。那就只能修改協議了。比如,當pid為0x00的時候,需要根據第二位來判斷上傳的是什么數據,即pid[2]!
MTA
英文全稱 :Memory Transfer Address
其中存在兩個,即MTA0,MTA1.
- MTA0:可以理解為,主地址,即CCP主要通過該地址來查詢/操作數據。
- MTA1:可以理解為輔助地址,即只有在特定的情況下,用來臨時代替/輔助MTA0進行數據捕獲/操作的。
值得注意的是,MTA0一般都會隨着命令的執行而自動定位在執行以后的地方,除非特殊情況。詳細的請參考具體的Command.
錯誤處理
在錯誤代碼上有幾個等級。
- C0:警告
- C1:偽錯誤
- C2:可修復錯誤
- C3:不可修復
在CCP里面具體定義了幾種等級的所屬范圍。我覺得有點像學校的校規:記小過,記大過,警告,通報批評,開除等等。
ASAP
ASAP有3種,名字起的也是夠隨意,直接用1,2,3來標定。
- ASAP1
- MCD-ECU之間的接口規范
- ASAP2
- ASAP描述文件,是電子控制單元內部數據的描述文件。簡單一點就是,這個變量在ECU里面的地址是多少,單位是多少,怎么換算得來的等等。不然,只有一堆的數字而沒有解析數據的規則是沒有一點意義的。
- ASAP3
- 自動測試系統-MCD之間的接口規范
命令
這里不主要說命令,但會說一些。
- 解鎖
- 很多功能都需要解鎖才能使用。不然,對於ECU來說,這就是控制成本和控制銷售價格的好方法。當然,這里主要是做保護,總不能讓你什么都可以更改吧。
- 數據1-5傳輸和固定6傳輸
- 對於傳送數據在1-5之間的話,需要有個變量來表明當前一幀報文到底傳送了多少個數據。
- 對於固定傳輸6個數據的話,很顯然是沒有必要有上面的變量的。
- 協議
- 設置DAQ列表
- 涉及到設置DAQ指針。
- ODT信息配置等,后續程序里面會涉及的多一些。