日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TC397 LIN Master 用例

發(fā)布時間:2024/3/7 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TC397 LIN Master 用例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。