資料介紹
隨著汽車電子技術的高速發展和廣泛應用,實現智能化和網絡化是汽車發展的必然趨勢。為簡化日益增加的汽車電控設備的線路連接,提升系統的可靠性和故障診斷水平,實現各電控設備之間的數據資源共享,并建成開發的標準化、模塊化結構,汽車網絡總線技術得到了很大發展。目前,已經開發出多種總線,如控制器局域網總線CAN、車內網絡總線LIN、高速容錯網絡總線FlexRay、面向媒體的系統傳輸總線MOST、更高帶寬和傳輸速率的車載以太網Ethernet等,這里給大家介紹在MM32F013x上實現LIN通信的功能應用。
Part.1 什么是LIN
LIN 是 Local Interconnect Network 的縮寫,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter /Serial Communication Interface,通用異步收發器/串行通信接口)的低成本串行通信協議,可用于汽車、家電、辦公設備等多種領域。本文主要針對在MM32F013x上實現LIN在分布式的汽車電子網絡系統中的應用。
LIN總線特點
- 極少的信號線即可實現國際標準ISO9141 規定
- 傳輸速率最高可達20Kbit/s
- 單主控器/多從設備模式無需仲裁機制
- 從節點不需晶振或陶瓷震蕩器就能實現自同步,節省了從設備的硬件成本
- 保證信號傳輸的延遲時間
- 不需要改變LIN 從節點的硬件和軟件就可以在網絡上增加節點
- 通常一個LIN 網絡上節點數目小于12 個共有64 個標志符
Part.2 LIN總線 幀結構
幀(Frame)包含幀頭(Header)和應答(Response)兩部分。
幀頭包括同步間隔段、同步段以及PID(Protected Identifier,受保護ID)段,應答包括數據段和校驗和段。
如圖所示,其中值“0”為顯性電平(Dominant),值“1”為隱性電平(Recessive),總線上實行“線-與”:當總線上有大于等于一個節點發送顯性電平時,總線呈顯性電平;所有的節點都發送隱性電平或不發送信息(不發送任何信息時總線默認呈隱性電平)時,總線才呈現隱性電平,即顯性電平起主導作用。
Part.3 程序配置
01、初始化MM32F013x UART1串口
從官網下載MM32F013x例程,參考MM32F0133C7P的UART例程的初始化以及中斷服務函數,這里不在贅述。
02、LIN的發送
2.1 同步間隔段的發送
UART內部有Break信號的發送,通過使能LIN,即可實現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 數據的發送
數據的發送沿用原有的UART接口數據發送即可:
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 數據包的發送
有了上面2個基礎函數進行發送,現在來看下數據包的具體發送,從下圖中可以看出數據包是根據保護段的定義來進行區分是發送信號幀還是診斷幀。
信號幀的數據就可以做成以下的方式:
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中斷函數里收到從機返回的數據。
2.4 從機的接受與發送
從機收數據與正常的串口一樣,只需要做BRK信號的處理即可,從機收到數據以后按正常的返回數據,返回數據就不需要發送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通信功能演示
通過邏輯分析儀可以看到信號幀的數據:
而診斷幀數據就有從機回應的數據:
有這個演示作為基礎就可以開發LIN的通訊產品了。
- MM32F013x——ADC任意通道工作模式
- MM32F013x——RTC鬧鐘定時喚醒
- MM32F013x——移植EasyLogger組件
- MM32F013x——LIN 通信
- MM32F013x——UART 多處理器通信
- MM32F013x——UART 極性取反通信
- MM32F013x——UART 單線半雙工通信
- MM32F013x——ADC任意通道工作模式
- MM32F013x——萬年歷
- MM32F013x——移植EasyFlash組件
- MM32F013x——移植EasyLogger組件
- MM32F013x——Event Recorder使用方法
- 基于ARM Cortex M0的微控制器MM32F013x 22次下載
- MM32F013x——UART 單線半雙工通信
- MM32F013x——UART 極性取反通信
- LIN數據總線ESD保護方案 465次閱讀
- 什么是LIN收發器?它有哪些特性? 2092次閱讀
- TSMaster 自定義 LIN 調度表編程指導 388次閱讀
- MM32F0140 DMA學習筆記 588次閱讀
- LIN總線系統的解析和應用 1955次閱讀
- MM32L013x——LPTIM的應用介紹 1521次閱讀
- 基于MM32F5270控制器的I2S音頻播放 2028次閱讀
- 汽車智能電池傳感器MM912J637的主要特性及應用電路 3340次閱讀
- 雙芯片解決方案MM912F634的主要特性及應用分析 3047次閱讀
- LIN總線通信技術在汽車通信控制網絡中的應用 6655次閱讀
- 什么是LIN總線? CAN和LIN的區別 11.9w次閱讀
- 基于LIN總線控制系統實現LIN開發平臺的搭建 6323次閱讀
- LIN總線技術的特點及實現從節點的應用設計 1.1w次閱讀
- 如何實現LIN自動尋址來解決這些問題呢? 1.9w次閱讀
- 汽車網絡LIN總線協議解析 1.7w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多