在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

開啟Cache后UART無法發(fā)送新數(shù)據(jù)

茶話MCU ? 來源:茶話MCU ? 作者:茶話MCU ? 2022-11-23 09:02 ? 次閱讀

有人使用STM32H743做產(chǎn)品開發(fā), DMA 傳輸待發(fā)送的數(shù)據(jù)到 UART 發(fā)送寄存器做后續(xù)UART通信。在開啟D-Cache的情況下,發(fā)現(xiàn)UART沒法發(fā)送更新過的數(shù)據(jù)。

具體應(yīng)用場(chǎng)景是這樣的,源數(shù)據(jù)放在STM32H743片內(nèi)D1域的AXI-SRAM區(qū),數(shù)據(jù)會(huì)不定期地被CPU修改,然后讓DMA將數(shù)據(jù)傳輸?shù)経SART3的發(fā)送寄存器進(jìn)行后續(xù)UART通信。結(jié)合手冊(cè)可以查得USART3位于D2域。[下面截圖來自STM32H7芯片參考手冊(cè)]

6957715a-6ac4-11ed-8abf-dac502259ad0.png

目前開啟了D-Cache/I-Cache。我基于現(xiàn)有場(chǎng)景寫了一段簡(jiǎn)單的如下測(cè)試代碼【編譯環(huán)境使用STM32CubeIDE】:

__attribute__((section(".Source"))) uint8_t Source[5];

uint32_t TimeOut;

uint8_t Variable=0;

696d97c8-6ac4-11ed-8abf-dac502259ad0.png

6987d1e2-6ac4-11ed-8abf-dac502259ad0.png

基于上面測(cè)試代碼,也重現(xiàn)了相同現(xiàn)象。即盡管CPU在不停修改源端數(shù)據(jù),可目的端UART3的TDR寄存器的數(shù)據(jù)總保持0不變。【注:我這里的DMA使用的Memory to Memory方式,并非要一定這樣操作。你完全可以基于UART事件使用Memory to Peripheral的方式。】

699cf540-6ac4-11ed-8abf-dac502259ad0.png

這里排除了其它方面的原因,該現(xiàn)象是因?yàn)殚_啟了D-Cache并使用write back策略而導(dǎo)致的不同主設(shè)備訪問同一內(nèi)存而產(chǎn)生的數(shù)據(jù)不一致的問題。

現(xiàn)在CPU不時(shí)修改AXI-SRAM1指定區(qū)域的數(shù)據(jù),DMA到同一位置讀取數(shù)據(jù)送到UART發(fā)送寄存器。畫個(gè)圖示意下:

69bd7888-6ac4-11ed-8abf-dac502259ad0.png

對(duì)于STM32H743片內(nèi)AXI-SRAM1區(qū)域,其默認(rèn)的存儲(chǔ)屬性為write back及writeallocate。【下圖來自STM32H7參考手冊(cè)】

69d5228a-6ac4-11ed-8abf-dac502259ad0.png

此時(shí)CPU對(duì)該區(qū)域進(jìn)行寫操作發(fā)生Cache分配,數(shù)據(jù)會(huì)先寫到Cache里。要等到Cache重分配或手動(dòng)刷新Cache時(shí)才會(huì)將Cache里的新數(shù)據(jù)寫到RAM內(nèi)存。

這里有三種方案可選用來解決這個(gè)問題:

第一種方案就是,CPU做數(shù)據(jù)更新操作后,對(duì)相應(yīng)存儲(chǔ)區(qū)執(zhí)行Cache清除操作,讓Cache的新數(shù)據(jù)及時(shí)寫到RAM內(nèi)存,即添加下面打紅勾的代碼。

69faf514-6ac4-11ed-8abf-dac502259ad0.png

第二種方案就是針對(duì)CPU修改的數(shù)據(jù)存儲(chǔ)區(qū)進(jìn)行MPU設(shè)置,配置為write through或關(guān)閉該區(qū)域Cacheable特性。下面將其配置為Writethrough屬性。【下面截圖來自ARM相關(guān)技術(shù)手冊(cè)。C:Cacheable,B:Bufferable,S:Shareable】

6a1bc596-6ac4-11ed-8abf-dac502259ad0.png

使用STM32圖形化配置工具CubeMx進(jìn)行MPU相關(guān)配置【參見下圖】:

6a36452e-6ac4-11ed-8abf-dac502259ad0.png

第三種方案,簡(jiǎn)單粗暴且有效,那就是關(guān)閉芯片D-Cache的使用。如果對(duì)開啟D-Cache不在乎或者只是前期功能調(diào)試先關(guān)掉無妨,后面再去調(diào)整也可以。

上面簡(jiǎn)單介紹了在開啟D-Cache情況下,CPU不定期修改Cacheable內(nèi)存數(shù)據(jù),DMA讀取相應(yīng)內(nèi)存而發(fā)生的數(shù)據(jù)不一致問題的解決方案,以供參考。

6a5e537a-6ac4-11ed-8abf-dac502259ad0.png

最后提醒下,當(dāng)我們使用SCB_CleanDCache_by_Addr()函數(shù)清除Cache時(shí),需注意給定地址要遵循32字節(jié)對(duì)齊的原則。【注:上面截圖來自STM32H7Cube庫。】

審核編輯:湯梓紅

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

    關(guān)注

    0

    文章

    129

    瀏覽量

    28772
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1249

    瀏覽量

    102612
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    569

    瀏覽量

    101913
  • STM32H743
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    2050

原文標(biāo)題:開啟Cache后UART無法發(fā)送新數(shù)據(jù)

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ZYNQ進(jìn)階:PL端UART 發(fā)送設(shè)計(jì)案例

    在 ZYNQ進(jìn)階之路2 中我們講解了PL端PWM呼吸燈的設(shè)計(jì),本節(jié)我們講解PL端實(shí)現(xiàn)串口UART發(fā)送設(shè)計(jì); 首先新建一個(gè)串口發(fā)送的工程,工程建立在ZYNQ進(jìn)階之路1中已經(jīng)講述,這里不再累述; 下面
    的頭像 發(fā)表于 11-25 17:26 ?3776次閱讀
    ZYNQ進(jìn)階:PL端<b class='flag-5'>UART</b> <b class='flag-5'>發(fā)送</b>設(shè)計(jì)案例

    STM32h7開啟Cache,串口發(fā)送DMA會(huì)導(dǎo)致中斷觸發(fā)如何解決?

    STM32h7 開啟Cache,串口使用發(fā)送DMA發(fā)送數(shù)據(jù)會(huì)導(dǎo)致中斷觸發(fā)(只
    發(fā)表于 03-12 07:37

    為什么無法使用Lpuart_Uart_Ip_ 發(fā)送任何數(shù)據(jù)回調(diào)中的AsyncSend?

    我已經(jīng)實(shí)現(xiàn)了基于 LPUART 的 DMA ,我可以發(fā)送使用 Lpuart_Uart_Ip_ 接收的數(shù)據(jù)同步發(fā)送 in lpuart_6_callback , 但是,我
    發(fā)表于 04-11 07:51

    cc2530為什么在休眠喚醒無法發(fā)送數(shù)據(jù)

    cc2530為什么在休眠喚醒無法發(fā)送數(shù)據(jù)?contiki系統(tǒng)cc2530上循環(huán)間斷發(fā)送數(shù)據(jù),每
    發(fā)表于 03-30 15:10

    怎么用UART發(fā)送和接收數(shù)據(jù)

    你好。我這里有幾個(gè)RN4871。我對(duì)它們很感興趣,因?yàn)槲铱梢酝耆鎿QMCU,直接使用RN4871,運(yùn)行腳本。改變名稱和波特率沒問題。現(xiàn)在我需要能夠用UART發(fā)送和接收數(shù)據(jù)。用戶點(diǎn)擊電話應(yīng)用程序中
    發(fā)表于 04-20 10:07

    am335x裸機(jī)開啟mmu和cache,ucos2任務(wù)不能調(diào)度如何排查?

    beaglebone 開啟mmu和cache,ucos2卡在 OSStartHighRdy,無法調(diào)度任務(wù),請(qǐng)問如何排查?
    發(fā)表于 01-12 06:41

    CH573 TMOS開啟sleep串口異常怎么解決?

    使用例程包BLE-UART工程修改未開啟sleep前UART0_SendString(PS, 12),串口0發(fā)送數(shù)據(jù)正常不丟
    發(fā)表于 09-07 07:19

    UART 發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)

    STM32 UART 發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)
    發(fā)表于 12-04 15:10 ?0次下載

    關(guān)于UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)問題的詳細(xì)解析-pdf

    STM32 UART_發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)
    發(fā)表于 04-10 11:23 ?3次下載

    UART需要使用DMA發(fā)送嗎 ?

    UART需要使用DMA發(fā)送嗎?
    的頭像 發(fā)表于 03-07 16:57 ?7355次閱讀

    什么是 Cache? Cache讀寫原理

    由于寫入數(shù)據(jù)和讀取指令分別通過 D-Cache 和 I-Cache,所以需要同步 D-Cache 和 I-Cache,即復(fù)制
    發(fā)表于 12-06 09:55 ?3203次閱讀

    如何根據(jù)UART傳輸協(xié)議將數(shù)據(jù)發(fā)送出去呢?

    和接收部分相反,UART發(fā)送數(shù)據(jù)部分是CPU將需要發(fā)送數(shù)據(jù)寫到發(fā)送
    的頭像 發(fā)表于 06-05 15:59 ?3008次閱讀
    如何根據(jù)<b class='flag-5'>UART</b>傳輸協(xié)議將<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>發(fā)送</b>出去呢?

    UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)

    電子發(fā)燒友網(wǎng)站提供《UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié).pdf》資料免費(fèi)下載
    發(fā)表于 08-01 17:57 ?1次下載
    <b class='flag-5'>UART</b><b class='flag-5'>發(fā)送</b><b class='flag-5'>數(shù)據(jù)</b>丟失最后一個(gè)字節(jié)

    UART數(shù)據(jù)幀與發(fā)送

    保持在高電壓電平。為了開始數(shù)據(jù)傳輸,發(fā)送 UART數(shù)據(jù)線從高電平拉到低電平(從 1 到 0)。接收 UART
    的頭像 發(fā)表于 11-09 17:42 ?954次閱讀

    GD32F103C8T6 Uart3無法發(fā)送數(shù)據(jù)

    以用來實(shí)現(xiàn)與其他外設(shè)或者外部設(shè)備的數(shù)據(jù)交互。 然而,在一些情況下,用戶可能會(huì)遇到UART3無法發(fā)送數(shù)據(jù)的問題。在接下來的文章中,我們將深入探
    的頭像 發(fā)表于 01-09 10:57 ?2102次閱讀
    主站蜘蛛池模板: 四虎在线免费视频 | 亚洲一区二区三区网站 | 夜夜bb| 免费人成年激情视频在线观看 | 国产盗摄女厕美女嘘嘘 | 直接看黄的网站 | 亚洲一级特黄特黄的大片 | 亚洲成a人片7777 | 5151hh四虎国产精品 | 操美女在线看 | 色狠狠综合 | 欧洲一级鲁丝片免费 | 中文在线三级中文字幕 | 激情在线视频 | 色女人网 | 1024你懂的国产日韩欧美 | 一区二区三区午夜 | 成人做视频免费 | 天堂网址 | 视频在线观看免费 | 欧美一级欧美一级高清 | 三级黄网 | 成人一级视频 | 天天操天天舔 | 免费 视频| 亚洲午夜久久久久久噜噜噜 | 国产欧美精品一区二区色综合 | 天天操天天摸天天碰 | 农村妇女色又黄一级毛片卡 | 巨大欧美黑人xxxxbbbb | 丁香婷婷综合五月六月 | 免费又黄又硬又大爽日本 | 亚洲国产精品综合久久网络 | 亚洲精品卡1卡二卡3卡四卡 | 欧美八区 | 欧美一级欧美一级高清 | 亚洲国产网| 老色批| 啪啪免费网站视频观看 | h视频免费 | 不卡视频一区二区 |