99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-22 09:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前端時(shí)間回來(lái)了一塊板子,于是各個(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 中,最后再?gòu)?Sram 中拷貝到 DSP 的 ITCM 中,至于為什么不繞過(guò) Sram 直接把 DSP 的固件從 Flash 中讀到 DSP 的 ITCM 中,我們這里先不討論。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

但是我們這里踩了什么坑呢?以 Word 方式訪(fǎng)問(wèn) ITCM 就正常,以 Byte 的方式訪(fǎng)問(wèn)就不成功?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

到這里,我基本確認(rèn) Cortex M3 以 Byte 模式訪(fǎng)問(wèn) ITCM 會(huì)失敗!

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

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

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

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

    關(guān)注

    556

    文章

    8157

    瀏覽量

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

    關(guān)注

    13

    文章

    4531

    瀏覽量

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

    關(guān)注

    10

    文章

    566

    瀏覽量

    23903

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CX3無(wú)法將固件加載到SPI閃存如何解決?

    我無(wú)法將固件加載到 SPI 閃存。 步驟如下: 1. 開(kāi)機(jī),運(yùn)行 USB 控制中心, 2.點(diǎn)擊boot loader,點(diǎn)擊FX3,然后選擇“SPI flash”。然后USB控制中心顯示“未找到
    發(fā)表于 07-16 07:37

    無(wú)法將固件刻錄到PFlash的原因?怎么解決?

    。 據(jù)我所見(jiàn),加載到 RAM 部分工作正常,當(dāng)它開(kāi)始閃存操作時(shí),設(shè)備會(huì)凍結(jié)并需要電源循環(huán),并且通常需要通過(guò) miniwiggler 重新編程。刻錄機(jī)功能通過(guò)鏈接腳本存儲(chǔ)在 RAM ,以允許成功編程
    發(fā)表于 07-15 07:39

    求助,CYBT-243053-02 EZ固件問(wèn)題求解

    編程器將 EZ 固件加載到 CYBT-243053-02-EVAL,但該主板未列入其套件/探針清單。 請(qǐng)建議正確的方法來(lái)對(duì)電路板進(jìn)行編程。 2)。 據(jù)說(shuō)EZ固件支持的最大MTU為128,我們可以通過(guò)軟件增加它嗎。
    發(fā)表于 07-04 07:50

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

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

    USB 3.0CX3的輔助引導(dǎo)加載程序后無(wú)法識(shí)別怎么解決?

    我正在為CYPRESS? CX3 (FX3) 開(kāi)發(fā)輔助引導(dǎo)加載程序 (SBL),它從 SPI Flash 加載應(yīng)用程序并執(zhí)行它。 但是,通過(guò) SBL 啟動(dòng)應(yīng)用程序時(shí),USB 3.0 枚
    發(fā)表于 05-06 08:39

    如何使用Keil將二進(jìn)制文件加載到外部SPI Flash?

    我想知道是否有辦法使用 Keil 將隨機(jī)二進(jìn)制文件加載到外部 SPI 閃存。二進(jìn)制文件將通過(guò) LPC54102(OM13077 EVK 板)。我知道一些用于 FPGA 的 ISE 允許您執(zhí)行此作
    發(fā)表于 03-17 06:37

    將指定文件下的函數(shù)加載到指定ram問(wèn)題

    問(wèn)題:mcuxpresso環(huán)境,xip模式下我需要使用flexspi將norflash的一部分作為文件系統(tǒng),將flex以及fatfs相關(guān)函數(shù)全部加載到ram,發(fā)現(xiàn)rodata仍然在flash地址
    發(fā)表于 03-12 17:02

    STM32H743對(duì)關(guān)鍵中斷函數(shù),使用ITCM搬至RAM運(yùn)行,仿真進(jìn)入HardFault_Handler報(bào)錯(cuò)怎么解決?

    ,CubeIDE編譯能正常通過(guò),且map文件,對(duì)已搬至ITCM RAM區(qū)域運(yùn)行的中斷函數(shù)的地址是OK的。只要上電一仿真運(yùn)行就會(huì)進(jìn)入HardFault_Handler函數(shù),MCU主頻是480MHz,不知
    發(fā)表于 03-07 08:04

    DLP4500-C350REF I2C燒錄固件異常的原因?

    測(cè)試,無(wú)論固件大小是否大于16MB,均可正常燒錄,正常投影。 請(qǐng)協(xié)助分析下原因,并提供下解決思路??! 問(wèn)題2: 根據(jù)DLPC350手冊(cè),DLPC350內(nèi)部存在2個(gè)24bit的buff
    發(fā)表于 02-18 07:11

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

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

    Purepath studio生成的ASM文件有好幾個(gè) ,應(yīng)該選擇哪個(gè)文件加載到工程文件?

    Purepath studio生成的ASM文件有好幾個(gè) ,應(yīng)該選擇哪個(gè)文件加載到工程文件? 還有C文件工程如何嵌入這個(gè)ASM文件?
    發(fā)表于 10-25 12:40

    如何測(cè)試光纖是否正常

    測(cè)試光纖是否正常,可以通過(guò)多種方法進(jìn)行,以下是一些常用的測(cè)試步驟和方法: 一、觀(guān)察指示燈 檢查設(shè)備指示燈 :如果你使用的是帶有指示燈的設(shè)備(如交換機(jī)、光模塊、光纖收發(fā)器等),首先觀(guān)察指示燈的狀態(tài)
    的頭像 發(fā)表于 09-24 09:35 ?4894次閱讀

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

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

    MSPM0實(shí)時(shí)固件更新(LFU)引導(dǎo)加載程序?qū)嵤?/a>

    電子發(fā)燒友網(wǎng)站提供《MSPM0實(shí)時(shí)固件更新(LFU)引導(dǎo)加載程序?qū)嵤?pdf》資料免費(fèi)下載
    發(fā)表于 08-29 09:58 ?0次下載
    MSPM0實(shí)時(shí)<b class='flag-5'>固件</b>更新(LFU)引導(dǎo)<b class='flag-5'>加載</b>程序?qū)嵤? />    </a>
</div>                              <div   id=

    如果SPI啟動(dòng)失敗,如何創(chuàng)建可通過(guò)USB啟動(dòng)的兩階段啟動(dòng)加載程序?

    ) ------------------------------------------- 你好,我想創(chuàng)建一個(gè)引導(dǎo)加載程序,在 SPI 啟動(dòng)失敗時(shí)通過(guò) USB 啟動(dòng)。 如果閃存固件不正確,設(shè)備應(yīng)能通過(guò) USB
    發(fā)表于 08-01 08:13