?? sample3_readme.txt
字號:
/********************************************************************/
2006.09.11.
R8C/23 CAN/LIN 演示板 樣例程序說明
Sample3:LIN主機
/********************************************************************/
<操作環境>
* MCU : R5F21237JFP ES
* CPU Clock : 20MHz
<實現功能>
進度表調度;
外界事件觸發喚醒;
接收其余節點的喚醒;
基本的LIN通信,數據的收發;
發送休眠命令,進入休眠狀態;
4s總線無活動,自動進入休眠狀態;
錯誤類型界定;
<說明>
* LIN 波特率:9600bit/s
* LIN主機包括5個狀態
SLEEP狀態(初始狀態),等待接收/發送wakeup;
RESET狀態,初始化進度表;
RUN狀態,LIN主機通信狀態;
IDLE狀態,檢測總線活動,準備進入睡眠;
ERROR狀態,發生錯誤后進入該狀態,通信停止。(用戶可以根據需要添加錯誤處理函數)
* 通信過程
啟動LIN主機前,可以在SCHEDULE_TABLE處修改進度表。
進度表修改后,需再schedule_include_frm_num將相應進度表所含的幀數同時修正。
目前樣例程序支持最多4個進度表,每個進度表最多包含4個幀。
用戶可根據需要進行擴展,將lin_frm,lin_sch中關于進度表和幀的總屬性值相應標志位增加位數或變為多個字節。
主機啟動后,處入休眠狀態時,將檢測:
1)主機應用層是否有事件發生,若發生事件,則發送wakeup信號(250us的顯性電平);
2)總線上是否有wakeup信號(>=150us的顯性電平);
若有則等待100ms后啟動進度表,從機對此等待時間的判斷閾值為150ms。
發送header的break段; 發送header的同步段;發送header的ID段,并根據ID,判斷
1) 是由主機發送幀的數據段,則發送數據段,判斷是否為休眠命令,若是馬上轉入休眠狀態。
2) 不是由主機發送幀的數據段,分析ID,選擇是否接收數據段,檢查校驗和(標準型)。
發送/接收/忽略 完數據段后,再次進入發送header的狀態。直到進度表完成。
進度表完成后,4s后自動進入休眠狀態。
* 錯誤代碼
1) UART傳輸時發生的錯誤:
UART_OVERRUN_ERROR(uart過載錯誤)
UART_PARITY_ERROR(uart奇偶校驗錯誤)
UART_FRAMING_ERROR(uart傳輸錯誤)
2) LIN錯誤
LINRX_CHECKSUM_ERROR(校驗和錯誤)
SHORT_MESSAGE_ERROR(消息不全錯誤: 在接收數據段時,未接收到數據段或數據段不完整)
* 幀的定義
除去受保護ID的兩個奇偶校驗位,幀ID共6位,后四位為cmd,前兩位為DLC(數據長度碼),參見lin_master.c中table的注解部分:
幀ID = 0x31,0x3C主機發送,所有從機接收;0x3c為診斷幀,若數據段的第一字節為零,則為休眠指令(協議強制規定);
其余幀ID主機根據需要接收或忽略。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -