0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CAN發(fā)送的底層邏輯:CANwrite函數(shù)機(jī)制介紹

冬至子 ? 來(lái)源:汽車電子過(guò)山車 ? 作者:歡樂(lè)皮皮峰 ? 2023-07-17 15:47 ? 次閱讀

1.前言:AUTOSAR通信系列介紹

這個(gè)系列是全新的系列,整個(gè)系列會(huì)通過(guò)實(shí)際操作,調(diào)試實(shí)際的代碼,以CAN為例,完整的解析AUTOSAR的從底層MCAL 到COM等上層模塊的通信鏈路層。重點(diǎn)講述數(shù)據(jù)的流向,以及各個(gè)模塊的作用,配置方法。

通過(guò)這個(gè)系列,將會(huì)以代碼的視角,了解如IPDU LPDU SDU HOH HTH HRH MB等AUTOSAR抽象概念的實(shí)際實(shí)現(xiàn)及其數(shù)據(jù)結(jié)構(gòu),以及在真實(shí)的AUTOSAR 架構(gòu)軟件中,CAN CANIF PDUR COM CANTP 等模塊中數(shù)據(jù)的傳輸,配置參數(shù),函數(shù)的調(diào)用等各個(gè)方面。讓我們?cè)谑褂肁UTOSAR配置通信的同時(shí),不被其架空,不當(dāng)只會(huì)配置的工具人。

系列將會(huì)從MCAL自底向上,一步步分析各個(gè)模塊,搞清楚整個(gè)通信的發(fā)送機(jī)制,和通信的接收機(jī)制。

2.Can_write函數(shù)介紹,以及HOH抽象的實(shí)施 MessgeBuffer介紹

整個(gè)的CAN發(fā)送,實(shí)際上是由Can模塊里面的Can_write實(shí)現(xiàn)的。我們先以S32K14x MCAL代碼為實(shí)例,介紹Can_write函數(shù)的發(fā)送機(jī)制,以對(duì)L_PDU HOH HTH Message Buffer這些抽象建立起基本的概念。

ECU執(zhí)行完必要的初始化函數(shù)和設(shè)置controller模式后,我們就可以調(diào)用Can_Write函數(shù)來(lái)發(fā)送報(bào)文了。

Can_Write函數(shù)的傳入?yún)?shù)有兩個(gè):

  1. hth:hardware transmit handle 硬件傳輸句柄。這個(gè)的詳細(xì)講解在后面。
  2. PduInfo(此即LPDU Data link Layer protocol)結(jié)構(gòu)體成員如下:
    id:CAN報(bào)文ID
    swPduHandle:LPDU 句柄,此句柄在Canif層定義。每個(gè)句柄表示的是1個(gè)LPDU.用來(lái)在發(fā)送的最后時(shí)刻觸發(fā)PDU的tx_confirmation.
    length:LPDU數(shù)據(jù)長(zhǎng)度,即報(bào)文的長(zhǎng)度。
    sdu:LPDU的數(shù)據(jù)指針。

實(shí)例:Can_write函數(shù)介紹,以及HOH抽象的實(shí)施 MessgeBuffer介紹

我們以一個(gè)簡(jiǎn)單的例子說(shuō)明:

如下是代碼:

圖片

如下是報(bào)文:

圖片

這個(gè)例子介紹了AUTOSAR發(fā)送報(bào)文的最底層接口的使用方法,可以先建立一個(gè)直觀的印象。

can_write的第一個(gè)參數(shù)hth是AUTOSAR標(biāo)準(zhǔn)里面的一個(gè)概念,接下來(lái)的內(nèi)容的講解目的是為了透徹的理解hth。

AUTOSAR從MCAL開(kāi)始 就對(duì)CAN進(jìn)行抽象了,抽象出HOH Hardware object handle 硬件處理對(duì)象,HOH以發(fā)送和接收的不同,分為了HTH,HRH,這倆可以統(tǒng)稱為HOH。

HOH對(duì)象包括很多屬性,如

Can Implementation Type(FULL/BASIC

Can ID Message Type(STANDARD/MIXED/EXTEND)

Can Controller Reference (使用哪個(gè)can controler)

Number of Hw objects used to implement one HOH

等等屬性。

當(dāng)我們用其中的一個(gè)HOH作為對(duì)象來(lái)發(fā)送報(bào)文時(shí),這個(gè)報(bào)文的發(fā)送屬性會(huì)繼承這個(gè)HOH對(duì)象的所有屬性。

舉例說(shuō)明:

EB(S32K148)中配置了如下幾個(gè)HOH:

圖片

這里的配置實(shí)際會(huì)影響的是Can_PBcfg中的MessgeBuffer的配置結(jié)構(gòu)體,MessgeBuffer結(jié)構(gòu)體數(shù)組是HOH的具體實(shí)施,它的含義下文詳細(xì)描述。Can Object ID即為HOH的ID。

在Can_write例子中我們傳入HTH的是4,即利用HOH_3_EcuTestNode_CanCluster這個(gè)HOH作為對(duì)象,進(jìn)行發(fā)送。

深入Can_write中,調(diào)用的是Can_FlexCan_Write的這個(gè)函數(shù):

圖片

他會(huì)先搜索Messge Buffer配置結(jié)構(gòu)體中u32HWObjID為hth,即為4的這個(gè)配置。

Messge Buffer的配置結(jié)構(gòu)體的部分成員:

static CONST(Can_MBConfigObjectType, CAN_CONST) MessageBufferConfigs0_PB[CAN_MAXMBCOUNT_PB] =
{
    /* HOH_0_EcuTestNode_CanCluster Message Buffer of Can Controller ID = 0U*/
    {
        (Can_HwHandleType)0x0U, /* uIdMaskIndex */
        (uint8)0U, /* ControllerId  - based on the order from CanController list */
        (CanIdType)CAN_STANDARD, /* ID type: EXTENDED, STANDARD, MIXED */
        (Can_ObjType)CAN_RECEIVE, /* Receive/Transmit MB configuration */
        (Can_IdType)0x0U, /* MessageId */
        (uint8)0x0U, /* Local priority bits used for arbitration */
        (Can_HwHandleType)0x0U, /* Hardware Object ID */
        #if (CAN_FD_MODE_ENABLE == STD_ON)
        (uint8)0U,
        #endif
        /* Read/Write period reference used when POLLING mode is selected for the controller */
        (uint8)0U, /* HOH configured for INTERRUPT mode, reference not used */

        (uint16)0x0080U,       /* Address of Message Buffer  */
        (uint8)8U,    /* Payload lenth of Message Buffer */
        (uint8)0U    /* The index of MB in message buffer memory */
        #if (CAN_TRIGGER_TRANSMIT_EN == STD_ON)
        /* The parameter is used to detect the MB which run with trigger transmit feature */
        ,(boolean)FALSE
        #endif
    },


    /* HOH_3_UDSTX_Node Message Buffer of Can Controller ID = 0U*/
    {
        (Can_HwHandleType)CAN_MAXMASKCOUNT, /* uIdMaskIndex */
        (uint8)0U, /* ControllerId  - based on the order from CanController list */
        (CanIdType)CAN_STANDARD, /* ID type: EXTENDED, STANDARD, MIXED */
        (Can_ObjType)CAN_TRANSMIT, /* Receive/Transmit MB configuration */
        (Can_IdType)0x7eaU, /* MessageId */
        (uint8)0x0U, /* Local priority bits used for arbitration */
        (Can_HwHandleType)0x1U, /* Hardware Object ID */
        #if (CAN_FD_MODE_ENABLE == STD_ON)
        (uint8)0U,
        #endif
        /* Read/Write period reference used when POLLING mode is selected for the controller */
        (uint8)0U,   /* HOH configured for INTERRUPT mode, reference not used */

        (uint16)0x0180U,       /* Address of Message Buffer  */
        (uint8)8U,    /* Payload lenth of Message Buffer */
        (uint8)16U    /* The index of MB in message buffer memory */
        #if (CAN_TRIGGER_TRANSMIT_EN == STD_ON)
        /* The parameter is used to detect the MB which run with trigger transmit feature */
        ,(uint8)FALSE
        #endif
    },


    /* HOH_3_NMTX_Node Message Buffer of Can Controller ID = 0U*/
    {
        (Can_HwHandleType)CAN_MAXMASKCOUNT, /* uIdMaskIndex */
        (uint8)0U, /* ControllerId  - based on the order from CanController list */
        (CanIdType)CAN_STANDARD, /* ID type: EXTENDED, STANDARD, MIXED */
        (Can_ObjType)CAN_TRANSMIT, /* Receive/Transmit MB configuration */
        (Can_IdType)0x424U, /* MessageId */
        (uint8)0x0U, /* Local priority bits used for arbitration */
        (Can_HwHandleType)0x2U, /* Hardware Object ID */
        #if (CAN_FD_MODE_ENABLE == STD_ON)
        (uint8)0U,
        #endif
        /* Read/Write period reference used when POLLING mode is selected for the controller */
        (uint8)0U,   /* HOH configured for INTERRUPT mode, reference not used */

        (uint16)0x0190U,       /* Address of Message Buffer  */
        (uint8)8U,    /* Payload lenth of Message Buffer */
        (uint8)17U    /* The index of MB in message buffer memory */
        #if (CAN_TRIGGER_TRANSMIT_EN == STD_ON)
        /* The parameter is used to detect the MB which run with trigger transmit feature */
        ,(uint8)FALSE
        #endif
    },


    /* HOH_3_XCPTX_Node Message Buffer of Can Controller ID = 0U*/
    {
        (Can_HwHandleType)CAN_MAXMASKCOUNT, /* uIdMaskIndex */
        (uint8)0U, /* ControllerId  - based on the order from CanController list */
        (CanIdType)CAN_STANDARD, /* ID type: EXTENDED, STANDARD, MIXED */
        (Can_ObjType)CAN_TRANSMIT, /* Receive/Transmit MB configuration */
        (Can_IdType)0x667U, /* MessageId */
        (uint8)0x0U, /* Local priority bits used for arbitration */
        (Can_HwHandleType)0x3U, /* Hardware Object ID */
        #if (CAN_FD_MODE_ENABLE == STD_ON)
        (uint8)0U,
        #endif
        /* Read/Write period reference used when POLLING mode is selected for the controller */
        (uint8)0U,   /* HOH configured for INTERRUPT mode, reference not used */

        (uint16)0x01a0U,       /* Address of Message Buffer  */
        (uint8)8U,    /* Payload lenth of Message Buffer */
        (uint8)18U    /* The index of MB in message buffer memory */
        #if (CAN_TRIGGER_TRANSMIT_EN == STD_ON)
        /* The parameter is used to detect the MB which run with trigger transmit feature */
        ,(uint8)FALSE
        #endif
    },


    /* HOH_3_EcuTestNode_CanCluster Message Buffer of Can Controller ID = 0U*/
    {
        (Can_HwHandleType)CAN_MAXMASKCOUNT, /* uIdMaskIndex */
        (uint8)0U, /* ControllerId  - based on the order from CanController list */
        (CanIdType)CAN_STANDARD, /* ID type: EXTENDED, STANDARD, MIXED */
        (Can_ObjType)CAN_TRANSMIT, /* Receive/Transmit MB configuration */
        (Can_IdType)0x110U, /* MessageId */
        (uint8)0x0U, /* Local priority bits used for arbitration */
        (Can_HwHandleType)0x4U, /* Hardware Object ID */
        #if (CAN_FD_MODE_ENABLE == STD_ON)
        (uint8)0U,
        #endif
        /* Read/Write period reference used when POLLING mode is selected for the controller */
        (uint8)0U,   /* HOH configured for INTERRUPT mode, reference not used */

        (uint16)0x01b0U,       /* Address of Message Buffer  */
        (uint8)8U,    /* Payload lenth of Message Buffer */
        (uint8)19U    /* The index of MB in message buffer memory */
        #if (CAN_TRIGGER_TRANSMIT_EN == STD_ON)
        /* The parameter is used to detect the MB which run with trigger transmit feature */
        ,(uint8)FALSE
        #endif
    },
    /* HOH_3_EcuTestNode_CanCluster Message Buffer of Can Controller ID = 0U*/
    {
        (Can_HwHandleType)CAN_MAXMASKCOUNT, /* uIdMaskIndex */
        (uint8)0U, /* ControllerId  - based on the order from CanController list */
        (CanIdType)CAN_STANDARD, /* ID type: EXTENDED, STANDARD, MIXED */
        (Can_ObjType)CAN_TRANSMIT, /* Receive/Transmit MB configuration */
        (Can_IdType)0x110U, /* MessageId */
        (uint8)0x0U, /* Local priority bits used for arbitration */
        (Can_HwHandleType)0x4U, /* Hardware Object ID */
        #if (CAN_FD_MODE_ENABLE == STD_ON)
        (uint8)0U,
        #endif
        /* Read/Write period reference used when POLLING mode is selected for the controller */
        (uint8)0U,   /* HOH configured for INTERRUPT mode, reference not used */

        (uint16)0x01c0U,       /* Address of Message Buffer  */
        (uint8)8U,    /* Payload lenth of Message Buffer */
        (uint8)20U    /* The index of MB in message buffer memory */
        #if (CAN_TRIGGER_TRANSMIT_EN == STD_ON)
        /* The parameter is used to detect the MB which run with trigger transmit feature */
        ,(uint8)FALSE
        #endif
    },........

所以上文函數(shù)搜索到的第一個(gè)結(jié)構(gòu)體成員一定是第一個(gè)Hardware Object ID為4的這個(gè)MB 結(jié)構(gòu)體:

/* HOH_3_EcuTestNode_CanCluster Message Buffer of Can Controller ID = 0U*/
    {
        (Can_HwHandleType)CAN_MAXMASKCOUNT, /* uIdMaskIndex */
        (uint8)0U, /* ControllerId  - based on the order from CanController list */
        (CanIdType)CAN_STANDARD, /* ID type: EXTENDED, STANDARD, MIXED */
        (Can_ObjType)CAN_TRANSMIT, /* Receive/Transmit MB configuration */
        (Can_IdType)0x110U, /* MessageId */
        (uint8)0x0U, /* Local priority bits used for arbitration */
        (Can_HwHandleType)0x4U, /* Hardware Object ID */
        #if (CAN_FD_MODE_ENABLE == STD_ON)
        (uint8)0U,
        #endif
        /* Read/Write period reference used when POLLING mode is selected for the controller */
        (uint8)0U,   /* HOH configured for INTERRUPT mode, reference not used */

        (uint16)0x01b0U,       /* Address of Message Buffer  */
        (uint8)8U,    /* Payload lenth of Message Buffer */
        (uint8)19U    /* The index of MB in message buffer memory */
        #if (CAN_TRIGGER_TRANSMIT_EN == STD_ON)
        /* The parameter is used to detect the MB which run with trigger transmit feature */
        ,(uint8)FALSE
        #endif
    },

以這個(gè)成員的配置去改變對(duì)應(yīng)的寄存器,從而讓發(fā)送的報(bào)文繼承這里面的屬性。

我們現(xiàn)在需要搞明白的就剩這個(gè)MessgeBuffer配置結(jié)構(gòu)體。

結(jié)構(gòu)體里面的屬性的含義,這些看EB的CAN模塊的配置手冊(cè)可以搞明白,我想介紹的是MessgeBuffer這個(gè)機(jī)制。這是S32K Flex CAN的機(jī)制

圖片

這是 Flex CAN的報(bào)文緩沖。報(bào)文緩沖有很多,配置好相關(guān)寄存器,最后將報(bào)文數(shù)據(jù)寫入報(bào)文緩沖,可完成發(fā)送。

我們注意到MessageBufferConfigs0_PB中的每個(gè)結(jié)構(gòu)體成員都有表示Address of Message Buffer的屬性和表示The index of MB in message buffer memory的屬性。這屬性各個(gè)成員全不同并且是序號(hào),地址按順序遞增的現(xiàn)象。所以這些結(jié)構(gòu)體成員就是一個(gè)一個(gè)不同的Messagebuffer。再注意到之前提到的Can_Write中傳入的Hth即是這里的Hardware Object ID。最后兩個(gè)結(jié)構(gòu)體,你發(fā)現(xiàn)他們雖然Message Buffer的地址不同,但是共用一個(gè)Hth號(hào)4.實(shí)際上完整的Messagebuffer的定義,有十個(gè)結(jié)構(gòu)體成員都是共用4號(hào)Hth.

這是由EB配置項(xiàng)Number of Hw objects used to implement one HOH配為10決定的。這里 Hw objects即不同的MessageBuffer。但是他們關(guān)聯(lián)了同個(gè)Hth。換言之1個(gè)Hth中可以包括多個(gè)MessageBuffer。即HTH是比MessageBuffer是更高層的抽象,例子中向Can_Write傳入這個(gè)ID為4的hth,可以有10個(gè)MessageBuffer供選擇寫入數(shù)據(jù),一個(gè)MessgeBuffer被占了我再找下個(gè)MessageBuffer。這樣的配置作用就是使用這個(gè)HTH,可以在極短時(shí)間同時(shí)支持最多10個(gè)報(bào)文的發(fā)送。

以上例子Can_write函數(shù)的底層實(shí)現(xiàn)的邏輯簡(jiǎn)化說(shuō)明如下:
1.輪詢Messge Buffer配置結(jié)構(gòu)體中u32HWObjID為hth是4的MB結(jié)構(gòu)體成員。

2找到第一個(gè)hth為4的MessageBuffer。傳入LPDU數(shù)據(jù),嘗試更新MessageBuffer發(fā)送,再判斷是否是CAN_BUSY狀態(tài)。假如是,找下一個(gè)Hth為4的MB繼續(xù)嘗試發(fā)送,直到成功發(fā)送出去一次,返回CAN_OK。

這期的介紹就到這里,本期我們可以搞清楚什么是LPDU,什么是HOH和HTH。從HOH的實(shí)際實(shí)施可以看出,所謂的AUTOSAR抽象,即將某個(gè)對(duì)象的所有配置,用結(jié)構(gòu)體數(shù)組打包在一起,然后給他們編號(hào)。這個(gè)編號(hào)和各個(gè)對(duì)象的配置一一對(duì)應(yīng)。后面需要使用這個(gè)對(duì)象的時(shí)候即使用編號(hào)去索引對(duì)應(yīng)的結(jié)構(gòu)體數(shù)組即可。這個(gè)思路會(huì)貫穿整個(gè)的AUTOSAR實(shí)現(xiàn)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5254

    瀏覽量

    119241
  • CAN通信
    +關(guān)注

    關(guān)注

    5

    文章

    93

    瀏覽量

    17761
  • 緩沖器
    +關(guān)注

    關(guān)注

    6

    文章

    1904

    瀏覽量

    45334
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    339

    瀏覽量

    21363
  • PDU
    PDU
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    16904
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    邏輯函數(shù)邏輯問(wèn)題的介紹

    本帖最后由 gk320830 于 2015-3-9 22:17 編輯 邏輯函數(shù)邏輯問(wèn)題的描述  在討論了與、或、非三種基本邏輯運(yùn)算后,下面將從工程實(shí)際出發(fā),提出
    發(fā)表于 04-06 23:57

    ESM6802 Android版支持雙CAN通信

    libCanControl.so文件的C/C++源碼做參考。這樣,對(duì)于Android應(yīng)用開(kāi)發(fā)的客戶來(lái)說(shuō),只需要專注于Java層的應(yīng)用邏輯開(kāi)發(fā)。  CanControl類的四個(gè)native函數(shù)簡(jiǎn)單介紹如下
    發(fā)表于 10-20 11:32

    請(qǐng)問(wèn)CAN接收中斷DSP底層會(huì)怎么樣?

    請(qǐng)教:正常流程:CAN設(shè)置成中斷接收方式,通過(guò)CAN調(diào)試助手,發(fā)送一幀數(shù)據(jù),產(chǎn)生一個(gè)CAN接收中斷,并進(jìn)行數(shù)據(jù)處理;異常流程:如果我發(fā)送
    發(fā)表于 10-17 14:37

    EPP邏輯接口WinDriver底層驅(qū)動(dòng)的可視化

    取自外部CAN總線系統(tǒng)的+5V電源;發(fā)光二極管用做電源和主、備節(jié)點(diǎn)的收發(fā)指示。2 EPP和SJAl000之間的接口邏輯設(shè)計(jì) 在EPP接口和SJAl000之間加入適當(dāng)?shù)?b class='flag-5'>邏輯接口,可以避免傳統(tǒng)設(shè)計(jì)中對(duì)EPP
    發(fā)表于 11-29 14:51

    iTOP-iMX6開(kāi)發(fā)板-Android-can測(cè)試?yán)?b class='flag-5'>介紹

    Java_can_hardware_hardwareControl_canWrite這是 can發(fā)送接口。JNIEXPORT jobject JNICALL
    發(fā)表于 03-11 10:24

    邏輯代數(shù)與邏輯函數(shù)

    邏輯代數(shù)與邏輯函數(shù):本章主要討論分析和設(shè)計(jì)數(shù)字邏輯功能的數(shù)學(xué)。首先介紹邏輯代數(shù)中的基本運(yùn)算、基本
    發(fā)表于 09-01 09:11 ?0次下載

    邏輯代數(shù)和函數(shù)化簡(jiǎn)

    邏輯代數(shù)和函數(shù)化簡(jiǎn) 2.1 基本邏輯運(yùn)算和復(fù)合邏輯運(yùn)算2.2 邏輯函數(shù)及其描述2.3
    發(fā)表于 05-26 16:54 ?52次下載

    邏輯函數(shù)邏輯問(wèn)題的描述

    邏輯函數(shù)邏輯問(wèn)題的描述   在討論了與、或、非三種基本邏輯運(yùn)算后,下面將從工程實(shí)際出發(fā),提出邏輯命題,然后用真值表加以描述,從真值表可以
    發(fā)表于 04-06 23:56 ?1314次閱讀
    <b class='flag-5'>邏輯</b><b class='flag-5'>函數(shù)</b>與<b class='flag-5'>邏輯</b>問(wèn)題的描述

    STM32_CAN發(fā)送和接收過(guò)濾原理

    STM32_CAN發(fā)送和接收過(guò)濾原理介紹。
    發(fā)表于 07-22 17:04 ?9次下載

    CAN為什么會(huì)發(fā)送失敗

    CAN總線調(diào)試過(guò)程中出現(xiàn)報(bào)文發(fā)送失敗,很多工程師都對(duì)此只知其一不知其二,這里就CAN報(bào)文發(fā)送失敗的問(wèn)題我們來(lái)做一次探討。在了解CAN報(bào)文為什
    發(fā)表于 07-19 18:47 ?1.9w次閱讀
    <b class='flag-5'>CAN</b>為什么會(huì)<b class='flag-5'>發(fā)送</b>失敗

    03 底層庫(kù)函數(shù)

    03 底層庫(kù)函數(shù)
    發(fā)表于 10-11 09:29 ?7次下載
    03 <b class='flag-5'>底層</b>庫(kù)<b class='flag-5'>函數(shù)</b>

    邏輯NOT函數(shù)功能介紹

    邏輯NOT函數(shù)輸出在其單個(gè)輸入為false時(shí)為true,在單個(gè)輸入為true時(shí)為false邏輯NOT函數(shù)僅為單個(gè)輸入反相器將邏輯電平“1”的
    的頭像 發(fā)表于 06-23 05:48 ?8896次閱讀
    <b class='flag-5'>邏輯</b>NOT<b class='flag-5'>函數(shù)</b>功能<b class='flag-5'>介紹</b>

    CAN底層驅(qū)動(dòng)數(shù)據(jù)的傳輸需要注意什么

    ,但經(jīng)典CAN還是使用最多和最頻繁的,在底層驅(qū)動(dòng)中,我們要注意數(shù)據(jù)的傳輸。 如我們?cè)谧x取CAN數(shù)據(jù)幀的時(shí)候需要做調(diào)整,我們以NXP的 Kinetis系列為例子, 同樣在發(fā)送傳輸?shù)臅r(shí)候,
    的頭像 發(fā)表于 06-04 14:49 ?1851次閱讀
    <b class='flag-5'>CAN</b><b class='flag-5'>底層</b>驅(qū)動(dòng)數(shù)據(jù)的傳輸需要注意什么

    IGBT驅(qū)動(dòng)優(yōu)化的底層邏輯是什么

    ——驅(qū)動(dòng)優(yōu)化的底層邏輯是什么?
    的頭像 發(fā)表于 04-29 16:15 ?2655次閱讀

    PduR模塊的發(fā)送機(jī)制 PduR這個(gè)模塊對(duì)什么進(jìn)行了抽象呢?

    前兩期,我們講了CAN模塊的發(fā)送邏輯,Canif模塊的發(fā)送邏輯發(fā)送確認(rèn)
    的頭像 發(fā)表于 07-17 15:54 ?2797次閱讀
    PduR模塊的<b class='flag-5'>發(fā)送機(jī)制</b> PduR這個(gè)模塊對(duì)什么進(jìn)行了抽象呢?