色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

CM3加載到 ITCM中的固件是否正常

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-22 09:54 ? 次閱讀

前端時(shí)間回來了一塊板子,于是各個(gè)團(tuán)隊(duì)都進(jìn)入了緊張的 Bringup 工作中。

這塊板子上的主芯片是一顆 Arm Cortex M3 + DSP 的異構(gòu)芯片,結(jié)構(gòu)大概是這樣的:

ae4ccc36-06f8-11ed-ba43-dac502259ad0.png

CM3 和 DSP 的固件獨(dú)立存儲(chǔ)在 Flash 中,上電后 CM3 先啟動(dòng),然后 CM3 再把 DSP 的固件從 Flash 中加載到 Sram 中,最后再從 Sram 中拷貝到 DSP 的 ITCM 中,至于為什么不繞過 Sram 直接把 DSP 的固件從 Flash 中讀到 DSP 的 ITCM 中,我們這里先不討論。

Bringup 進(jìn)行到第二天的時(shí)候,負(fù)責(zé) DSP 的同學(xué)反饋說,DSP 的程序加載上去后,始終不能正常運(yùn)行 —— 觀察不到任何正常啟動(dòng)的現(xiàn)象。其實(shí)在 Bringup 剛開始階段,這種情況是經(jīng)常遇到的,我第一反應(yīng)就是,讓這位同學(xué)連上 DSP 的 JTAG 去單步調(diào)試,看到底發(fā)生了什么。

第三天的時(shí)候,我又找這位同學(xué)問了下,現(xiàn)在是什么情況了,這位同學(xué)一臉茫然的說:好奇怪,如果用 DSP 的 JTAG 直接下載固件到 ITCM,就能正常運(yùn)行,通過 Cortex M3 去加載,就不能正常運(yùn)行。聽到這個(gè)差別,我潛意識(shí)的問他:有沒有確認(rèn)過 CM3 加載到 ITCM 中的固件是否正常?這位同學(xué)說應(yīng)該不會(huì)有問題,這套流程他們之前在其他平臺(tái)上都驗(yàn)證過。他們還有一些其他的壞一點(diǎn),準(zhǔn)備優(yōu)先就他們的懷疑點(diǎn)做一些實(shí)驗(yàn)排查,比如 DSP 的cache 啊,復(fù)位控制啊,PLL 頻率啊什么的。

因?yàn)?Bringup 階段事情比較多,我也就沒在追究去忙其他的事情了。

第四天,說所有懷疑的實(shí)驗(yàn)都做完了,還是沒進(jìn)展。我說確認(rèn)下 CM3 拷貝到 ITCM 里面的固件是否正常吧 —— CM3 把固件拷貝到 ITCM 后,在用 JTAG 讀出來,然后對比。

實(shí)驗(yàn)做完,這位同學(xué)蔫蔫的說,從 ITCM 中讀出來的固件數(shù)據(jù)和編譯出來的固件數(shù)據(jù)有一小部分對不上。而且這部分對上的數(shù)據(jù)位于固件尾巴上。

固件加載出錯(cuò),程序肯定無法正常運(yùn)行!那就直接排查數(shù)據(jù)在哪個(gè)環(huán)節(jié)出錯(cuò)的吧!

固件從 Flash 中加載到 Sram 中后,也用 JTAG 讀出來和原始數(shù)據(jù)對比,結(jié)果正常!

那就是從 Sram 到 ITCM 的這個(gè)環(huán)節(jié)處了問題!

查看這段拷貝的代碼,原來就是一個(gè) rt_memcpy —— 我們在 Cortex M3 上運(yùn)行的是 RT-Thread。

ae5818e8-06f8-11ed-ba43-dac502259ad0.jpg

這位同學(xué)用 JLink 單步跟蹤這段代碼發(fā)現(xiàn),每次程序運(yùn)行到第二部分的時(shí)候,拷貝就異常了,能看到程序執(zhí)行了,但是數(shù)據(jù)就是沒拷貝過去!而第一段的拷貝都是正常的。

事出異常必有妖,我決定反匯編看看這段代碼后面藏了什么玄機(jī)。

ae657e48-06f8-11ed-ba43-dac502259ad0.jpg

果真有貓膩,第一段代碼,對于大塊的 4 字節(jié)對齊的數(shù)據(jù),CPU 是以 STR 這樣的指令超 ITCM 寫數(shù)據(jù),即以 Word 為單位訪問 ITCM,對于第二段,也就是一段數(shù)據(jù)的尾巴,剩下的那些零零散的不夠四字節(jié)的數(shù)據(jù),CPU 是以 STRB 這樣的指令超 ITCM 寫數(shù)據(jù),即以字節(jié)為單位訪問 ITCM。

memcpy 這樣寫是為了提高數(shù)據(jù)搬運(yùn)的效率。對于按照 Word 對齊的數(shù)據(jù),以 Word 的模式搬運(yùn),對于剩下的非Word 對齊的數(shù)據(jù),以 Byte 模式搬運(yùn),一次搬運(yùn)四字節(jié)肯定比一次搬運(yùn)一字節(jié)要快。

但是我們這里踩了什么坑呢?以 Word 方式訪問 ITCM 就正常,以 Byte 的方式訪問就不成功?

為了進(jìn)一步確認(rèn)這個(gè)結(jié)論,我寫了一段測試代碼:

ae75cc3a-06f8-11ed-ba43-dac502259ad0.png

這段測試代碼構(gòu)造了一個(gè) memcpy 命令,我可以在命令行通過 memcpy cnt value 來控制每次超 ITCM 搬運(yùn)不同長度的數(shù)據(jù),下面就開始測試:

ae860c6c-06f8-11ed-ba43-dac502259ad0.jpg

一次寫 16 字節(jié)的 1 到 ITCM,然后通過 Jlink 可以看到 ITCM 這片區(qū)域被成功的寫入了 16 字節(jié)的 1。因?yàn)?16 是 4 個(gè) 4 字節(jié),所以這次的 memcpy 是通過 STR 指令進(jìn)行的。

ae963010-06f8-11ed-ba43-dac502259ad0.jpg

一次 copy 17 字節(jié)的 2 到 ITCM, 通過 JLink 觀察右下角的 ITCM,發(fā)現(xiàn)只寫進(jìn)去了 16 字節(jié)。根據(jù) memcpy 算法,前 16 字節(jié) 是以 Word 的形式通過 STR 指令寫入 ITCM 的,剩下的 一 字節(jié) 是以 STRB 的形式寫入 ITCM 的。

aea7b628-06f8-11ed-ba43-dac502259ad0.jpg

一次 Copy 18 字節(jié),同樣發(fā)現(xiàn)只寫進(jìn)去了 16 字節(jié)。

aeb47a2a-06f8-11ed-ba43-dac502259ad0.jpg

一次 Copy 19 字節(jié),還是只寫進(jìn)去了 16 字節(jié)!

aec132c4-06f8-11ed-ba43-dac502259ad0.jpg

一次 Copy 20 字節(jié),全部寫入成功了!按照 memcpy 算法,20 字節(jié)是以 五次 STR 指令,以 Word 模式拷貝過去的。

aece75e2-06f8-11ed-ba43-dac502259ad0.jpg

一次 Copy 21 字節(jié),發(fā)現(xiàn)還是只寫入了 20 字節(jié)!

aed88a14-06f8-11ed-ba43-dac502259ad0.jpg

一次 Copy 24 字節(jié),全部拷貝成功!

到這里,我基本確認(rèn) Cortex M3 以 Byte 模式訪問 ITCM 會(huì)失?。?/p>

然后聯(lián)系 IC 設(shè)計(jì)方,確認(rèn)是什么原因。IC 設(shè)計(jì)方回復(fù)說:Cortex M3 確實(shí)無法以 Byte 模式訪問 ITCM,這是總線設(shè)計(jì)上限制的!

艾瑪呀!忽然有種想打人的沖動(dòng),你文檔上根本沒提有這個(gè)限制?。?/p>

后來想想,在無數(shù)次的 Bringup 過程中,類似這種固件拷貝不完整的情況,似乎坑過我好幾次,有一次 Linux 內(nèi)核起來后,很多驅(qū)動(dòng)都加載失敗,我一路從 Linux Kernel 查找到 U-Boot,再查到下載,最后確認(rèn)是固件下載工具有問題,DTB 沒有下載完整,而且這尼瑪也是因?yàn)?flash 扇區(qū)對齊的問題導(dǎo)致的!還有一次從 U-Boot SPL 跳到 Arm turst firmware 后,總是卡死固定的位置,然后 Dump 發(fā)現(xiàn) ATF 固件加載不完整,最后確認(rèn)是 CLK 驅(qū)動(dòng)問題引起 eMMC 工作異常導(dǎo)致的。

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

    關(guān)注

    553

    文章

    8019

    瀏覽量

    349238
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4323

    瀏覽量

    85927
  • 固件
    +關(guān)注

    關(guān)注

    10

    文章

    557

    瀏覽量

    23056

原文標(biāo)題:固件下下去,板子沒反應(yīng),我也很絕望啊

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用wavevison5軟件時(shí),F(xiàn)PGA的程序是在線加載的,CY7C68013A固件也是在線加載的嗎?

    我現(xiàn)在沒有使用Wavevison5軟件,而是用JTAG接口把snar019文件夾的FPGA程序直接下載到FPGA,下載之后為什么指示燈顯示的有點(diǎn)不正常,PII_LD和DCLK_L
    發(fā)表于 12-27 08:11

    如何判斷繼電器是否正常工作

    判斷繼電器是否正常工作是一個(gè)涉及多個(gè)方面的過程,主要包括外觀檢查、電氣性能測試以及實(shí)際應(yīng)用的表現(xiàn)等。以下將從這些方面詳細(xì)闡述如何判斷繼電器是否正常
    的頭像 發(fā)表于 09-10 11:06 ?960次閱讀

    如何在空白閃存上初始加載AT固件

    我一直在嘗試將 AT 固件加載到我設(shè)計(jì)的新 PCB 上,但它不起作用,我想知道我是否做錯(cuò)了什么。這是我的板子: 為了進(jìn)行比較,我一直在使用從速賣通供應(yīng)商處購買的 ESP-01 模塊。我正在
    發(fā)表于 07-15 06:47

    ESP32-C3-WROOM2燒錄定頻固件后,如何燒錄回正常固件?

    ESP32-C3-WROOM2模塊燒錄定頻固件過SRRC認(rèn)證,燒錄了定頻因件后,燒錄多了幾個(gè),有幾個(gè)模塊需要燒錄回正常固件,發(fā)現(xiàn)能燒錄,但從串口信息可以看到,模塊啟動(dòng)不
    發(fā)表于 06-07 07:33

    CYUSBKIT-003引導(dǎo)加載程序從主機(jī)接收固件后,引導(dǎo)加載程序是否會(huì)斷開與主機(jī)的連接以重新識(shí)別?

    我有一塊 CYUSBKIT-003 板,我正在學(xué)習(xí)它。我有兩個(gè)問題要問您。 1.默認(rèn)引導(dǎo)程序是引導(dǎo)加載程序,它位于 FX3 的 ROM 。引導(dǎo)加載程序從主機(jī)接收
    發(fā)表于 05-29 06:42

    STM32H在IAR如何實(shí)現(xiàn)從FLASH加載到SRAM運(yùn)行程序?

    如題,STM32H 在IAR如何實(shí)現(xiàn)從FLASH加載到SRAM運(yùn)行程序 有沒有相關(guān)的例程可供參考
    發(fā)表于 03-28 07:46

    請問STM32IDE如何設(shè)定代碼到ITCM運(yùn)行?

    近期使用STM32MUX生成STM32IDE的代碼(MCU是STM32H743),目前希望可以將部分代碼定位到ITCM運(yùn)行,加快處理速度,關(guān)于代碼的.id鏈接文件,該部分資料比較少,目前我只
    發(fā)表于 03-26 06:08

    運(yùn)行FPGA然后將img加載到FX3時(shí)出現(xiàn)了黑屏是為什么?

    當(dāng)我運(yùn)行 FPGA 然后將 img 加載到 FX3 時(shí)出現(xiàn)了黑屏,我使用了 amcap.exe。 FPGA 輸出動(dòng)態(tài)模式。 請幫我解決我的問題。 我附上了 chipscope 和 amcap.exe
    發(fā)表于 02-26 08:36

    CYUSB2014固件編程后,出現(xiàn)“此設(shè)備無法啟動(dòng)”的原因?如何解決?

    普拉斯FX3 USB引導(dǎo)加載程序設(shè)備”,固件編程成功。 但是隨后,就無法與設(shè)備通信了。 無法識(shí)別任何設(shè)備,C++ API 函數(shù) \" usbDevice-d >
    發(fā)表于 02-26 07:55

    請問CYT4BFCM7 ITCM、CM7 DTCM是什么?

    嗨 我正在使用 CYT4BF 正在檢查 ITCM 和 DTCM。 CAN 您可以通過 CYT4BF 數(shù)據(jù)表的地址映射查看 CM7 ITCM/DTCM、
    發(fā)表于 02-01 07:47

    CYT4BF通過分配ITCM內(nèi)存來使用經(jīng)常執(zhí)行的代碼,下載程序時(shí)報(bào)錯(cuò)的原因?

    正常,但是下載程序時(shí)出現(xiàn)總線錯(cuò)誤。 Q1) 總線錯(cuò)誤是否因?yàn)?b class='flag-5'>ITCM內(nèi)存地址與ROM地址重疊而發(fā)生? Q2) 您 CAN 告訴我如何將常用代碼分配給 ITCM 內(nèi)存并使用它? 問
    發(fā)表于 01-31 06:34

    在睡眠/深度睡眠模式下通過調(diào)試器TRACE32讀取來自ITCM/DTCM地址的數(shù)據(jù),會(huì)出現(xiàn)問題嗎?

    我正在使用 CYT4BFC 和 TRACE32 調(diào)試器。 如下所示,CM7_0/CM7_1 的 ITCM 地址為 0x0000_0000,DTCM 地址為 0x2000_0000。 通過
    發(fā)表于 01-18 10:48

    ldr文件如何加載到SC589開發(fā)板運(yùn)行?

    ADI官方的SC589開發(fā)板,在cces可以通過ICE-2000直接加載程序進(jìn)行評估測試,測試通過之后我想把程序直接加載到SC589,以使在開發(fā)板接電源時(shí),直接運(yùn)行
    發(fā)表于 01-12 06:22

    能否不使用ITCM就對Flash進(jìn)行編程呢?

    一些是執(zhí)行ITCM當(dāng)中的指令,請問為什么要如此設(shè)計(jì)呢? 3 蜂鳥E203具有ITCM和DTCM,但是debug ram的指令和數(shù)據(jù)全部堆放在了IT
    發(fā)表于 01-10 07:28

    e203 rom啟動(dòng)僅僅是引導(dǎo)到itcm執(zhí)行指令嗎?flash啟動(dòng)就是加載指令到itcm嗎?

    e203 rom啟動(dòng)僅僅是引導(dǎo)到itcm執(zhí)行指令嗎?flash啟動(dòng)就是加載指令到itcm嗎? rom代碼不是存儲(chǔ)器形式:(能否解釋一下哎)
    發(fā)表于 01-10 07:05
    主站蜘蛛池模板: 最近的2019中文字幕国语版| 99久久无码热高清精品| 少妇被阴内射XXXB少妇BB| 日本久久久久亚洲中字幕| 日韩亚洲人成在线| 神马老子影院午夜伦 | 99精品国产福利在线观看| asmr淫语| 成人影院久久久久久影院| 国产精品久久久久久久久久免费| 国产色婷亚洲99精品AV在线| 精品熟女少妇AV久久免费A片| 就操成人网| 清晨紧湿爱运动h高h| 乌克兰肛交影视| 亚洲伊人久久网| 99热这里只有是精品| 国产二区自拍| 精品国产在线手机在线| 男的插曲女的下面免费APP| 色人格影院第四色| 亚洲人成人毛片无遮挡| 97在线视频免费播放| 国产产乱码一二三区别免费| 九九99热久久999精品| 欧美丰满少妇久久无码精品| 深夜释放自己在线观看| 在线自拍亚洲视频欧美| 成人在线视频免费观看| 花蝴蝶在线观看免费中文版高清| 蜜桃成熟时2在线| 熟妇内谢69XXXXXA片| 在线成年av动漫电影| 高H辣肉办公室| 久久黄色片| 人人插人人射| 亚洲色婷婷久久精品AV蜜桃| hdxxxx58丝袜连裤袜| 护士们的母狗| 全肉高H短篇合集| 伊人激情综合网|