?? sample4_readme.txt
字號:
/********************************************************************/
2006.09.11.
R8C/23 CAN/LIN 演示板 樣例程序說明
Sample4:LIN從機
/********************************************************************/
<操作環境>
* MCU : R5F21237JFP ES
* CPU Clock : 20MHz
<實現功能>
接收主機發送的header,依據同步段調整uart通信速率;
對ID分析,接收/發送/忽略數據段。非接收情況下,會根據ID與slot中ID匹配情況判斷是否發送相應ID的數據;
能夠判斷休眠命令,進入休眠狀態;
4s鐘總線無活動,自動進入休眠狀態;
外部事件觸發,發送wakeup命令;
接收wakeup命令;
<說明>
* LIN 波特率:9600bit/s
* LIN從機包括4個狀態
IDLE狀態(初始狀態),準備接收header,并判斷是否該進入SLEEP狀態;
SLEEP狀態,等待接收/發送wakeup;
RUN狀態,LIN主機通信狀態;
ERROR狀態,發生錯誤后進入該狀態,通信停止。(用戶可以根據需要添加錯誤處理函數)
* 通信過程
接收header的break段;。
接收header的同步段,并重新調整波特率;
接收header的ID段,重新計算受保護ID的奇偶校驗位,根據接收到的ID,判斷:
1) 是由主機發送幀的數據段,則接收數據段,檢查校驗和(標準型)。
判斷是否為休眠命令,若是馬上轉入休眠狀態;若不是,則將數據存入對應ID的slot。
2) 不是由主機發送幀的數據段,比較接收到的ID。
如果與信箱中的ID匹配,則將該slot信箱中的數據發送到LIN總線上;若找不到匹配的信箱,則忽略數據幀。
發送/接收/忽略 完數據段后,再次進入接收header的狀態。
若從機在4s之內接收不到header,則自動進入休眠狀態。
從機處在休眠狀態時,可以接收來自LIN總線上的wakeup信號(>=150us的顯性電平)。
接收到wakeup信號后,轉入接收header的狀態。
另外,當從機處于休眠態時,同時檢測是否應用層發生了事件。
若有事件發生,該從機本身可以發出一個wakeup信號,轉入接收header的狀態,
發送完wakeup后的150ms內,若未接收到header的break信號,則該從機將再次發送一次wakeup信號,最多總共可以發送三次。
若三次發送均失敗,再次進入休眠;
注:如果從機是由自身發送wakeup被喚醒,當對應事件的幀傳輸完畢時,應該將事件標志app_event清零。
由于該樣例程序并未詳細定義幀的用途,用戶需要在注解的位置自行添加。
* 錯誤代碼
1) UART傳輸時發生的錯誤:
UART_OVERRUN_ERROR(uart過載錯誤)
UART_PARITY_ERROR(uart奇偶校驗錯誤)
UART_FRAMING_ERROR(uart傳輸錯誤)
2) LIN錯誤
LINRX_CHECKSUM_ERROR(校驗和錯誤)
PID_PARITY_ERROR(PID奇偶校驗錯誤)
SHORT_MESSAGE_ERROR(消息不全錯誤: 在接收數據段時,未接收到數據段或數據段不完整)
SYNCBREAK_ERROR(break錯誤)
* 幀的定義
除去受保護ID的兩個奇偶校驗位,幀ID共6位,后四位為cmd,前兩位為DLC(數據長度碼),參見lin_slave.c中table的注解部分:
幀ID = 0x31,0x3C主機發送,所有從機接收;0x3c為診斷幀,若數據段的第一字節為零,則為休眠指令(協議強制規定);
其余幀ID從機根據需要發送或忽略。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -