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

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

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

基于Tricore的CANFD入門工程

jf_EksNQtU6 ? 來源:開心果 Need Car ? 2023-07-12 09:46 ? 次閱讀

汽車嵌入式開發(fā),很多時候,想學(xué)一些東西(eg:CANFD),但又不知道如何下手,這應(yīng)該是大多數(shù)剛?cè)胄?a target="_blank">工程師的苦惱。目前項目上,CANFD的使用已經(jīng)很普遍,而單純閱讀芯片手冊,可能無法透徹的理解CANFD,如果想透徹的理解CANFD,結(jié)合目標(biāo)板去實踐是不二選擇。

官網(wǎng)的MCMCAN_FD_1_KIT_TC375_LK工程用的回環(huán)模式,并不能真實發(fā)送/接收報文,本文基于官網(wǎng)工程做了二次開發(fā),希望此Demo可以助力大家高效學(xué)習(xí)CANFD。

本文環(huán)境:TC375開發(fā)板+Tasking編譯器。

1、TC375 CANFD實現(xiàn)注意事項

本文對實現(xiàn)過程中的幾處細(xì)節(jié),展開討論。 (一)Transceiver的使能 按照手冊描述,Transceiver型號為TLE9251V,Transceiver的使能需要拉低P20.6,使其進(jìn)入Normal工作模式。

d7f8bef4-1fd5-11ee-962d-dac502259ad0.png

對應(yīng)的代碼實現(xiàn)如下:

void GPIO_init(void)
{
    IfxPort_setPinMode(&MODULE_P20, 6,  IfxPort_Mode_outputPushPullGeneral);
    IfxPort_setPinLow(&MODULE_P20, 6);
}

(二)CAN_H、CAN_L Pin配置

代碼實現(xiàn)如下:

IFX_CONST IfxCan_Can_Pins Can0PortInfo = {
            .txPin = &IfxCan_TXD00_P20_8_OUT,
            .txPinMode = IfxPort_OutputMode_pushPull,
            .rxPin = &IfxCan_RXD00B_P20_7_IN,
            .rxPinMode = IfxPort_InputMode_pullUp,
            .padDriver = IfxPort_PadDriver_cmosAutomotiveSpeed1
};

(三)波特率設(shè)置

配置代碼如下:

        .baudRate                                    = {
            .baudrate      = 500000,
            .samplePoint   = 8000,
            .syncJumpWidth = 2000,
            .prescaler     = 0,
            .timeSegment1  = 3,
            .timeSegment2  = 10
        },
        .fastBaudRate                                = {
            .baudrate              = 2000000,
            .samplePoint           = 8000,
            .syncJumpWidth         = 2000,
            .prescaler             = 1,
            .timeSegment1          = 3,
            .timeSegment2          = 10,
            .tranceiverDelayOffset = 0
        },

如上,設(shè)置Normal段速率為500Kbps,Data段速率為2000Kbps,采樣點均設(shè)置80%。

(四)接收過濾配置

配置代碼實現(xiàn)如下所示:

.filterConfig                                = {
    .messageIdLength                    = IfxCan_MessageIdLength_standard,
    .standardListSize                   = 0,
    .extendedListSize                   = 0,
    .rejectRemoteFramesWithStandardId   = 0,
    .rejectRemoteFramesWithExtendedId   = 0,
    .standardFilterForNonMatchingFrames = IfxCan_NonMatchingFrame_acceptToRxFifo0,
    .extendedFilterForNonMatchingFrames = IfxCan_NonMatchingFrame_acceptToRxFifo0
},




g_mcmcan.canFilter.number = 2;
g_mcmcan.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxFifo0;
g_mcmcan.canFilter.type = IfxCan_FilterType_range;
g_mcmcan.canFilter.id1 = 0x166;
g_mcmcan.canFilter.id2 = 0x168;
g_mcmcan.canFilter.rxBufferOffset = IfxCan_RxBufferId_0;
(五)接收報文過濾實現(xiàn) 本文可以接收報文的范圍為:0x166~0x168。 代碼實現(xiàn):
void IfxCan_Can_setStandardFilter(IfxCan_Can_Node *node, IfxCan_Filter *filter)
{
    /* enable configuration change CCCR.CCE = 1, CCCR.INIT = 1 */
    IfxCan_Node_enableConfigurationChange(node->node);


    Ifx_CAN_STDMSG *standardFilterElement = ((uint32*)(node->messageRAM.baseAddress + node->messageRAM.standardFilterListStartAddress));


    standardFilterElement->S0.B.SFID2 = filter->id2;
    /* First ID of standard ID filter element. */
    standardFilterElement->S0.B.SFID1 = filter->id1;
    /* 001B Store in Rx FIFO 0 if filter matches */
    standardFilterElement->S0.B.SFEC = 0x01;
    /* 00B Range filter from SF1ID to SF2ID (SF2ID ≥ SF1ID) */
    standardFilterElement->S0.B.SFT = 0x00;


    /* Defines how received messages with 11-bit IDs that do not match any 
     * element of the filter list are treated. (0x03)11B Reject */
    node->node->GFC.B.ANFS = 0x03;


    /* disable configuration change CCCR.CCE = 0, CCCR.INIT = 0 */
    IfxCan_Node_disableConfigurationChange(node->node);
}

CAN報文的接收過濾主要設(shè)置兩部分:

1、Global Filter Configuration

主要配置GFC寄存器,本文對Standard幀進(jìn)行過濾處理,如果與設(shè)置的接收范圍不匹配,則Rejet,設(shè)置GFC寄存器的ANFS位域,如下所示:

d81b9294-1fd5-11ee-962d-dac502259ad0.png

2、Standard Message ID Filter處理 標(biāo)準(zhǔn)CAN報文的ID過濾處理,即:設(shè)置每個郵箱過濾報文的范圍或者指定一幀或者兩幀CANID,如下所示:

d839b9cc-1fd5-11ee-962d-dac502259ad0.png

注意:Standard Message 0并不是一個具體的寄存器,而是CAN模塊專用的RAM區(qū),由實現(xiàn)者根據(jù)需要配置所使用的SRAM大小和起始地址。

而CAN模塊SRAM區(qū)的切割要按照手冊要求劃分,如下所示:

d858c9de-1fd5-11ee-962d-dac502259ad0.png

如上的過濾設(shè)置好以后,CAN Controller即按如下流程進(jìn)行標(biāo)準(zhǔn)CAN FD報文的接收。

d87ba7e2-1fd5-11ee-962d-dac502259ad0.png

如上圖,當(dāng)接收設(shè)置了過濾以后,會對接收到的報文進(jìn)行匹配,如果匹配則接收。當(dāng)然,也可以不配置接收過濾,任意一幀報文均接收,但是,這樣會增加CPU的開銷。

2、CANFD對應(yīng)的CAN_H、CAN_L波形

在500Kbps/2000Kbps通信速率下,一幀64Byte數(shù)據(jù)長度的CANFD報文(CANID 0x55),數(shù)據(jù)內(nèi)容0x55或者0xAA,大概需要320us,如下所示:

d89beea8-1fd5-11ee-962d-dac502259ad0.png

利用示波器的Decode功能,對CAN報文進(jìn)行解碼,示例如下:

d8c1f5da-1fd5-11ee-962d-dac502259ad0.png

對應(yīng)發(fā)送的報文如下所示,CAN ID = 0x55,可以對應(yīng)如上的解析。

d8e3b558-1fd5-11ee-962d-dac502259ad0.png

提示:本文使用的示波器不能解析CANFD,只能解析CAN,如上圖,僅僅對Normal段的解析有效。 (一)一幀CAN報文的傳輸用時

如下圖,一幀報文傳輸用時是一個范圍,統(tǒng)計如下所示:

d90cd488-1fd5-11ee-962d-dac502259ad0.png

注釋:上圖來源群內(nèi)小伙伴的分享,具體出處不詳,此處分享做學(xué)習(xí)使用。 解釋:為了確保數(shù)據(jù)傳輸?shù)目煽?,CAN在傳輸數(shù)據(jù)時,每5個相同位會插入一個反向位,也就是位填充(bit stuffing),eg:000001B,這里的1就是因為傳輸?shù)?超過5個時,插入的反向位。所以,由于一幀CAN報文傳輸數(shù)據(jù)的變化,所以,一幀CAN報文傳輸用時會在一個范圍內(nèi)動態(tài)變化,如果CAN ID是0x555(10101010101B)或者0xAA(00010101010B),同時,數(shù)據(jù)段數(shù)據(jù)都是0x55或者0xAA,則這幀報文幾乎不用額外插入反向位,因此用時更短。如果傳輸?shù)臄?shù)據(jù)是0x00(00000000B)或者0xFF(11111111B),則需要插入大量的反向位,因此,傳輸用時更長。

審核編輯:湯梓紅

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

    關(guān)注

    5046

    文章

    18836

    瀏覽量

    298881
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2665

    瀏覽量

    462526
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1602

    瀏覽量

    48906
  • TriCore
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    11714
  • CANFD
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    4892

原文標(biāo)題:基于Tricore的CANFD入門工程

文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    開發(fā)者分享:輕松搞起CANFD

    先楫的CANFD外設(shè),有兩個CANFD的IP,其中HPM6700系列,HPM6400系列、HPM6300系列使用的是CAN,包括了經(jīng)典CAN和CANFD。
    的頭像 發(fā)表于 08-01 10:28 ?2347次閱讀
    開發(fā)者分享:輕松搞起<b class='flag-5'>CANFD</b>

    玩轉(zhuǎn)先楫CANFD外設(shè)系列之一:輕松搞起CANFD

    一、概述先楫的CANFD外設(shè),有兩個CANFD的IP,其中HPM6700系列,HPM6400系列、HPM6300系列使用的是CAN,包括了經(jīng)典CAN和CANFD。而HPM6200系列則使用的MCAN
    的頭像 發(fā)表于 08-02 08:20 ?2220次閱讀
    玩轉(zhuǎn)先楫<b class='flag-5'>CANFD</b>外設(shè)系列之一:輕松搞起<b class='flag-5'>CANFD</b>

    求助,關(guān)于M467系列CANFD的BSP例程疑問

    CANFD_SetSIDFltr(g_pCanfd, 0, CANFD_RX_BUFFER_STD(0x111, 0)); CANFD_SetSIDFltr(g_pCanfd, 0
    發(fā)表于 01-16 08:19

    CANFD SDL無法被接收到的原因?

    任何 CANFD 消息,如果把 cy_stc_canfd_config_t 的 .canFDMode 改為 false 就可以收到,是因為 BAUDRATE 與 DATARATE 的關(guān)系嗎 ?,我應(yīng)該要填多少 ?,該怎么從代碼推算呢 ?
    發(fā)表于 02-01 07:27

    TC275D系列的芯片支持標(biāo)準(zhǔn)CANFD能配置成非標(biāo)準(zhǔn)CANFD的嗎?

    TC275D系列的芯片支持標(biāo)準(zhǔn)CANFD,是否也能配置成非標(biāo)準(zhǔn)CANFD的呢,有那位技術(shù)人員配置過嗎?
    發(fā)表于 02-06 08:31

    hightec新建工程的向?qū)ы撁鏇]有TriCore板可選,是否安裝失敗了?

    hightec新建工程的向?qū)ы撁鏇]有TriCore板可選,是否安裝失敗了(已添加license)
    發(fā)表于 02-06 07:05

    請問TASKING VX-toolset for TriCore 6.1要多少錢?

    買一套Tricore開發(fā)IDE “TASKING VX-toolset for TriCore 6.1 ”要多少銀子?。?/div>
    發(fā)表于 12-17 11:14

    Tricore的flash驅(qū)動源碼

    一直很忙,很早就想發(fā)一個flash驅(qū)動上來,一直沒機(jī)會。Tricore的FLASH挺大的,不用確實可惜,可以用來存一些掉電不丟失的數(shù)據(jù)。InfineonFlashSamples_v2:官方
    發(fā)表于 12-19 10:37

    CANFD節(jié)點如何與經(jīng)典CAN總線正常通信呢?

    CANFD的來源是什么?CANFD有哪幾個顯著特點?CANFD節(jié)點如何與經(jīng)典CAN總線正常通信呢?
    發(fā)表于 06-16 09:31

    哪些STM32有CANFD

    目錄哪些STM32有CANFD外設(shè)參考文檔CAN-FD特性CAN-FD格式CAN 2.0 VS CAN-FDSTM32 FDCAN 外設(shè)特性位時間和采樣點Message RAM濾波器設(shè)置Rx
    發(fā)表于 08-12 07:21

    配置CANFD模塊的注意事項有哪些

    1、配置 CANFD 模塊的時候,需要使能 CANFD 收發(fā)器,否則進(jìn)入 config 后,無法切換為 Normal 模式。2、dsPIC33CK 系列單片機(jī)的指令周期與時鐘周期的關(guān)系是1:2
    發(fā)表于 11-25 06:10

    硬件工程入門教程

    硬件工程入門教程硬件工程入門教程硬件工程入門教程硬件
    發(fā)表于 01-05 15:53 ?257次下載

    Lin收發(fā)器原理圖 Lin總線學(xué)習(xí)筆記

    ,已經(jīng)分享了《基于TricoreCANFD入門工程》、《基于Tricore的UDP/TCP入門
    的頭像 發(fā)表于 08-30 16:17 ?4594次閱讀
    Lin收發(fā)器原理圖 Lin總線學(xué)習(xí)筆記

    CAN與CANFD的區(qū)別 CAN與CANFD如何轉(zhuǎn)換

    CAN與CANFD的區(qū)別 CAN與CANFD如何轉(zhuǎn)換? CAN(Controller Area Network)是一種廣泛應(yīng)用于汽車和工業(yè)控制系統(tǒng)等領(lǐng)域的串行通信協(xié)議,用于在不同的設(shè)備間傳輸數(shù)據(jù)。而
    的頭像 發(fā)表于 11-22 16:37 ?4962次閱讀

    CAN和CANFD協(xié)議簡介(下)

    CAN和CANFD協(xié)議簡介(下)
    的頭像 發(fā)表于 02-19 12:08 ?374次閱讀
    CAN和<b class='flag-5'>CANFD</b>協(xié)議簡介(下)