91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(pí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 讀出來,然后對(duì)比。

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

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

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

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

查看這段拷貝的代碼,原來就是一個(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ù)就是沒拷貝過去!而第一段的拷貝都是正常的。

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

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

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

memcpy 這樣寫是為了提高數(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 方式訪問 ITCM 就正常,以 Byte 的方式訪問就不成功?

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

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

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

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ū)對(duì)齊的問題導(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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    561

    文章

    8250

    瀏覽量

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

    關(guān)注

    13

    文章

    4801

    瀏覽量

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

    關(guān)注

    11

    文章

    570

    瀏覽量

    25027

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    智多晶MCU硬核IP全面升級(jí)|CM3和STAR新特性介紹

    IP進(jìn)行了重大升級(jí),不僅在底層架構(gòu)上實(shí)現(xiàn)了突破,更在易用性和擴(kuò)展性上帶來了顯著提升。本文將為您詳細(xì)介紹Cortex-M3CM3)與STAR Processor的最新特性。 一、架構(gòu)重組 CM3和STAR的IP做了整合,在接口
    的頭像 發(fā)表于 02-12 10:09 ?606次閱讀
    智多晶MCU硬核IP全面升級(jí)|<b class='flag-5'>CM3</b>和STAR新特性介紹

    功率半導(dǎo)體的N和P摻雜濃度技術(shù)探討

    典型摻雜范圍 1012~1014/cm3 P- 典型摻雜范圍 1012~1014/cm3 03 N 典型摻雜范圍 1015~1018/cm3 P 典型摻雜范圍 1015~1018/cm3
    的頭像 發(fā)表于 12-26 14:20 ?282次閱讀
    功率半導(dǎo)體的N和P摻雜濃度技術(shù)探討

    使用TinyFPGA-Bootloader將比特流加載到FPGA

    在 FPGA 設(shè)計(jì),一個(gè)常見但略顯繁瑣的環(huán)節(jié)是:如何方便地將新的比特流加載到 FPGA。尤其是在沒有專用 USB-JTAG/編程芯片或者在低成本板卡,傳統(tǒng)的編程方式可能需要額外硬件或較復(fù)雜流程。
    的頭像 發(fā)表于 12-19 15:20 ?4992次閱讀
    使用TinyFPGA-Bootloader將比特流<b class='flag-5'>加載到</b>FPGA

    芯來e203移植開發(fā)分享(二)——仿真文件簡述與itcm固化程序

    ,其實(shí)就是把rv32ui-p-add.verilog16進(jìn)制文件加載到itcm的ram,需要主要的itcm
    發(fā)表于 10-27 06:04

    蜂鳥例程的編譯與程序的加載

    install、make run_test,所有命令都定義在vsim文件夾下的Makefile。這一過程與1.1節(jié)所述內(nèi)容一致,只是需要修改TESTCASE為待執(zhí)行程序?qū)?yīng)路徑。 2 程序的加載
    發(fā)表于 10-24 13:34

    蜂鳥內(nèi)核ITCM模塊以及取值過程

    本文主要介紹蜂鳥ITCM模塊。ITCM在蜂鳥是用于存儲(chǔ)指令的,由于蜂鳥E203內(nèi)核定位是對(duì)于小型的指令系統(tǒng),因此在蜂鳥定位的系統(tǒng),指
    發(fā)表于 10-24 08:29

    蜂鳥內(nèi)核ITCM模塊及取值過程

    本文主要介紹蜂鳥ITCM模塊。ITCM在蜂鳥是用于存儲(chǔ)指令的,由于蜂鳥E203內(nèi)核定位是對(duì)于小型的指令系統(tǒng),因此在蜂鳥定位的系統(tǒng),指
    發(fā)表于 10-24 07:27

    E203分享之DDR擴(kuò)展方案實(shí)施流程(下)

    gcc_hbirdv2_ilm.ld: 修改為: (2)FLASH下載方式,程序先下載到flash里頭,再加載到ITCM和DDR3里頭
    發(fā)表于 10-23 06:16

    如何從主機(jī)將數(shù)據(jù)按8bit傳入片上ITCM

    的)到片上ITCM,但是還沒傳完程序計(jì)數(shù)器(PC)就開始跑了,導(dǎo)致NICE接口沒法按指令運(yùn)行。 有沒有辦法讓程序計(jì)數(shù)器PC(Program Counter)延遲幾個(gè)周期開始運(yùn)行,這樣可以讓ITCM全部接收完32KB的數(shù)據(jù)后再開
    發(fā)表于 10-20 07:00

    如何將源地址 FCANFDx FiF 0 加載到 DMA 線的 SRC 寄存器

    您能否提供一個(gè)示例,說明如何將源地址 FCANFDx FiF 0 加載到 DMA 線的 SRC 寄存器? 我不想使用固定地址加載,例如: cy_stc_dma_descriptor_t
    發(fā)表于 07-18 08:06

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

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

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

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

    求助,CYBT-243053-02 EZ固件問題求解

    編程器將 EZ 固件加載到 CYBT-243053-02-EVAL,但該主板未列入其套件/探針清單。 請(qǐng)建議正確的方法來對(duì)電路板進(jìn)行編程。 2)。 據(jù)說EZ固件支持的最大MTU為128,我們可以通過軟件增加它嗎。
    發(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

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

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