TC397 LIN Master 用例
文章目錄
- LIN簡介
- 單片機與LIN
- TC397 LIN
- USB-LIN分析儀
- TC397 KIT LIN
- 工程示例
- 參考
LIN簡介
LIN (Local Interconnect Network), 一種廣播串行網絡,最多包括 16 個節點(一個主節點,通常最多 15 個從節點)。所有消息都由主站發起,最多有一個從站回復給定的消息標識符。主節點也可以通過回復自己的消息來充當從節點。因為所有的通信都是由主機發起的,所以沒有必要進行碰撞檢測。
除了供電的兩根電源線, LIN傳輸數據是單線, 主節點內配置 1kΩ電阻端接 12V ,從節點內配置 30kΩ電阻端接 12V 。
協議的主要特性如下:
- 單主機,最多 16 個從機(即無總線仲裁)。這是 LIN 聯盟為實現確定性時間響應而推薦的值。 從節點位置檢測 (SNPD) 允許在上電后分配節點地址
- 單線通信高達 19.2 kbit/s @ 40 米總線長度。在LIN規范2.2中, 速度高達20 kbit/s。
- 保證延遲時間。
- 可變長度的數據幀(2、4 和 8 字節)。
- 配置靈活性。 帶時間同步的多播接收,無需晶體或陶瓷諧振器。
- 數據校驗和錯誤檢測。
- 檢測缺陷節點。
- 基于標準 UART/SCI 硬件的低成本實現。 分層網絡推動者。
- 工作電壓為 12 V
- 主任務傳輸由中斷信號后跟同步和標識符字段組成的報頭。從設備以一個數據幀進行響應,該數據幀由 2、4 和 8 個數據字節加上 3 個控制信息字節組成。
消息(Message)包含以下字段:
- 同步中斷, 13bit
- 同步字節, 0x55
- 標識符字節, id, identifier
- 數據字節, 0~8 Bytes
- 校驗和字節, V1.3(Classic, 標準校驗, 僅校驗數據字節), V2.0+(Enhanced, 增強校驗, id+data)
六種幀類型(Frame Type):
- Unconditional frame, 無條件幀(普通幀), 標識符在 0 到 59(0x00 到 0x3b)的范圍內. 所有訂閱者都應接收該幀并將其提供給應用程序(假設未檢測到錯誤)
- Event-triggered frame, 事件觸發幀, 攜帶的普通幀的第一個數據字節應等于分配給事件觸發幀的受保護標識符, 僅當其數據值發生變化時,從設備以相關聯的普通幀進行回復。這樣的目的是提高 LIN 集群的響應能力,無需為很少發生事件的多個從節點的輪詢分配過多的總線帶寬。
- Sporadic frame, 零星幀, 當主任務知道幀中攜帶的信號已被更新時,零星幀的頭應僅在其相關的幀時隙中發送
- Diagnostic frame, 診斷幀, 始終包含八個數據字節。標識符是 60 (0x3C),稱為主請求幀,或 61(0x3D),稱為從響應幀。在生成診斷幀的頭之前,主任務詢問其診斷模塊是否應發送或總線是否應靜默。從屬任務根據其診斷模塊發布和訂閱響應。
- User-defined frame, 用戶自定義幀, 可攜帶任何信息, 標識符是 62 (0x3E)。處理分配給該幀的幀時隙時,始終傳輸用戶定義幀的標頭
- Reserved frame, 保留幀, 標識符63 (0x3F), LIN 2.0不用
LIN通常用于對車輛性能或安全不關鍵的子系統中,下面給出了一些示例
通常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路可以當作UART或者LIN的LINFlexD, 示例工程直接擼的寄存器, 可以和庫工程摻著用
-
S32K148的LPUART, FlexIO支持LIN
-
甚至可以用51或者Arduino模擬IO來收發LIN, 如 zapta/linbus: An Arduino based LINBUS stack and signal interceptor/injector. (github.com)
-
外部的收發器兼容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事務,包括標題/響應傳輸和接收,作為主設備或從設備
-
支持標準Lin V1.3 / 2.0 / 2.1 / 2.2和碰撞檢測的J2602
-
自動波特率檢測, 可選的碰撞檢測, 總線空閑檢測, wake-up能力, Stuck at zero/one monitoring for safety
USB-LIN分析儀
直接某寶隨便買了個一百塊左右的USB-LIN調試器, 上位機做的很人性化, 除了時間戳可能不是太準, 沒太大毛病, 收發自如, 用著較爽
USB轉LIN調試器 LIN總線 轉換器 STM32-淘寶網 (taobao.com)
TC397 KIT LIN
KIT_A2G_TC397_3V3_TFT - Infineon Technologies 如圖
原理圖上是
TLE7259-3_DS_rev10 (infineon.com) 的框圖
BUS引腳外掛了1K上拉電阻, 默認是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加示波器來測的, 并沒用上面原理圖對應的IO和LIN收發器, 我們稍微改一下, 暫且都放在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為發送, 對應Asclin2, 作為Master
- 通信速率設置為19200bps
- IfxAsclin_Lin_initModuleConfig中默認config->data.checksum= IfxAsclin_Checksum_enhanced; 所以是增強校驗
- 先自己發送一幀ID為0x11的幀
- 再等待直到接收ID為0x3A的幀, 這個函數可以稍微修改一下, 畢竟LIN的速率很慢, 19200bps, 8字節數據, 也得大概5~10ms了(有點寬泛), 總之, 等著不是長久之計, 或許可以發完header后輪詢判斷 g_lin->acknowledgmentFlags.rxResponseEnd == 1 后再進行接收響應
USB分析儀設置為從機, 19200波特率
從機寫配置如下
在Aurix Development Studio中仿真, 可以看到確實收到了USB-LIN分析儀發出的數據
參考
如下:
- Local Interconnect Network - Wikipedia
- LIN Bus – 第22條軍規 (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
歡迎關注微信公眾號:
總結
以上是生活随笔為你收集整理的TC397 LIN Master 用例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自我介绍php一句话,面试自我介绍经典语
- 下一篇: java replica set_kub