隨著汽車電子技術的高速發(fā)展和廣泛應用,實現(xiàn)智能化和網(wǎng)絡化是汽車發(fā)展的必然趨勢。為簡化日益增加的汽車電控設備的線路連接,提升系統(tǒng)的可靠性和故障診斷水平,實現(xiàn)各電控設備之間的數(shù)據(jù)資源共享,并建成開發(fā)的標準化、模塊化結構,汽車網(wǎng)絡總線技術得到了很大發(fā)展。目前,已經(jīng)開發(fā)出多種總線,如控制器局域網(wǎng)總線CAN、車內(nèi)網(wǎng)絡總線LIN、高速容錯網(wǎng)絡總線FlexRay、面向媒體的系統(tǒng)傳輸總線MOST、更高帶寬和傳輸速率的車載以太網(wǎng)Ethernet等,這里給大家介紹在MM32F013x上實現(xiàn)LIN通信的功能應用。
Part.1 什么是LIN
LIN 是 Local Interconnect Network 的縮寫,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter /Serial Communication Interface,通用異步收發(fā)器/串行通信接口)的低成本串行通信協(xié)議,可用于汽車、家電、辦公設備等多種領域。本文主要針對在MM32F013x上實現(xiàn)LIN在分布式的汽車電子網(wǎng)絡系統(tǒng)中的應用。
LIN總線特點
低成本:幾乎車規(guī)級微控制器都具備LIN 通信必需的硬件
極少的信號線即可實現(xiàn)國際標準ISO9141 規(guī)定
傳輸速率最高可達20Kbit/s
單主控器/多從設備模式無需仲裁機制
從節(jié)點不需晶振或陶瓷震蕩器就能實現(xiàn)自同步,節(jié)省了從設備的硬件成本
保證信號傳輸?shù)难舆t時間
不需要改變LIN 從節(jié)點的硬件和軟件就可以在網(wǎng)絡上增加節(jié)點
通常一個LIN 網(wǎng)絡上節(jié)點數(shù)目小于12 個共有64 個標志符

Part.2 LIN總線 幀結構
幀(Frame)包含幀頭(Header)和應答(Response)兩部分。
幀頭包括同步間隔段、同步段以及PID(Protected Identifier,受保護ID)段,應答包括數(shù)據(jù)段和校驗和段。
如圖所示,其中值“0”為顯性電平(Dominant),值“1”為隱性電平(Recessive),總線上實行“線-與”:當總線上有大于等于一個節(jié)點發(fā)送顯性電平時,總線呈顯性電平;所有的節(jié)點都發(fā)送隱性電平或不發(fā)送信息(不發(fā)送任何信息時總線默認呈隱性電平)時,總線才呈現(xiàn)隱性電平,即顯性電平起主導作用。

Part.3 程序配置
01、初始化MM32F013x UART1串口
從官網(wǎng)下載MM32F013x例程,參考MM32F0133C7P的UART例程的初始化以及中斷服務函數(shù),這里不在贅述。
02、LIN的發(fā)送
2.1 同步間隔段的發(fā)送
UART內(nèi)部有Break信號的發(fā)送,通過使能LIN,即可實現(xiàn)LIN的間隔段,代碼如下:
bool LINSendbreak(void)
{
uint16_t Tempcnt = 0;
UART2->CCR |= UART_CCR_LIN; //LIN Enable
UART2->CCR |= UART_CCR_BRK; //Send Break
while ((UART2->ISR & 0x00000080) == 0) //TXBRK_INTF
{
Tempcnt++;
if (Tempcnt > 5000)
return (false);
}
return (true);
}
2.2 數(shù)據(jù)的發(fā)送
數(shù)據(jù)的發(fā)送沿用原有的UART接口數(shù)據(jù)發(fā)送即可:
bool LINSendChar(uint8_t ch)
{
uint16_t Tempcnt = 0;
while ((UART2->CSR & UART_IT_TXIEN) == 0)//The loop is sent until it is finished
{
Tempcnt++;
if (Tempcnt > 5000)
return (false);
}
UART2->TDR = (ch & (uint16_t)0x00FF);
return (true);
}
2.3 數(shù)據(jù)包的發(fā)送
有了上面2個基礎函數(shù)進行發(fā)送,現(xiàn)在來看下數(shù)據(jù)包的具體發(fā)送,從下圖中可以看出數(shù)據(jù)包是根據(jù)保護段的定義來進行區(qū)分是發(fā)送信號幀還是診斷幀。

信號幀的數(shù)據(jù)就可以做成以下的方式:
bool LINSendMsg(void)
{
uint8_t check_sum, i;
frame_send.error = 0;
if (!LINSendbreak()) //Send Break
return (false);
if (!LINSendChar(0x55)) //Send Sync Byte
return (false);
msg_send.Data[0] = LINCalcParity(msg_send.Data[0]);
for (i = 0; i < 9; i++)
{
if (!LINSendChar(msg_send.Data[i])) //Send Data
return (false);
}
check_sum = LINCalcChecksum(msg_send.Data, 1);
if (!LINSendChar(check_sum)) //Send Checksum
return (false);
frame_send.state = IDLE;
return (true);
}
而診斷幀的就是:
bool LINSendID(void)
{
if (!LINSendbreak())
return (false);
if (!LINSendChar(0x55))
return (false);
msg_send.Data[0] = LINCalcParity(msg_send.Data[0]);
if (!LINSendChar(msg_send.Data[i]))
return (false);
return (true);
}
這樣就可以在等待UART中斷函數(shù)里收到從機返回的數(shù)據(jù)。
2.4 從機的接受與發(fā)送
從機收數(shù)據(jù)與正常的串口一樣,只需要做BRK信號的處理即可,從機收到數(shù)據(jù)以后按正常的返回數(shù)據(jù),返回數(shù)據(jù)就不需要發(fā)送BRK信號。
if (LIN_RxBuff[1] == LIN_PID_60_0x3C)
{
msg_send1.Data[0] = 0x3C;
msg_send1.Data[0] = LINCalcParity(msg_send1.Data[0]);
UART2->ICR |= UART_ICR_RXIDLE; //clear idle int bit
UART2->IER |= UART_IER_RXIDLE; //enable uart rx idle int
for (i = 1; i < 9; i++)
{
if (!LINSendChar(msg_send1.Data[i]))
return (false);
}
check_sum = LINCalcChecksum(msg_send1.Data, 1);
if (!LINSendChar(check_sum))
return (false);
}
Part.4 MM32F013x LIN通信功能演示
通過邏輯分析儀可以看到信號幀的數(shù)據(jù):
而診斷幀數(shù)據(jù)就有從機回應的數(shù)據(jù):
有這個演示作為基礎就可以開發(fā)LIN的通訊產(chǎn)品了。
轉(zhuǎn)自:靈動MM32MCU
審核編輯:何安
-
靈動微電子
+關注
關注
7文章
135瀏覽量
20403 -
LIN通信
+關注
關注
2文章
8瀏覽量
4067
發(fā)布評論請先 登錄
STEVAL-LLL013V1 LED矩陣面板技術解析與應用指南
求助,關于使用 TC39x Aurix 微控制器上的 SCR 檢測 LIN 喚醒脈沖疑問求解
廣州唯創(chuàng)電子WT588F(C013)語音芯片:賦能智能玩具的“聲”動未來
虹科技術分享 | LIN總線譯碼功能與LIN控制交流發(fā)電機(二)
LIN協(xié)議:汽車電子中的隱形功臣
如何使用IFX ePower BootStrapLoader工具通過lin通信升級固件?
S32K3X4EVB-T172 LIN接收幀丟失的原因?
使用stm32F103的USART的lin通訊模式,TX,RX,GND,三根線怎么和lin總線連接?
AN030 GD32F47x&F42x與GD32F45x&F40x系列間的差異
EE-188:使用C語言在ADSP-219x DSP上實現(xiàn)中斷驅(qū)動系統(tǒng)
AN-644:在微型轉(zhuǎn)換器上使用定時器2進行頻率測量(uC013)
EE-249:使用VisualDSP在ADSP-218x DSP上實現(xiàn)軟件疊加

在MM32F013x上實現(xiàn)LIN通信的功能應用
評論