TC397 LIN Master 用例
文章目錄
- LIN簡介
- 單片機與LIN
- TC397 LIN
- USB-LIN分析儀
- TC397 KIT LIN
- 工程示例
- 參考
LIN簡介
LIN (Local Interconnect Network), 一種廣播串行網(wǎng)絡(luò),最多包括 16 個節(jié)點(一個主節(jié)點,通常最多 15 個從節(jié)點)。所有消息都由主站發(fā)起,最多有一個從站回復(fù)給定的消息標(biāo)識符。主節(jié)點也可以通過回復(fù)自己的消息來充當(dāng)從節(jié)點。因為所有的通信都是由主機發(fā)起的,所以沒有必要進(jìn)行碰撞檢測。
除了供電的兩根電源線, LIN傳輸數(shù)據(jù)是單線, 主節(jié)點內(nèi)配置 1kΩ電阻端接 12V ,從節(jié)點內(nèi)配置 30kΩ電阻端接 12V 。
協(xié)議的主要特性如下:
- 單主機,最多 16 個從機(即無總線仲裁)。這是 LIN 聯(lián)盟為實現(xiàn)確定性時間響應(yīng)而推薦的值。 從節(jié)點位置檢測 (SNPD) 允許在上電后分配節(jié)點地址
- 單線通信高達(dá) 19.2 kbit/s @ 40 米總線長度。在LIN規(guī)范2.2中, 速度高達(dá)20 kbit/s。
- 保證延遲時間。
- 可變長度的數(shù)據(jù)幀(2、4 和 8 字節(jié))。
- 配置靈活性。 帶時間同步的多播接收,無需晶體或陶瓷諧振器。
- 數(shù)據(jù)校驗和錯誤檢測。
- 檢測缺陷節(jié)點。
- 基于標(biāo)準(zhǔn) UART/SCI 硬件的低成本實現(xiàn)。 分層網(wǎng)絡(luò)推動者。
- 工作電壓為 12 V
- 主任務(wù)傳輸由中斷信號后跟同步和標(biāo)識符字段組成的報頭。從設(shè)備以一個數(shù)據(jù)幀進(jìn)行響應(yīng),該數(shù)據(jù)幀由 2、4 和 8 個數(shù)據(jù)字節(jié)加上 3 個控制信息字節(jié)組成。
消息(Message)包含以下字段:
- 同步中斷, 13bit
- 同步字節(jié), 0x55
- 標(biāo)識符字節(jié), id, identifier
- 數(shù)據(jù)字節(jié), 0~8 Bytes
- 校驗和字節(jié), V1.3(Classic, 標(biāo)準(zhǔn)校驗, 僅校驗數(shù)據(jù)字節(jié)), V2.0+(Enhanced, 增強校驗, id+data)
六種幀類型(Frame Type):
- Unconditional frame, 無條件幀(普通幀), 標(biāo)識符在 0 到 59(0x00 到 0x3b)的范圍內(nèi). 所有訂閱者都應(yīng)接收該幀并將其提供給應(yīng)用程序(假設(shè)未檢測到錯誤)
- Event-triggered frame, 事件觸發(fā)幀, 攜帶的普通幀的第一個數(shù)據(jù)字節(jié)應(yīng)等于分配給事件觸發(fā)幀的受保護(hù)標(biāo)識符, 僅當(dāng)其數(shù)據(jù)值發(fā)生變化時,從設(shè)備以相關(guān)聯(lián)的普通幀進(jìn)行回復(fù)。這樣的目的是提高 LIN 集群的響應(yīng)能力,無需為很少發(fā)生事件的多個從節(jié)點的輪詢分配過多的總線帶寬。
- Sporadic frame, 零星幀, 當(dāng)主任務(wù)知道幀中攜帶的信號已被更新時,零星幀的頭應(yīng)僅在其相關(guān)的幀時隙中發(fā)送
- Diagnostic frame, 診斷幀, 始終包含八個數(shù)據(jù)字節(jié)。標(biāo)識符是 60 (0x3C),稱為主請求幀,或 61(0x3D),稱為從響應(yīng)幀。在生成診斷幀的頭之前,主任務(wù)詢問其診斷模塊是否應(yīng)發(fā)送或總線是否應(yīng)靜默。從屬任務(wù)根據(jù)其診斷模塊發(fā)布和訂閱響應(yīng)。
- User-defined frame, 用戶自定義幀, 可攜帶任何信息, 標(biāo)識符是 62 (0x3E)。處理分配給該幀的幀時隙時,始終傳輸用戶定義幀的標(biāo)頭
- Reserved frame, 保留幀, 標(biāo)識符63 (0x3F), LIN 2.0不用
LIN通常用于對車輛性能或安全不關(guān)鍵的子系統(tǒng)中,下面給出了一些示例
通常CAN在DB9中為7H / 2L, LIN在DB9中常見為3GND / 7LIN / 9VBAT(不排除其它接法)
單片機與LIN
如下:
-
STM32的USART支持LIN, 代碼可以參考軟硬件開源的 uCAN-LIN/LinUSBConverter: LIN(Local interconnect network) to USB converter with LIN master support compatible with SLCAN. (github.com)
-
MPC5748G有18路可以當(dāng)作UART或者LIN的LINFlexD, 示例工程直接擼的寄存器, 可以和庫工程摻著用
-
S32K148的LPUART, FlexIO支持LIN
-
甚至可以用51或者Arduino模擬IO來收發(fā)LIN, 如 zapta/linbus: An Arduino based LINBUS stack and signal interceptor/injector. (github.com)
-
外部的收發(fā)器兼容LIN2.x, IO能3.3V就問題不大
-
下面來看TC397的
TC397 LIN
參考:
- AURIX Training Asynchronous Synchronous Interface (infineon.com)
- LIN master communication via ASCLIN module (infineon.com)
TC397有12路 ASCLIN (Asynchronous Synchronous Interface), 這是個3合1的模塊: ASC(UART), LIN, SPI.
作為LIN使用時:
-
支持所有四個基本的LIN事務(wù),包括標(biāo)題/響應(yīng)傳輸和接收,作為主設(shè)備或從設(shè)備
-
支持標(biāo)準(zhǔn)Lin V1.3 / 2.0 / 2.1 / 2.2和碰撞檢測的J2602
-
自動波特率檢測, 可選的碰撞檢測, 總線空閑檢測, wake-up能力, Stuck at zero/one monitoring for safety
USB-LIN分析儀
直接某寶隨便買了個一百塊左右的USB-LIN調(diào)試器, 上位機做的很人性化, 除了時間戳可能不是太準(zhǔn), 沒太大毛病, 收發(fā)自如, 用著較爽
USB轉(zhuǎn)LIN調(diào)試器 LIN總線 轉(zhuǎn)換器 STM32-淘寶網(wǎng) (taobao.com)
TC397 KIT LIN
KIT_A2G_TC397_3V3_TFT - Infineon Technologies 如圖
原理圖上是
TLE7259-3_DS_rev10 (infineon.com) 的框圖
BUS引腳外掛了1K上拉電阻, 默認(rèn)是Lin Master, 不掛的話是Slave.
板子要供12V電源, 和USB-LIN分析儀的連接僅需LIN, GND兩根線
下面的示例也只演示TC397 ASCLIN2作為Master時的情形, USB-LIN分析儀作為Slave.
工程示例
對于TC397官方 AURIX? Expert Training - Infineon Technologies 開放了一個 LIN master communication via ASCLIN module (infineon.com) 的示例工程, 里面用了一個IO加示波器來測的, 并沒用上面原理圖對應(yīng)的IO和LIN收發(fā)器, 我們稍微改一下, 暫且都放在main.c里面
#include "Ifx_Types.h" #include "IfxCpu.h" #include "IfxScuWdt.h"IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;#include "IfxAsclin.h" #include "IfxAsclin_Lin.h"IfxAsclin_Lin g_lin_master_2;const IfxAsclin_Lin_Pins asclin2_pins = {&IfxAsclin2_RXD_P10_6_IN, IfxPort_InputMode_pullUp, /* RX port pin */&IfxAsclin2_TX_P10_5_OUT, IfxPort_OutputMode_pushPull, /* TX port pin */IfxPort_PadDriver_cmosAutomotiveSpeed4 };void asclin_lin_master_init(IfxAsclin_Lin *g_lin, Ifx_ASCLIN *asclin,const IfxAsclin_Lin_Pins *pins, float32 baud) {/* Initialize one instance of IfxAsclin_Lin_Config with default values */IfxAsclin_Lin_Config linMasterConfig;IfxAsclin_Lin_initModuleConfig(&linMasterConfig, asclin);linMasterConfig.linMode = IfxAsclin_LinMode_master; /* Set the LIN mode of operation */linMasterConfig.brg.baudrate = baud; /* Set the desired baud rate */linMasterConfig.pins = pins; /* Port pins configuration *//* Initialize module */IfxAsclin_Lin_initModule(g_lin, &linMasterConfig); }void asclin_lin_master_send_message(IfxAsclin_Lin *g_lin, uint8 id, uint8 *data, uint8 len) {/* After the transmission of the LIN header by the master, the master itself starts the transmission* of the message.*/IfxAsclin_Lin_sendHeader(g_lin, &id); /* Send LIN header */if(g_lin->acknowledgmentFlags.txHeaderEnd == 1) /* If the LIN header has been transmitted */{IfxAsclin_Lin_sendResponse(g_lin, data, len); /* Send message */} }void asclin_lin_master_receive_message(IfxAsclin_Lin *g_lin, uint8 id, uint8 *data, uint8 len) {IfxAsclin_Lin_sendHeader(g_lin, &id); /* Send LIN header */IfxAsclin_Lin_receiveResponse(g_lin, data, len); /* wait until receive response end acknowledgemnet or an error is occured*/// if(g_lin->acknowledgmentFlags.rxResponseEnd == 1) // { // IfxAsclin_Lin_receiveResponse(g_lin, data, len); // } }void core0_main(void) {IfxCpu_enableInterrupts();/* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!* Enable the watchdogs and service them periodically if it is required*/IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());/* Wait for CPU sync event */IfxCpu_emitEvent(&g_cpuSyncEvent);IfxCpu_waitEvent(&g_cpuSyncEvent, 1);asclin_lin_master_init(&g_lin_master_2, &MODULE_ASCLIN2, &asclin2_pins, 19200);uint8 tx_data[8] = {8,7,6,5,4,3,2,1};asclin_lin_master_send_message(&g_lin_master_2, 0x11, tx_data, 8);uint8 rx_data[8];asclin_lin_master_receive_message(&g_lin_master_2, 0x3A, rx_data, 8);while(1){} }其中:
- P10.6為接收, P10.5為發(fā)送, 對應(yīng)Asclin2, 作為Master
- 通信速率設(shè)置為19200bps
- IfxAsclin_Lin_initModuleConfig中默認(rèn)config->data.checksum= IfxAsclin_Checksum_enhanced; 所以是增強校驗
- 先自己發(fā)送一幀ID為0x11的幀
- 再等待直到接收ID為0x3A的幀, 這個函數(shù)可以稍微修改一下, 畢竟LIN的速率很慢, 19200bps, 8字節(jié)數(shù)據(jù), 也得大概5~10ms了(有點寬泛), 總之, 等著不是長久之計, 或許可以發(fā)完header后輪詢判斷 g_lin->acknowledgmentFlags.rxResponseEnd == 1 后再進(jìn)行接收響應(yīng)
USB分析儀設(shè)置為從機, 19200波特率
從機寫配置如下
在Aurix Development Studio中仿真, 可以看到確實收到了USB-LIN分析儀發(fā)出的數(shù)據(jù)
參考
如下:
- Local Interconnect Network - Wikipedia
- LIN Bus – 第22條軍規(guī) (wangdali.net)
- ISO - ISO 17987-1:2016 - Road vehicles — Local Interconnect Network (LIN) — Part 1: General information and use case definition
- ISO - ISO 17987-8:2019 - Road vehicles — Local Interconnect Network (LIN) — Part 8: Electrical physical layer (EPL) specification: LIN over DC powerline (DC-LIN)
- LIN-SUBBUS.ORG
- iDoka/awesome-linbus: An awesome LIN bus tools, hardware and resources (github.com)
- uCAN-LIN/LinUSBConverter: LIN(Local interconnect network) to USB converter with LIN master support compatible with SLCAN. (github.com)
- S32K1XXRM, S32K1xx Series Reference Manual S32K (usermanual.wiki)
- MPC5748GRM.pdf
歡迎關(guān)注微信公眾號:
總結(jié)
以上是生活随笔為你收集整理的TC397 LIN Master 用例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自我介绍php一句话,面试自我介绍经典语
- 下一篇: java replica set_kub