從事汽車MCU開發(fā)的小伙伴,對CAN/CAN FD、Ethernet、Lin這幾種總線,應該比較熟悉,即使沒具體開發(fā)過,也應該聽過。如果想更深刻的理解這些總線,實踐是最行之有效的方法。在之前的文章中,已經分享了《基于Tricore的CANFD入門工程》、《基于Tricore的UDP/TCP入門工程》、《基于Aurix的以太網實踐:TCP Client實現(xiàn)坑點》,本文基于TC397_5V_TFT開發(fā)板+Tasking編譯器,對英飛凌官網的Master Lin進行了二次開發(fā),助力需要的學習Lin總線的小伙伴,文末有工程源碼鏈接。
1、Lin收發(fā)器原理圖
TC397_5V_TFT開發(fā)板的原理圖,可以在英飛凌官網下載,具體下載地址如下:
https://www.infineon.com/dgdl/Infineon-ApplicationKitManual_TC3X7-UM-v02_00-EN.pdf?fileId=5546d462696dbf120169b454383c483d
這里,我們關注Lin收發(fā)器(TLE7259-3GE)需要配置的端口,如下圖:
上圖中,RxD需要使用P10.6,TxD需要使用P10.5,這兩個Pin對應ASCLIN2模塊。
對于外接的Lin Connector,GND可以接跳線2或者跳線5,LIN BUS對應跳線4,如下所示:
2、Lin Code
本文Lin通信采用了中斷收/發(fā)處理模式,且開發(fā)板采用Master模式。Master負責發(fā)送Header,ID=0x26(主響應)/ID=0x33(從響應),通信速率為19200bps。
/* 主函數(shù)調用 */
void ASCLIN_LIN_Master_Send_Message(void)
{
uint8 id = MASTER_ID_0x26;
HandleID = MASTER_ID_0x26;
/* Send LIN header */
IfxAsclin_Lin_sendHeader(&g_linMaster, &id);
}
/* 接收中斷例程 */
IFX_INTERRUPT(ISR_ASCLIN_Rx, 0, ASCLIN_MASTER_RX)
{
/* check Rx response end acknowledgement*/
if (IfxAsclin_getRxResponseEndFlagStatus(g_linMaster.asclin))
{
uint8 id = MASTER_ID_0x26;
IfxAsclin_Lin_clearFlagsStatus(g_linMaster.asclin);
HandleID = MASTER_ID_0x26;
IfxAsclin_Lin_sendHeader(&g_linMaster, &id);
}
}
/* 發(fā)送中斷例程 */
IFX_INTERRUPT(ISR_ASCLIN_Tx, 0, ASCLIN_MASTER_TX)
{
/* check Tx header end acknowledgement */
if (IfxAsclin_getTxHeaderEndFlagStatus(g_linMaster.asclin)) /* THE flag*/
{
if (HandleID == MASTER_ID_0x26)
{
IfxAsclin_Lin_sendResponse(&g_linMaster, Tx_data, 8);
}
else if(HandleID == SLAVE_ID_0x33)
{
IfxAsclin_Lin_receiveResponse(&g_linMaster, Rx_data, 8);
/* Receive interrupt occurred */
if (IfxAsclin_getRxFifoFillLevelFlagStatus(g_linMaster.asclin))
{
uint8 id = MASTER_ID_0x26;
HandleID = MASTER_ID_0x26;
IfxAsclin_Lin_sendHeader(&g_linMaster, &id);
}
}
IfxAsclin_Lin_clearFlagsStatus(g_linMaster.asclin);
}
/* check Tx completed */
if (IfxAsclin_getTransmissionCompletedFlagStatus(g_linMaster.asclin))
{
uint8 id = SLAVE_ID_0x33;
IfxAsclin_Lin_clearFlagsStatus(g_linMaster.asclin);
HandleID = SLAVE_ID_0x33;
IfxAsclin_Lin_sendHeader(&g_linMaster, &id);
}
}
3、通信上位機配置
Lin上位機界面如下(淘寶采購),設置上位機為"從機",通信速率"19200bps",如下所示:
在“從機寫配置”界面配置一個響應ID = 0x33以及對應的數(shù)據(jù),采用增強校驗,如下所示:
啟動程序,Lin數(shù)據(jù)流如下所示:
(一)Lin報文波形
17987-3規(guī)范約束,一幀Lin報文構成如下:
關于Lin幀結構,更多信息可以參考前文《Lin基礎:從Lin Frame開始》。本文使用示波器抓取Lin波形如下所示:
如上圖,測量的Lin總線電壓約等于電源電壓(12V),略小于12V的原因:串聯(lián)防反二極管(diodes)造成的部分壓降。通信速率19200bps(1bit Time = 1/19200≈ 52.083us ),傳輸8byte字節(jié),一幀Lin報文用時6~7ms。
波形的局部放大如下所示:
波形的進一步放大如下所示:
如上圖,幀間隔段(Break Field)長度13 Bit顯性位(0)+ 1bit隱性位(1),之后是Sync Byte Field(0x55)+ 字節(jié)空間 + PID(0x73)。關于Lin幀結構,更多信息可以參考前文《Lin基礎:從Lin Frame開始》。
(二)Master/Slave對應的Transceiver電阻不同
前文《Lin總線基礎:為什么Master節(jié)點需要外接上拉電阻》討論過,Master節(jié)點外接1kΩ原因,這里再次提醒,Master節(jié)點需要通過并聯(lián)一個阻值更小的電阻,增大Lin Bus的驅動能力,進而提高Lin報文的質量。17987-4中,對應Master/Slave與Transceiver形成的供電回路如下所示:
-
原理圖
+關注
關注
1298文章
6344瀏覽量
234178 -
mcu
+關注
關注
146文章
17162瀏覽量
351348 -
收發(fā)器
+關注
關注
10文章
3429瀏覽量
106022 -
LIN總線
+關注
關注
19文章
109瀏覽量
27488
發(fā)布評論請先 登錄
相關推薦
評論