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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Tricore的CANFD入門工程

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

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

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

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

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

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

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

對應的代碼實現(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
};

(三)波特率設置

配置代碼如下:

        .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
        },

如上,設置Normal段速率為500Kbps,Data段速率為2000Kbps,采樣點均設置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報文的接收過濾主要設置兩部分:

1、Global Filter Configuration

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

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

2、Standard Message ID Filter處理 標準CAN報文的ID過濾處理,即:設置每個郵箱過濾報文的范圍或者指定一幀或者兩幀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

如上的過濾設置好以后,CAN Controller即按如下流程進行標準CAN FD報文的接收。

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

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

2、CANFD對應的CAN_H、CAN_L波形

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

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

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

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

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

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

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

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

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

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

審核編輯:湯梓紅

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

    關注

    5052

    文章

    18912

    瀏覽量

    300813
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2686

    瀏覽量

    462928
  • 編譯器
    +關注

    關注

    1

    文章

    1608

    瀏覽量

    48979
  • TriCore
    +關注

    關注

    0

    文章

    13

    瀏覽量

    11731
  • CANFD
    +關注

    關注

    0

    文章

    54

    瀏覽量

    4898

原文標題:基于Tricore的CANFD入門工程

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

收藏 人收藏

    評論

    相關推薦

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

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

    玩轉先楫CANFD外設系列之一:輕松搞起CANFD

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

    求助,關于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 的關系嗎 ?,我應該要填多少 ?,該怎么從代碼推算呢 ?
    發(fā)表于 02-01 07:27

    TC275D系列的芯片支持標準CANFD能配置成非標準CANFD的嗎?

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

    hightec新建工程的向導頁面沒有TriCore板可選,是否安裝失敗了?

    hightec新建工程的向導頁面沒有TriCore板可選,是否安裝失敗了(已添加license)
    發(fā)表于 02-06 07:05

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

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

    Tricore的flash驅動源碼

    一直很忙,很早就想發(fā)一個flash驅動上來,一直沒機會。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外設參考文檔CAN-FD特性CAN-FD格式CAN 2.0 VS CAN-FDSTM32 FDCAN 外設特性位時間和采樣點Message RAM濾波器設置Rx
    發(fā)表于 08-12 07:21

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

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

    CANFD的發(fā)送模式解析

    本文主要講解 CANFD 的發(fā)送模式,CANFD 支持的發(fā)送模式有 3 種:TXBUFF, TXQUEUE, TXFIFO,另外發(fā)送模式還支持發(fā)送事件。對 CANFD 的接收模式有興趣的可以參看
    發(fā)表于 03-21 14:35

    硬件工程入門教程

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

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

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

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

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