<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          總結(jié)了一份基于STM32H7的CAN FD筆記

          共 17999字,需瀏覽 36分鐘

           ·

          2021-11-26 20:34

          關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

          文章來(lái)源:安富萊電子 | armfly_com



          CAN FD(CAN with flexible data-rate)是CAN2.0協(xié)議的擴(kuò)展,CAN-FD由博世開(kāi)發(fā),并由 ISO 11898-1:2015標(biāo)準(zhǔn)化。

          一、CAN FD協(xié)議介紹

          1、CAN-FD特性

          (1)兼容經(jīng)典CAN,可以遵循ISO 11898-1做數(shù)據(jù)收發(fā)。
          (2)提升錯(cuò)誤檢測(cè),支持高達(dá)CRC 21位的校驗(yàn)和。
          (3)消息優(yōu)先級(jí)。
          (4)保證延遲時(shí)間。
          (5)配置靈活性。
          (6)具有時(shí)間同步的組播接收。
          (7)系統(tǒng)范圍內(nèi)的數(shù)據(jù)一致性,每條消息最多64個(gè)字節(jié)。
          (8)多主機(jī)。
          (9)錯(cuò)誤檢測(cè)和信號(hào)。
          (10)區(qū)分節(jié)點(diǎn)的臨時(shí)錯(cuò)誤和永久性故障以及自動(dòng)關(guān)閉缺陷節(jié)點(diǎn)。

          2、CAN-FD格式:
          ?

          第一個(gè)仲裁階段(The first arbitration phase)是一條消息,其中包含:
          (1)幀開(kāi)始(SOF)。
          (2)ID號(hào)和其他位,指示消息的目的(提供或請(qǐng)求數(shù)據(jù)),以及速度和格式配置(CAN或CAN-FD)。

          數(shù)據(jù)傳輸階段(The data transmission phase)包括:
          (1)數(shù)據(jù)長(zhǎng)度代碼(DLC),指示消息包含多少數(shù)據(jù)字節(jié)。
          (2)用戶(hù)希望發(fā)送的數(shù)據(jù)。
          (3)檢查循環(huán)冗余序列(CRC)。
          (4)顯性位。

          第二個(gè)仲裁階段(The second arbitration phase)包含:
          (1)總線上其他節(jié)點(diǎn)發(fā)送的確認(rèn)(ACK)的接收器(如果至少有一個(gè)接收器成功收到消息)
          (2)幀尾(EOF),在IFS期間不傳輸任何消息:目標(biāo)是將當(dāng)前幀與下一幀分開(kāi)。

          注意:對(duì)于29bit標(biāo)識(shí)符幀,當(dāng)添加18bit標(biāo)識(shí)到第1個(gè)仲裁階段的IDE bit之后與標(biāo)準(zhǔn)CAN FD是類(lèi)似的。

          二、CAN-FD相比CAN2.0的提升

          CAN-FD的開(kāi)發(fā)可以滿足需要更高帶寬的通信網(wǎng)絡(luò)需求。每幀最多具有64個(gè)字節(jié)的CAN-FD以及將比特率提高到最大的可能性,使數(shù)據(jù)階段要快8倍,在第二個(gè)仲裁階段要恢復(fù)到正常的比特率。通過(guò)以下方式確保數(shù)據(jù)傳輸?shù)耐暾裕?/span>

          (1)17級(jí)多項(xiàng)式對(duì)最大16字節(jié)的有效載荷進(jìn)行CRC。
          (2)21級(jí)多項(xiàng)式對(duì)16到64字節(jié)之間的有效載荷進(jìn)行校驗(yàn)。

          標(biāo)準(zhǔn)幀和CAN FD的區(qū)別:

          ?

          標(biāo)識(shí)符后,CAN 2.0和CAN-FD具有不同的作用:
          (1)CAN 2.0發(fā)送RTR位以精確確定幀類(lèi)型:數(shù)據(jù)幀(RTR為主要)或遠(yuǎn)程幀(RTR)是隱性的)。
          (2)由于CAN-FD僅支持?jǐn)?shù)據(jù)幀,因此始終發(fā)送占優(yōu)勢(shì)的RRS(保留)。

          IDE位保持在相同位置,并以相同的動(dòng)作來(lái)區(qū)分基本格式(11位標(biāo)識(shí)符)。請(qǐng)注意,在擴(kuò)展格式的情況下,IDE位以顯性或隱性方式傳輸(29位標(biāo)識(shí)符)。

          與CAN 2.0相比,在CAN-FD幀中,在控制字段中添加了三個(gè)新位:
          (1)擴(kuò)展數(shù)據(jù)長(zhǎng)度(EDL)位:隱性表示幀為CAN-FD,否則該位為顯性(稱(chēng)為R0)在CAN 2.0幀中。
          (2)比特率切換(BRS):指示是否啟用兩個(gè)比特率(例如,當(dāng)數(shù)據(jù)階段位以不同的比特率傳輸?shù)街俨秒A段)。
          (3)錯(cuò)誤狀態(tài)指示器(ESI):指示節(jié)點(diǎn)處于錯(cuò)誤活動(dòng)模式還是錯(cuò)誤被動(dòng)模式。

          控制字段的最后一部分是數(shù)據(jù)長(zhǎng)度代碼(DLC),它具有相同的位置和相同的長(zhǎng)度(4位),用于CAN 2.0和CAN-FD。DLC功能在CAN-FD和CAN 2.0中相同,但CAN-FD有很小變化(下表中的詳細(xì)信息)。CAN-FD擴(kuò)展幀允許單個(gè)消息中發(fā)送64個(gè)數(shù)據(jù)字節(jié),而CAN 2.0有效負(fù)載數(shù)據(jù)最多可以發(fā)送8個(gè)字節(jié)。

          ??

          通過(guò)增加有效載荷數(shù)據(jù)的數(shù)據(jù)字段來(lái)改善網(wǎng)絡(luò)帶寬,因?yàn)樾枰俚陌幚怼M瑫r(shí),通過(guò)為CRC添加更多位來(lái)增強(qiáng)消息完整性:
          (1)如果有效載荷數(shù)據(jù)最多為16個(gè)字節(jié),則CRC以17位編碼。
          (2)如果有效載荷數(shù)據(jù)大于20(16)個(gè)字節(jié),則CRC以21位編碼。

          另外,為了確保CAN-FD幀的魯棒性,填充位機(jī)制支持CRC字段。下表總結(jié)了CAN-FD和CAN 2.0之間的主要區(qū)別。提供的主要功能與CAN 2.0相比,CAN‑FD的改進(jìn)之處在于數(shù)據(jù)有效負(fù)載的增加和速度的提高由CAN-FD中可用的BRS,EDL和ESI位來(lái)確保。

          ??

          三、CAN FD協(xié)議介紹

          STM32H7的CAN FD符合ISO 11898-12015標(biāo)準(zhǔn)。

          STM32器件上的FDCAN的功能如下所示:
          (1)符合CAN協(xié)議2.0版A,B和ISO 11898-1:2015,-4。
          (2)可訪問(wèn)的10 KB RAM內(nèi)存,最多可分配2560個(gè)字。
          (3)改進(jìn)了接收過(guò)濾。
          (4)兩個(gè)可配置的接收FIFO。
          (5)多達(dá)64個(gè)專(zhuān)用接收緩沖區(qū)。
          (6)接收高優(yōu)先級(jí)消息時(shí)的單獨(dú)信令。
          (7)多達(dá)32個(gè)專(zhuān)用發(fā)送緩沖區(qū)。
          (8)可配置的發(fā)送FIFO和發(fā)送隊(duì)列。
          (9)可配置的發(fā)送事件FIFO。
          (10)時(shí)鐘校準(zhǔn)單元。
          (11)收發(fā)器延遲補(bǔ)償。
          下圖說(shuō)明了FDCAN框圖。

          ?

          通過(guò)這個(gè)框圖要了解到以下信息:
          (1)CANFD1和CANFD2共用一個(gè)RAM空間
          (2)每個(gè)CANFD都有自己的內(nèi)核
          (3)CAN內(nèi)核實(shí)現(xiàn)協(xié)議控制和收發(fā)移位寄存器
          (4)Tx handler控制消息從CAN消息RAM到CAN內(nèi)核
          (5)Rx handler控制CAN內(nèi)核到CAN消息RAM

          四、RAM管理
          必須配置每條消息的字節(jié)數(shù),以確定每條消息所需的內(nèi)存大小。CAN-FD上有效負(fù)載的增加可以更有效的將內(nèi)存都利用起來(lái),并允許更多消息要存儲(chǔ)在分配的存儲(chǔ)空間中。

          總的專(zhuān)用RAM大小是2560個(gè)32bit數(shù)據(jù)。

          (1)過(guò)濾區(qū)(11bit過(guò)濾和29bit過(guò)濾)
          (2)接收區(qū)(Rx FIFO 0,Rx FIFO 1和Rx Buffer)
          (3)發(fā)送區(qū)(Tx event FIFO,Tx Buffers)
          (4)觸發(fā)空間(Trigger memory)

          ?

          FDCAN外設(shè)的所有部分都可以由用戶(hù)配置。所有部分的所有元素之和必須不能超過(guò)CAN消息RAM的總大小。該RAM通過(guò)以下方式提高了靈活性和性能:從而有可能消除未使用的部分,并為其他部分?jǐn)U展足夠的內(nèi)存。在CAN消息中以動(dòng)態(tài)且連續(xù)的方式分配每個(gè)部分(按照上圖順序);但是為了避免超出RAM的風(fēng)險(xiǎn)并且出于可靠性的原因,沒(méi)有將特定的開(kāi)始和結(jié)束地址分配給每個(gè)部分。

          FDCAN外設(shè)可以配置三種傳輸機(jī)制:Tx buffer ,Tx queue 和 Tx FIFO并可以通過(guò)Rx buffer 和 Rx FIFO 接收。它們配置有起始地址偏移量和要存儲(chǔ)的存儲(chǔ)元素。起始地址是在配置中預(yù)定義的(0到2560),用戶(hù)必須確保每個(gè)內(nèi)存空間中的元素?cái)?shù)量不會(huì)導(dǎo)致它們重疊。

          注:消息的接收和發(fā)送意味著在RAM級(jí)別存儲(chǔ)“元素”。這個(gè)“元素”僅包含標(biāo)識(shí)符,DLC,控制位(ESI,XTD,RTR,BRS,F(xiàn)DF),數(shù)據(jù)字段和特定的發(fā)送/接收位字段進(jìn)行控制。CAN消息的其余位會(huì)自動(dòng)由硬件處理而不保存在RAM中 。

          用于控制接收的特定位字段是濾波器索引,可接受的不匹配幀和Rx時(shí)間戳。用于傳輸?shù)奶囟ㄎ蛔侄问窍?biāo)記(message marker)和event FIFO控制位。無(wú)論Tx buffer, Tx FIFO, Tx queue 或 Rx buffer 中的每個(gè)元素分配的32bit的數(shù)量是多少,要計(jì)算保留:

          (1)標(biāo)頭信息(兩個(gè)保留的32bit),用于分配標(biāo)識(shí)符,DLC字段,控制位和特定的發(fā)送/接收位字段。
          (2)數(shù)據(jù)(足夠的32bit數(shù)據(jù)個(gè)數(shù))以包含每個(gè)數(shù)據(jù)字段的字節(jié)數(shù)。

          下面的公式確定為每個(gè)元素分配的32bit的數(shù)量:
          元素大小(以字為單位)=標(biāo)頭信息(2個(gè)字)+數(shù)據(jù)(數(shù)據(jù)字段/ 4)

          其中數(shù)據(jù)字段是每條消息的數(shù)據(jù)字節(jié)數(shù)

          如果數(shù)據(jù)字段的范圍是0到8,則每個(gè)元素為數(shù)據(jù)分配2個(gè)字。下表詳細(xì)介紹了必要的“元素”大小,具體取決于數(shù)據(jù)字段范圍

          ?

          有效使用CAN消息RAM的示例。這個(gè)例子假設(shè)配置了FDCAN外設(shè)的應(yīng)用程序:

          (1)發(fā)送帶有專(zhuān)用Tx buffer的32條消息(每個(gè)消息在數(shù)據(jù)字段中包含8個(gè)字節(jié))。
          (2)具有128個(gè)11位過(guò)濾器,用于接收消息。
          (3)接收64條消息,其中每個(gè)消息在專(zhuān)用Rx buffers的數(shù)據(jù)字段中包含64個(gè)字節(jié)。
          (4)接收64條消息,其中每個(gè)消息在Rx FIFO 0的數(shù)據(jù)字段中包含64個(gè)字節(jié)。

          ?

          在此示例中,RAM中的分配按以下順序進(jìn)行:
          (1)在ID-11位部分分配128個(gè)字。
          (2)保留1152個(gè)字用于接收Rx FIFO 0部分中的元素。
          (3)保留1152個(gè)字,用于接收Rx緩沖區(qū)中的元素。
          (4)為發(fā)送緩沖區(qū)中發(fā)送的元素保留128個(gè)字。

          由于采用了動(dòng)態(tài)分配,并且不對(duì)未使用的段進(jìn)行任何分配,因此整個(gè)內(nèi)存大小有效利用了RAM:在此應(yīng)用程序中分配了所有2560個(gè)字。

          注意:配置后,分配的地址范圍初始化為零

          大多數(shù)STM32設(shè)備支持一個(gè)以上的FDCAN外設(shè)來(lái)滿足所有應(yīng)用程序要求。在這種情況下,重要的是要說(shuō)RAM是在不同外設(shè)之間共享的。用戶(hù)可以劃分各種外設(shè)上的RAM(每個(gè)外設(shè)的大小通過(guò)指示其起始偏移地址來(lái)選擇)。下圖顯示了使用多個(gè)FDCAN實(shí)例的CAN消息RAM的示例。這該示例假定用戶(hù)將CAN消息RAM分為兩個(gè)外設(shè):第一個(gè)外設(shè)的大小為第二個(gè)外設(shè)的兩倍。

          ?

          五、RAM過(guò)濾區(qū)

          FDCAN外設(shè)可以配置兩套驗(yàn)收濾波器:一套用于標(biāo)準(zhǔn)標(biāo)識(shí)符,一種是擴(kuò)展標(biāo)識(shí)符,用于存儲(chǔ)或拒絕接收到的消息。128個(gè)過(guò)濾元素可以配置用來(lái)配置128個(gè)11bit標(biāo)準(zhǔn)ID和64個(gè)過(guò)濾元素可以用來(lái)配置64個(gè)29bit擴(kuò)展ID。11位過(guò)濾器部分的起始地址通過(guò)FDCAN_SIDFC寄存器中的FLSSA [13:0]位進(jìn)行配置,并且通過(guò)FDCAN_XIDFC寄存器中的FLESA [13:0]配置29位濾波器部分。下圖顯示了CAN消息RAM的一部分,其中包含過(guò)濾器元件的數(shù)量及其開(kāi)始位置地址。

          ?

          可以將這些過(guò)濾器分配給Rx FIFO 0/1或?qū)S玫腞x buffers。FDCAN執(zhí)行接受過(guò)濾,它總是從過(guò)濾器元素#0開(kāi)始,然后遍歷過(guò)濾器列表以找到匹配項(xiàng)元素。驗(yàn)收過(guò)濾在第一個(gè)匹配元素處停止,而隨后的過(guò)濾元素不在針對(duì)此消息進(jìn)行了檢索。因此,配置過(guò)濾器元素的順序?qū)^(guò)濾性能有很重要的影響。用戶(hù)選擇啟用或禁用每個(gè)過(guò)濾器元素,并可以配置每個(gè)元素以接受或拒絕過(guò)濾。每個(gè)過(guò)濾器元素可以配置為:

          (1)范圍過(guò)濾器(Range filter):該過(guò)濾器匹配標(biāo)識(shí)符在兩個(gè)ID定義的范圍內(nèi)的所有消息。
          (2)專(zhuān)用ID的過(guò)濾器(Filter for dedicated IDs):可以將過(guò)濾器配置為匹配一個(gè)或兩個(gè)特定的標(biāo)識(shí)符。
          (3)經(jīng)典位屏蔽過(guò)濾器(Classic bit mask filter):通過(guò)對(duì)接收到的標(biāo)識(shí)符的位進(jìn)行屏蔽來(lái)匹配標(biāo)識(shí)符組。第一個(gè)ID配置為消息ID過(guò)濾器,第二個(gè)ID為過(guò)濾器屏蔽。過(guò)濾器屏蔽的每個(gè)零位屏蔽已配置的ID過(guò)濾器的相應(yīng)位位置。

          注:如果所有位均等于1,則僅當(dāng)接收到的消息ID和消息ID過(guò)濾器相同時(shí),才會(huì)發(fā)生匹配。如果所有掩碼位均等于0,所有消息ID均匹配。

          高優(yōu)先級(jí)消息

          當(dāng)收到高優(yōu)先級(jí)消息時(shí),F(xiàn)DCAN可以通知用戶(hù)。此通知可用于監(jiān)視傳入的高優(yōu)先級(jí)消息的狀態(tài)并啟用對(duì)這些元素的快速訪問(wèn)。FDCAN在消息過(guò)濾器的幫助下檢測(cè)到高優(yōu)先級(jí)消息。過(guò)濾器元素提供以下內(nèi)容與高優(yōu)先級(jí)郵件相關(guān)的設(shè)置:

          (1)設(shè)置優(yōu)先級(jí)并在過(guò)濾器匹配的情況下存儲(chǔ)在FIFO 0/1中:如果此消息過(guò)濾器匹配,則FDCAN通知高優(yōu)先級(jí)消息到達(dá)的信息,并將元素存儲(chǔ)在Rx FIFO 0/1中。
          (2)如果過(guò)濾器匹配,則設(shè)置優(yōu)先級(jí):如果此消息過(guò)濾器匹配,則FDCAN會(huì)通知有關(guān)高優(yōu)先級(jí)的信息消息到達(dá),但不存儲(chǔ)元素。

          接收過(guò)濾流程圖:
          ?

          舉例說(shuō)明:
          為了說(shuō)明可以使用的不同類(lèi)型的過(guò)濾器以及每種類(lèi)型的結(jié)果,我們假設(shè)用戶(hù)想要配置FDCAN:

          (1)拒絕所有標(biāo)識(shí)符在[0x16到0x20]范圍內(nèi)的消息
          (2)接受所有標(biāo)識(shí)符等于0x15或0x120的消息,并將它們存儲(chǔ)在FIFO 1中
          (3)接受標(biāo)識(shí)符等于0x130的消息并將其存儲(chǔ)在Rx緩沖區(qū)索引4中
          (4)接受具有與以下內(nèi)容相對(duì)應(yīng)的標(biāo)識(shí)符的消息:
          –bit[10..6] = 0b111 00
          –bit[5..4] = 不管,任意值
          –bit[3..0] = 0b00000

          在這種情況下,必須將過(guò)濾器配置為經(jīng)典位屏蔽過(guò)濾器,因?yàn)榭山邮艿臉?biāo)識(shí)符對(duì)應(yīng)于0b11100XX0000(其中x可以是0或1中的任何值)。可接受的標(biāo)識(shí)符是:
          – 0b111 0000 0000(0x700)
          – 0b111 0001 0000(0x710)
          – 0b111 0010 0000(0x720)
          – 0b111 0011 0000(0x730)

          基本過(guò)濾器ID可以是0x700、0x710、0x720、0x730中的任何值。屏蔽過(guò)濾器ID等于0b111 1100 1111(0x7CF)。下表介紹了標(biāo)準(zhǔn)11位消息ID過(guò)濾器的不同配置,如上面的例子。每個(gè)標(biāo)準(zhǔn)過(guò)濾器元素包含:

          (1)SFT位(標(biāo)準(zhǔn)過(guò)濾器類(lèi)型)
          (2)SFEC位(標(biāo)準(zhǔn)過(guò)濾器元素配置)。
          (3)SFID1位(標(biāo)準(zhǔn)過(guò)濾器ID1)
          (4)SFID2位(標(biāo)準(zhǔn)過(guò)濾器ID2)

          ?

          第一個(gè)過(guò)濾器配置為拒絕ID為[0x16 ... 0x20]范圍內(nèi)的消息。
          第二個(gè)過(guò)濾器配置為將ID等于雙ID 0x15或0x120的消息存儲(chǔ)在Rx FIFO 1中。
          第三過(guò)濾器被配置為將ID等于0x130的消息存儲(chǔ)在Rx緩沖區(qū)索引4中。

          注意:如果將SFEC配置為“存儲(chǔ)到"Rx buffer”,則將忽略SFT的配置。驗(yàn)收過(guò)濾器停在第一次匹配。因此,篩選器的順序很重要。本示例以與用戶(hù)配置擴(kuò)展過(guò)濾器相同的方式配置標(biāo)準(zhǔn)過(guò)濾器(請(qǐng)參閱產(chǎn)品數(shù)據(jù)表以了解更多詳細(xì)信息)。FDCAN的眾多過(guò)濾器可能性允許在硬件中進(jìn)行復(fù)雜的消息過(guò)濾,這使得軟件過(guò)濾冗余并節(jié)省CPU資源。


          六、接收區(qū)

          Rx FIFO 0和Rx FIFO 1
          可以在CAN消息RAM中配置兩個(gè)Rx FIFO。每個(gè)Rx FIFO部分最多可存儲(chǔ)64個(gè)元素。每個(gè)元素存儲(chǔ)在一個(gè)Rx FIFO元素中。可以通過(guò)FDCAN_RXESC寄存器分別為每個(gè)Rx FIFO配置Rx FIFO元素的大小。
          Rx FIFO元素大小定義了可以存儲(chǔ)一個(gè)接收元素的數(shù)據(jù)字段字節(jié)數(shù)。一個(gè)大小Rx FIFO元素由前面RAM管理中指定的公式定義。

          標(biāo)頭信息包含標(biāo)識(shí)符,DLC字段,控制位和位字段(過(guò)濾器索引,可接受的不匹配幀,Rx時(shí)間戳)。通過(guò)FDCAN_RXESC寄存器中的F1DS [2:0]字段配置元素大小后,Rx FIFO 1的元素個(gè)數(shù)和起始地址必須分別通過(guò)FDCAN_RXF1C寄存器中的F1S [6:0]和F1SA [13:0]進(jìn)行配置。下圖顯示了CAN消息RAM上的Rx FIFO部分,其中包含可以支持和每個(gè)部分的開(kāi)始地址。

          ?

          Rx FIFO的起始地址是第一個(gè)Rx FIFO元素的第一個(gè)字的地址。收到的元素通過(guò)匹配過(guò)濾的數(shù)據(jù)將根據(jù)匹配的過(guò)濾器元素存儲(chǔ)在適當(dāng)?shù)腞x FIFO中。如果Rx FIFO已滿,則可以根據(jù)兩種不同模式來(lái)處理新到達(dá)的元素:

          (1)阻塞模式:這是Rx FIFO的默認(rèn)操作模式,沒(méi)有其他元素寫(xiě)入RxFIFO,直到至少一個(gè)元素已被讀出。
          (2)覆蓋模式:Rx FIFO中接受的新元素將覆蓋Rx FIFO中最舊(最先接收的數(shù)據(jù))的元素并且FIFO的put和get索引加1。

          要從Rx FIFO讀取元素,CPU必須執(zhí)行以下步驟:

          (1)讀取寄存器FDCAN_RXF1S以了解Rx FIFO的狀態(tài)。
          (2)按照以下公式計(jì)算RAM中最舊的元素的地址:

          Oldest element address = CAN_message_RAM_base_address + FDCAN_RXF1C.F1SA (start address) + FDCAN_RXF1S.F1GI (get Index) x Rx FIFO_element_size.

          (3)從計(jì)算出的地址中讀取元素。

          CPU從Rx FIFO讀取一個(gè)元素或一系列元素后,它必須確認(rèn)讀取。確認(rèn)后,F(xiàn)DCAN可以將相應(yīng)的Rx FIFO緩沖區(qū)重新用于新元素。為了確認(rèn)一個(gè)或多個(gè)元素,則CPU必須將從Rx FIFO讀取的最后一個(gè)元素的緩沖區(qū)索引寫(xiě)入FDCAN_RXF1A寄存器。結(jié)果,F(xiàn)DCAN更新了FIFO填充級(jí)別和get索引。

          RX FIFO流程:

          ?

          Rx FIFO 0和Rx FIFO 1具有相同的寄存器,它們的名稱(chēng)有意義,方法是更改每次的FIFO數(shù)量。

          專(zhuān)用的Rx buffer

          FDCAN支持多達(dá)64個(gè)專(zhuān)用Rx buffers。每個(gè)專(zhuān)用的Rx buffers可以存儲(chǔ)一個(gè)元素。專(zhuān)用Rx buffers的大小可以通過(guò)FDCAN_RXESC寄存器進(jìn)行配置。Rx buffers大小定義可以存儲(chǔ)多少個(gè)接收元素的數(shù)據(jù)字段字節(jié)。專(zhuān)用Rx buffers的大小由前面RAM組織中描述的公式定義。

          通過(guò)FDCAN_RXESC寄存器中的RBDS [2:0]字段配置元素大小后,啟動(dòng)必須通過(guò)FDCAN_RXBC寄存器中的RBSA [13:0]字段配置地址。下圖顯示了CAN消息RAM上的Rx buffers部分,其中有可以支持的最大數(shù)量的Rx buffers元素和起始地址。

          ?

          當(dāng)將元素存儲(chǔ)在專(zhuān)用Rx緩沖區(qū)中時(shí),F(xiàn)DCAN通過(guò)FDCAN_IR寄存器的DRX位設(shè)置中斷標(biāo)志以及新數(shù)據(jù)標(biāo)志FDCAN_NDAT1或FDCAN_NDAT2寄存器中的相應(yīng)位。當(dāng)FDCAN_NDAT1 / 2中的位置1時(shí),相應(yīng)的Rx緩沖區(qū)將被鎖定(不會(huì)被新元素覆蓋),并且相應(yīng)的過(guò)濾器不匹配。讀取元素后,CPU必須將相應(yīng)的位復(fù)位FDCAN_NDAT1 / 2,以解鎖相應(yīng)的Rx緩沖區(qū)。

          要從專(zhuān)用Rx緩沖區(qū)讀取元素,CPU必須執(zhí)行以下步驟:
          (1)檢查FDCAN_NDAT1 / 2中的位,以了解是否有新元素到達(dá)專(zhuān)用Rx緩沖區(qū)。
          (2)計(jì)算CAN消息RAM中元素的地址,如以下公式所示:

          Reference Rx buffer address = CAN_message_RAM_base_address + FDCAN_RXBC.RBSA (startaddress) + dedicated Rx buffer index x Rx_Buffer_element_size.

          (3)從計(jì)算出的地址中讀取消息。

          過(guò)濾器元素可以引用Rx緩沖區(qū)索引(0到63)作為接收元素的目的地。如果相應(yīng)的過(guò)濾器匹配,則FDCAN僅執(zhí)行對(duì)引用的Rx緩沖區(qū)位置的寫(xiě)操作。換一種說(shuō)法,F(xiàn)DCAN不會(huì)寫(xiě)入未引用的Rx緩沖區(qū)位置。


          舉例 :Rx緩沖區(qū)編號(hào)與Rx緩沖區(qū)索引的相關(guān)配置示例

          為了配置過(guò)濾器元素以引用Rx緩沖區(qū)索引60,必須至少配置61個(gè)Rx緩沖區(qū)。注意:用戶(hù)必須選擇最佳配置,以避免浪費(fèi)RAM。下圖顯示了簡(jiǎn)化Rx緩沖區(qū)操作的流程圖

          ?

          Rx FIFO和專(zhuān)用Rx buffer的不同

          如前面所述,F(xiàn)DCAN具有兩種機(jī)制:專(zhuān)用Rx buffer或Rx FIFO 0/1可以將配置為存儲(chǔ)接收到的元素。下表描述了專(zhuān)用Rx緩沖區(qū)和Rx FIFO之間的差異。

          ?


          七、發(fā)送區(qū)

          Tx event FIFO section

          通過(guò)使用Tx event ?FIFO,CPU獲得有關(guān)已發(fā)送元素的以下信息:
          (1)元素傳輸?shù)捻樞?
          (2)每個(gè)元素傳輸幀的本地時(shí)間。

          FDCAN提供發(fā)送event FIFO。該Tx event FIFO的使用是可選的。FDCAN在CAN總線上傳輸了一個(gè)元素成功后,它可以將消息ID和時(shí)間戳存儲(chǔ)在Tx event FIFO中元素。Tx event ?FIFO元素是一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)已傳輸消息。Tx可以通過(guò)FDCAN_TXEFC寄存器配置事件FIFO(Tx事件FIFO配置)。FIFO可以存儲(chǔ)最多32個(gè)元素。下圖顯示了存儲(chǔ)Tx事件FIFO元素的CAN消息RAM的示例EFSA [13:0]字段包含起始地址。

          ?

          CAN消息RAM中的Tx事件FIFO元素的地址由以下公式確定:

          Tx event FIFO element address = CAN_message_RAM_base_address + FDCAN_TXEFC.EFSA (startaddress) + FDCAN_TXEFS.EFGI (get index) x Tx_event_FIFO_element_size

          為了將 Tx event鏈接到Tx event FIFO元素,將來(lái)自已發(fā)送Tx buffer的消息標(biāo)記復(fù)制到Tx event FIFO 元素。

          僅當(dāng)Tx buffer元素中的EFC位(存儲(chǔ)Tx事件)等于1時(shí),事件才存儲(chǔ)在Tx event FIFO中。當(dāng)Tx event FIFO已滿時(shí),不會(huì)再有其他元素寫(xiě)入Tx event FIFO,直到至少有一個(gè)元素被寫(xiě)入為止。讀出后,Tx event FIFO獲取索引增加。如果在Tx event FIFO已滿時(shí)發(fā)生Tx event,則這事件被丟棄。為避免Tx event FIFO溢出,可以使用Tx event FIFO水印。CPU從Tx event FIFO讀取一個(gè)元素或元素序列后,CPU必須確認(rèn)閱讀。因此,它會(huì)通過(guò)FDCAN_TXEFA寄存器EFAI [4:0]字段寫(xiě)入從Tx event FIFO讀取的最后一個(gè)元素的索引。

          Tx buffer section

          為了使外設(shè)傳輸元素,該元素在定義的存儲(chǔ)空間內(nèi),并且傳輸開(kāi)始。傳輸?shù)脑卮鎯?chǔ)在Tx buffer中,用戶(hù)可以選擇使用的機(jī)制:專(zhuān)用的Tx buffer或Tx queue或Tx FIFO。FDCAN最多支持32個(gè)元素。每個(gè)元素存儲(chǔ)標(biāo)識(shí)符,DLC,控制位(ESI,XTD,RTR,BRS,F(xiàn)DF),數(shù)據(jù)字段,位字段消息標(biāo)記和事件FIFO控制位,僅一條消息。

          在RAM上的分配按以下順序進(jìn)行:如果應(yīng)用程序使用了專(zhuān)用的Tx buffer,則它們?cè)赥x FIFO和Tx queue.之前分配。用戶(hù)只能在同一隊(duì)列中選擇Tx queue或Tx FIFO應(yīng)用程序:FDCAN不支持它們的組合。

          如下圖所示,Tx buffer的起始地址是通過(guò)FDCAN_TXBC寄存器的TBSA [13:0]字段配置

          ?

          如前一節(jié)所述,RAM中的分配是以動(dòng)態(tài)且連續(xù)的方式進(jìn)行的,因此,如果用戶(hù)未配置Dedicated Tx buffer。Tx buffer部分僅包含配置的Tx queue 或 Tx FIFO,并將其存儲(chǔ)在起始段地址中。

          Dedicated Tx buffers

          專(zhuān)用Tx buffer的數(shù)量是通過(guò)FDCAN_TXBC寄存器中的NTDB [5:0]字段配置的。每個(gè)專(zhuān)用Tx buffer配置有特定的標(biāo)識(shí)符,以?xún)H存儲(chǔ)一個(gè)元素。傳輸是通過(guò)FDCAN_TXBAR寄存器的添加請(qǐng)求。所請(qǐng)求的消息在外部進(jìn)行仲裁的CAN總線上,并根據(jù)最低標(biāo)識(shí)符(最高優(yōu)先級(jí))發(fā)送出去。專(zhuān)用Tx buffer的內(nèi)存要求取決于Tx buffer元素的大小。Tx buffer元素大小定義了屬于Tx buffer的數(shù)據(jù)字節(jié)數(shù)。使用以下公式計(jì)算CAN消息RAM中專(zhuān)用Tx緩沖區(qū)的地址:

          Dedicated Tx buffer address = CAN_message_RAM_base_address + FDCAN_TXBC[TBSA] (start address)+ Tx_buffer_index x Tx_buffer_element_size

          Tx buffer操作機(jī)制

          ?

          如果多個(gè)專(zhuān)用Tx buffer配置了相同的ID,則具有第一個(gè)傳輸請(qǐng)求的Tx buffer首先發(fā)送。

          Tx FIFO

          通過(guò)將0寫(xiě)入FDCAN_TXBC中的TFQM位來(lái)配置Tx FIFO操作。元素存儲(chǔ)在通過(guò)get索引中FDCAN_TXFQS的TFG1 [4:0]字段,從get索引引用的元素開(kāi)始發(fā)送Tx FIFO。每次發(fā)送后,get索引都會(huì)循環(huán)遞增,直到Tx FIFO緩沖區(qū)為空。Tx FIFO可以按照已將元素寫(xiě)入Tx FIFO的順序傳輸元素。傳輸與各個(gè)標(biāo)識(shí)符的優(yōu)先級(jí)無(wú)關(guān),因?yàn)镕IFO首先發(fā)送出去。

          FDCAN通過(guò)FDCAN_TXFQS中的TFFL [5:0]字段計(jì)算Tx FIFO緩沖區(qū)的空閑級(jí)別,作為get和put索引之間的差值(get和set索引之間有兩種機(jī)制遞增每個(gè)事務(wù)以指示下一個(gè)事務(wù)RAM上要讀取或?qū)懭朐氐木彌_區(qū)位置)。該值指示可用(空閑)Tx FIFO的數(shù)量元素。

          必須從放置索引引用的Tx緩沖區(qū)開(kāi)始,將新的發(fā)送元素通過(guò)FDCAN_TXFQS中的TFAQPI [4:0]字段指示寫(xiě)入Tx FIFO。CAN消息RAM中的下一個(gè)空閑Tx FIFO緩沖區(qū)的地址是使用以下公式計(jì)算的:

          Next free Tx FIFO buffer address = CAN_message_RAM_base_address + FDCAN_TXBC.TBSA (startaddress) + FDCAN_TXFQS.TFQPI (put Index) x Tx_FIFO_element_size

          Tx FIFO機(jī)制

          ?

          Tx queue

          通過(guò)將1寫(xiě)入FDCAN_TXBC中的TFQM位來(lái)配置Tx隊(duì)列操作。Tx中存儲(chǔ)的元素從具有最低標(biāo)識(shí)符(最高優(yōu)先級(jí))的Tx隊(duì)列緩沖區(qū)開(kāi)始傳輸隊(duì)列。與專(zhuān)用Tx緩沖區(qū)相比,RAM上的位置是自動(dòng)動(dòng)態(tài)管理的,因此消息標(biāo)識(shí)符不固定為預(yù)定義的Tx緩沖區(qū)索引。

          新消息必須寫(xiě)入到放置索引引用的Tx隊(duì)列緩沖區(qū)中。周期性添加請(qǐng)求將put索引遞增到下一個(gè)空閑Tx隊(duì)列緩沖區(qū)。FDCAN_TXFQS中的TFQF位設(shè)置為1表示Tx隊(duì)列已滿。在至少一個(gè)以下元素之前,不得將其他元素寫(xiě)入Tx隊(duì)列中。發(fā)送請(qǐng)求的元素或取消掛起的傳輸請(qǐng)求。Tx隊(duì)列緩沖區(qū)的內(nèi)存要求取決于屬于Tx隊(duì)列的數(shù)據(jù)字節(jié)數(shù)元素。CAN消息RAM中下一個(gè)可用的空閑Tx隊(duì)列緩沖區(qū)的地址可以通過(guò)以下方式計(jì)算:

          Next free Tx queue buffer address = CAN_message_RAM_base_address + FDCAN_TXBC.TBSA (startaddress) + FDCAN_TXFQS.TFQPI (put index) x Tx_Buffer_element_size

          Tx queue機(jī)制

          ?

          dedicated Tx buffer, Tx FIFO and Tx queue的區(qū)別

          ?

          靈活的傳輸配置

          高效的FDCAN支持混合配置,以實(shí)現(xiàn)更大的傳輸靈活性并采取最佳措施,每種機(jī)制都有好處。支持的混合配置是專(zhuān)用的Tx緩沖區(qū)+ Tx FIFO以及專(zhuān)用的Tx緩沖區(qū)+ Tx隊(duì)列。

          dedicated Tx buffers and Tx FIFO混合配置

          可以使用混合配置來(lái)配置CAN消息RAM的Tx緩沖區(qū)部分,其中CAN消息RAM中的Tx緩沖區(qū)部分可細(xì)分為一組專(zhuān)用Tx緩沖區(qū)和一個(gè)Tx FIFO。專(zhuān)用Tx緩沖區(qū)的數(shù)量是通過(guò)FDCAN_TXBC中的NDTB [5:0]配置的。Tx緩沖區(qū)的數(shù)量通過(guò)FDCAN_TXBC中的TFQS [5:0]配置分配給Tx FIFO的地址。

          Tx處理程序使用activated transmission request 和the oldest pending掃描所有專(zhuān)用Tx緩沖區(qū)get索引引用的Tx FIFO緩沖區(qū)。具有最低標(biāo)識(shí)符的緩沖區(qū)將獲得最高優(yōu)先級(jí),并且是接下來(lái)傳送。下圖說(shuō)明了使用混合專(zhuān)用Tx緩沖區(qū)和Tx FIFO的用例

          ?

          在此示例中,元素按以下順序發(fā)送(假設(shè)所有專(zhuān)用Tx緩沖區(qū)請(qǐng)求已啟用):

          1. Tx buffer 3 (identifier = 1: it is the highest priority between all other dedicated Tx buffers and it has a higher priority than the oldest pending Tx FIFO: Tx buffer 7)
          2. Tx buffer 0 (identifier = 3: it is the highest priority between all other dedicated Tx buffers and it has higher priority than the oldest pending Tx FIFO: Tx buffer 7)
          3. Tx buffer 7 (because it is the oldest pending Tx FIFO with identifier =4 and has higher priority between all dedicated Tx buffers)
          4. Tx buffer 8 (because it is the oldest pending Tx FIFO with identifier =2 and has the highest priority between all dedicated Tx buffers)
          5. Tx buffer 4 (identifier = 8: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)
          6. Tx buffer 2 (identifier = 12: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)
          7. Tx buffer 1 (identifier = 15: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)
          8. Tx buffer 5 (because it is the only pending dedicated Tx buffer)

          dedicated Tx buffers and Tx queue混合配置

          可以使用混合配置來(lái)配置CAN消息RAM的Tx buffer,其中CAN消息RAM中的“ Tx緩沖區(qū)”部分可細(xì)分為一組專(zhuān)用Tx buffer和一個(gè)Tx queue。通過(guò)FDCAN_TXBC中的NDTB [5:0]配置專(zhuān)用Tx buffer的數(shù)量和Tx queue的數(shù)量緩沖區(qū)是通過(guò)FDCAN_TXBC中的TFQS [5:0]配置的。Tx處理程序掃描具有激活的傳輸請(qǐng)求的所有專(zhuān)用Tx緩沖區(qū)和Tx隊(duì)列緩沖區(qū)。標(biāo)識(shí)符最低的緩沖區(qū)獲得最高優(yōu)先級(jí),然后發(fā)送。下圖說(shuō)明了使用混合專(zhuān)用Tx緩沖區(qū)和Tx隊(duì)列的用例。

          ?

          在此示例中,元素按以下順序發(fā)送(假設(shè)所有專(zhuān)用Tx緩沖區(qū)請(qǐng)求已啟用):
          1. Tx buffer 3 (identifier = 1: it is the highest priority between all other dedicated Tx buffers and it has a higher priority than the oldest pending Tx FIFO: Tx buffer 7)
          2. Tx buffer 0 (identifier = 3: it is the highest priority between all other dedicated Tx buffers and it has higher priority than the oldest pending Tx FIFO: Tx buffer 7)
          3. Tx buffer 7 (because it is the oldest pending Tx FIFO with identifier =4 and has higher priority between all dedicated Tx buffers)
          4. Tx buffer 8 (because it is the oldest pending Tx FIFO with identifier =2 and has the highest priority between all dedicated Tx buffers)
          5. Tx buffer 4 (identifier = 8: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)
          6. Tx buffer 2 (identifier = 12: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)
          7. Tx buffer 1 (identifier = 15: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)
          8. Tx buffer 5 (because it is the only pending dedicated Tx buffer)


          不支持帶有Tx FIFO和Tx隊(duì)列的混合配置。

          dedicated buffer + Tx FIFO 和 Tx buffer + Tx queue的區(qū)別如下:

          ?

          在Tx FIFO + Tx隊(duì)列中,元素在“添加到RAM”操作之后立即變?yōu)閽炱馉顟B(tài)。


          八、測(cè)試模式

          在FDCAN的操作模式下,除了正常操作外,還有幾種測(cè)試模式可用。那里測(cè)試模式只能用于生產(chǎn)測(cè)試或自測(cè)以及校準(zhǔn)單元。必須將FDCAN_CCCR中的TEST位設(shè)置為1,以允許對(duì)FDCAN測(cè)試寄存器和存儲(chǔ)器的寫(xiě)訪問(wèn)。測(cè)試模式和功能的配置。FDCAN以下列模式之一工作:
          (1)限制操作模式Restricted-operation mode
          (2)總線監(jiān)控模式Bus-monitoring mode
          (3)外部環(huán)回模式External loop-back mode
          (4)內(nèi)部環(huán)回模式Internal loop-back mode


          (1)限制操作模式Restricted-operation mode

          在受限操作模式下,F(xiàn)DCAN能夠:
          --接收數(shù)據(jù)幀
          --接收遠(yuǎn)程幀
          --確認(rèn)有效幀

          該模式不支持:
          --數(shù)據(jù)幀發(fā)送
          --遠(yuǎn)程幀發(fā)送
          --活動(dòng)錯(cuò)誤幀或過(guò)載幀發(fā)送

          通過(guò)FDCAN_CCCR中的ASM位將FDCAN設(shè)置為受限操作模式。當(dāng)Tx handler 無(wú)法從CAN讀取消息RAM準(zhǔn)時(shí)或時(shí)鐘校準(zhǔn)激活時(shí),將自動(dòng)進(jìn)入受限操作模式。在這種模式下,應(yīng)用程序測(cè)試不同的比特率,并在應(yīng)用程序收到有效的幀之后退出受限操作模式。下圖說(shuō)明了在受限操作模式下FDCAN_TX和FDCAN_RX引腳的連接

          ?

          注:只要FDCAN處于受限操作模式,F(xiàn)DCAN_TX引腳就處于隱性狀態(tài)。顯性位被傳輸,以此確認(rèn)接收到有效幀。


          (2)總線監(jiān)控模式Bus-monitoring mode

          為了分析總線上的通信量而又不受主要位傳輸?shù)挠绊懀脩?hù)可以設(shè)置FDCAN_CCCR中的MON位,可以在總線監(jiān)視模式下使用FDCAN。在總線監(jiān)視模式下,F(xiàn)DCAN能夠:
          --接收有效的數(shù)據(jù)幀
          --接收有效的遠(yuǎn)程幀

          該模式不支持:
          --傳輸開(kāi)始
          --確認(rèn)有效幀(與受限操作模式不同)

          在總線監(jiān)視模式下,F(xiàn)DCAN僅在總線上發(fā)送隱性位。下圖顯示了總線監(jiān)視模式下FDCAN_TX和FDCAN_RX引腳的連接。

          ?


          (3)外部環(huán)回模式External loop-back mode

          提供此模式用于硬件自檢。用戶(hù)可以通過(guò)以下方式將FDCAN設(shè)置為外部環(huán)回模式:將1寫(xiě)入FDCAN_TEST中的LBCK位,并將0寫(xiě)入FDCAN_CCCR中的MON位。FDCAN對(duì)待自己的發(fā)送的消息作為已接收的消息,如果它們通過(guò)Rx FIFO中的接受過(guò)濾,則將其存儲(chǔ)。為了獨(dú)立于外部信號(hào),F(xiàn)DCAN忽略確認(rèn)錯(cuò)誤(隱性位在確認(rèn)插槽中采樣)。FDCAN實(shí)現(xiàn)內(nèi)部TX和RX連接。

          下圖顯示了外部環(huán)回模式下的FDCAN_TX和FDCAN_RX引腳的連接。

          ?

          (4)內(nèi)部環(huán)回模式Internal loop-back mode

          提供此模式用于硬件自檢。用戶(hù)可以通過(guò)以下方式將FDCAN設(shè)置為內(nèi)部環(huán)回模式:向FDCAN_TEST中的LBCK位寫(xiě)入1,并向FDCAN_CCCR中的MON位寫(xiě)入1。可以測(cè)試FDCAN,而不會(huì)影響連接到FDCAN_TX和FDCAN_RX的正在運(yùn)行的CAN系統(tǒng)針腳。FDCAN_RX引腳與FDCAN斷開(kāi)連接,并且FDCAN_TX引腳保持隱性。

          下圖顯示了內(nèi)部環(huán)回模式下FDCAN_TX和FDCAN_RX引腳的連接

          ?


          收發(fā)器延遲補(bǔ)償

          在采樣點(diǎn),所有發(fā)送器都檢查先前發(fā)送的位是否被正確采樣。這需要一種機(jī)制來(lái)檢查問(wèn)題并檢測(cè)其他節(jié)點(diǎn)錯(cuò)誤幀。由于發(fā)射器看到了自己的發(fā)送位由收發(fā)器環(huán)路延遲而延遲,此延遲為T(mén)SEG1設(shè)置了下限,如圖所示。下圖(采樣點(diǎn)之前的時(shí)間段),這也是數(shù)據(jù)比特率的上限。這是引入收發(fā)器延遲補(bǔ)償機(jī)制(TDC)的原因。

          ?

          為了在檢查誤碼時(shí)補(bǔ)償此環(huán)路延遲,定義了一個(gè)輔助采樣點(diǎn)(SSP)。而不是在采樣點(diǎn)完成,而是在SSP中檢查傳輸?shù)奈弧T摍z查的結(jié)果是直到達(dá)下一個(gè)采樣點(diǎn)為止。

          為數(shù)據(jù)階段中發(fā)送的每個(gè)位生成一個(gè)SSP。收發(fā)器不對(duì)稱(chēng)和總線振鈴必須考慮SSP位置,但是沒(méi)有時(shí)鐘容限,因?yàn)槭瞻l(fā)器會(huì)監(jiān)視自己的位置位流。

          通過(guò)將1寫(xiě)入FDCAN_DBTP中的TDC位來(lái)啟用收發(fā)器延遲補(bǔ)償。測(cè)量在數(shù)據(jù)階段開(kāi)始之前(在信號(hào)的下降沿之前)在每個(gè)發(fā)送的FDCAN幀內(nèi)開(kāi)始FDF逐位解析。當(dāng)在示波器的“接收”輸入引腳FDCAN_RX看到該邊沿時(shí),測(cè)量將停止。此測(cè)量的分辨率為1 mtq(最小時(shí)間量)

          下圖顯示了環(huán)路延遲的測(cè)量

          ?

          注1:在仲裁階段,始終禁用延遲補(bǔ)償。SSP位置定義為從FDCAN_TX引腳到FDCAN_RX引腳測(cè)得的延遲之和,加上通過(guò)FDCAN_TDCR中的TDCO [6:0]字段配置的發(fā)送器延遲補(bǔ)償偏移。

          注2:發(fā)送器延遲補(bǔ)償偏移量用于調(diào)整SSP在接收位內(nèi)部的位置。存儲(chǔ)已發(fā)送位的值,直到達(dá)到其SSP,然后將其與實(shí)際接收到的位進(jìn)行比較,如下圖所示,該值表示發(fā)送的比特序列A到K和接收的比特序列AR到KR,以及從SSPA到SSPK的一系列SSP。通過(guò)比較SSBR來(lái)檢查接收到的比特BR與延遲位B1。SSPB的位置在發(fā)送的比特B開(kāi)始之后的特定時(shí)間。特定時(shí)間是測(cè)得的收發(fā)器延遲與配置的SSP偏移之和。

          ?

          根據(jù)博世(Bosch)文檔確定,必須考慮以下邊界條件FDCAN中實(shí)現(xiàn)的發(fā)射機(jī)延遲補(bǔ)償:
          ----從FDCAN_Tx到FDCAN_Rx測(cè)得的延遲與已組態(tài)的發(fā)送器延遲之和在數(shù)據(jù)階段,補(bǔ)償偏移量必須小于六位時(shí)間。
          ----從FDCAN_Tx到FDCAN_Rx測(cè)得的延遲與已組態(tài)的發(fā)送器延遲之和補(bǔ)償偏移不得超過(guò)127 mtq。

          注3:如果總和超過(guò)127 mtq,則最大值(127 mtq)用于發(fā)射機(jī)延遲補(bǔ)償。數(shù)據(jù)階段在CRC分隔符的采樣點(diǎn)結(jié)束,該采樣點(diǎn)停止檢查SSP處的接收位。本文檔的下一部分將說(shuō)明時(shí)鐘校準(zhǔn)單元,并對(duì)其功能和操作進(jìn)行說(shuō)明。

          九、FDCAN時(shí)鐘校準(zhǔn)

          FDCAN支持時(shí)鐘校準(zhǔn)單元(CCU)功能。該功能允許用戶(hù)校準(zhǔn)FDCAN,F(xiàn)DCAN發(fā)送器(主機(jī))接收器(設(shè)備)。例如,當(dāng)FDCAN設(shè)備與主機(jī)的最新比特率。此功能允許用戶(hù)在總線中添加新實(shí)例,并且比特率的存在是未知的。也是在FDCAN接收器沒(méi)有精確石英的情況下很有用(可能導(dǎo)致準(zhǔn)時(shí)錯(cuò)誤)

          CCU介紹:

          時(shí)鐘校準(zhǔn)單元是通過(guò)FDCAN_CCU_CCFG寄存器初始化的,只有當(dāng)兩個(gè)FDCAN_CCCR中的CCE和INIT位設(shè)置為1。僅當(dāng)FDCAN在CAN 2.0模式下運(yùn)行時(shí),才可以使用CCU。當(dāng)FDCAN_CCU_CCFG中的BCC = 1時(shí),時(shí)鐘校準(zhǔn)被繞過(guò)。下圖顯示了旁路操作。

          ?

          CCU操作條件:僅當(dāng)FDCAN比特率在125 Kbit / s和1 Mbit / s之間時(shí),CCU才能運(yùn)行

          CCU功能說(shuō)明:通過(guò)適配時(shí)鐘分頻器,可以通過(guò)CAN消息對(duì)fdcan_tq_ck(時(shí)間量子時(shí)鐘)進(jìn)行校準(zhǔn),它從fdcan_ker_ck時(shí)鐘生成CAN協(xié)議時(shí)間量tq。

          校準(zhǔn)狀態(tài)機(jī):功能狀態(tài)機(jī)的校準(zhǔn)如下圖所示。

          ?

          基礎(chǔ)校準(zhǔn):

          測(cè)量了從隱性到顯性的兩個(gè)連續(xù)下降沿之間的最小距離。這該措施假設(shè)兩個(gè)CAN位時(shí)間以PLL時(shí)鐘周期計(jì)。每當(dāng)新的時(shí)鐘分頻器通過(guò)FDCAN_CCU_CCFG中的CDIV [3:0]字段找到邊緣之間的較小距離來(lái)更新一次測(cè)量。當(dāng)CAN協(xié)議控制器檢測(cè)到有效的CAN消息時(shí),便完成了校準(zhǔn)

          精確校準(zhǔn):

          校準(zhǔn)狀態(tài)機(jī)通過(guò)計(jì)算以下內(nèi)容來(lái)測(cè)量CAN幀內(nèi)較長(zhǎng)位序列的長(zhǎng)度:fdcan_ker_ck周期數(shù)。該位序列的長(zhǎng)度可以通過(guò)在FDCAN_CCU_CCFG中CFL位配置為32位或64位。精度校準(zhǔn)基于新的時(shí)鐘分頻器值,該值由較長(zhǎng)位序列的測(cè)量。校準(zhǔn)框通過(guò)FDCAN驗(yàn)收過(guò)濾檢測(cè)。過(guò)濾器元素和Rx緩沖區(qū)必須為在FDCAN中配置以識(shí)別和存儲(chǔ)校準(zhǔn)消息。如果fdcan_ker_clk校準(zhǔn)是通過(guò)軟件完成的(請(qǐng)從CALS [1:0]字段中評(píng)估校準(zhǔn)狀態(tài)FDCAN_CCU_CSTAT),必須將FDCAN設(shè)置為受限操作模式,直到校準(zhǔn)完成Precision_Calibrated狀態(tài)(無(wú)幀,無(wú)錯(cuò)誤或過(guò)載標(biāo)志傳輸,無(wú)錯(cuò)誤計(jì)數(shù))。

          注意:收到校準(zhǔn)消息后,必須重新設(shè)置Rx緩沖區(qū)新數(shù)據(jù)標(biāo)志以啟用發(fā)信號(hào)通知。校準(zhǔn)消息的數(shù)據(jù)字段必須至少為1010二進(jìn)制序列,以確保設(shè)備節(jié)點(diǎn)可以進(jìn)入Basic_Calibrated狀態(tài),并且主機(jī)節(jié)點(diǎn)消息得到確認(rèn)。只能在由穩(wěn)定的石英時(shí)鐘控制的主機(jī)節(jié)點(diǎn)發(fā)送的有效CAN幀上執(zhí)行精確校準(zhǔn)。精密校準(zhǔn)必須在預(yù)定義的最大間隔內(nèi)重復(fù)進(jìn)行,并由校準(zhǔn)看門(mén)狗監(jiān)督。


          校準(zhǔn)看門(mén)狗:

          校準(zhǔn)看門(mén)狗是一個(gè)遞減計(jì)數(shù)器,它以Not_Calibrated狀態(tài)開(kāi)始,并監(jiān)視接收到的信號(hào)消息。當(dāng)處于Basic_Calibrated狀態(tài)時(shí),校準(zhǔn)監(jiān)視程序隨每個(gè)收到的消息重新啟動(dòng)。

          注意:如果在校準(zhǔn)看門(mén)狗遞減計(jì)數(shù)到零之前未收到任何消息,則FSM校準(zhǔn)保持不變處于Not_Calibrated狀態(tài)。計(jì)數(shù)器被重新加載,并且基本校準(zhǔn)重新開(kāi)始。進(jìn)入Precision_Calibrated狀態(tài)時(shí),將重新啟動(dòng)校準(zhǔn)看門(mén)狗。在這種狀態(tài)下,校準(zhǔn)看門(mén)狗監(jiān)視收到的石英消息。

          注意:如果FDCAN直到校準(zhǔn)看門(mén)狗都沒(méi)有收到來(lái)自石英控制節(jié)點(diǎn)的消息,當(dāng)計(jì)數(shù)降至零時(shí),F(xiàn)SM校準(zhǔn)將轉(zhuǎn)換回“ Basic_Calibrated”狀態(tài)。

          校準(zhǔn)例子:

          本示例介紹了一個(gè)用例,用于通過(guò)FDCAN主機(jī)(發(fā)送器)校準(zhǔn)FDCAN設(shè)備(接收器)。這以下流程圖說(shuō)明了校準(zhǔn)前通過(guò)FDCAN設(shè)備的步驟

          ?

          校準(zhǔn)成功通過(guò)后,F(xiàn)DCAN設(shè)備準(zhǔn)備好進(jìn)行接收和發(fā)送帶有新FDCAN主機(jī)比特率的消息。

          十、FDCAN相比標(biāo)準(zhǔn)bxCAN的提升

          下表可幫助用戶(hù)簡(jiǎn)化將STM32設(shè)備中的CAN 2.0協(xié)議升級(jí)到CAN-FD協(xié)議的過(guò)程。該表還指定了FDCAN的改進(jìn)。與傳統(tǒng)的BxCAN(基本擴(kuò)展CAN)相比,F(xiàn)DCAN具有許多優(yōu)勢(shì),包括更快的數(shù)據(jù)傳輸速度。速率和數(shù)據(jù)字節(jié)數(shù)的擴(kuò)展,減少了幀開(kāi)銷(xiāo)。總線負(fù)載也可以減少。傳輸和接收中消息數(shù)量的增加要求RAM存儲(chǔ)器的改進(jìn)

          ?

          鑒于BxCAN的兼容性,BxCAN開(kāi)發(fā)人員可以輕松地遷移到FDCAN,因?yàn)镕DCAN可以無(wú)需對(duì)整個(gè)系統(tǒng)設(shè)計(jì)進(jìn)行修訂即可實(shí)施。FDCAN包含所有BxCAN功能,并滿足新應(yīng)用程序的要求。

          原文地址:https://www.cnblogs.com/armfly/p/14550154.html

          ???????????????? ?END ?????????????????

          關(guān)注我的微信公眾號(hào),回復(fù)“加群”按規(guī)則加入技術(shù)交流群。

          歡迎關(guān)注我的視頻號(hào):

          點(diǎn)擊“閱讀原文”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。

          瀏覽 109
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天影视网色欲 | 先锋影音Vs男人资源站 | 北条麻妃中文字幕在线观看 | 国产操逼视 | 噜噜私人影院 |