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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

前端時間回來了一塊板子,于是各個團隊都進入了緊張的 Bringup 工作中。

這塊板子上的主芯片是一顆 Arm Cortex M3 + DSP 的異構芯片,結構大概是這樣的:

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

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

Bringup 進行到第二天的時候,負責 DSP 的同學反饋說,DSP 的程序加載上去后,始終不能正常運行 —— 觀察不到任何正常啟動的現象。其實在 Bringup 剛開始階段,這種情況是經常遇到的,我第一反應就是,讓這位同學連上 DSP 的 JTAG 去單步調試,看到底發生了什么。

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

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

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

實驗做完,這位同學蔫蔫的說,從 ITCM 中讀出來的固件數據和編譯出來的固件數據有一小部分對不上。而且這部分對上的數據位于固件尾巴上。

固件加載出錯,程序肯定無法正常運行!那就直接排查數據在哪個環節出錯的吧!

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

那就是從 Sram 到 ITCM 的這個環節處了問題!

查看這段拷貝的代碼,原來就是一個 rt_memcpy —— 我們在 Cortex M3 上運行的是 RT-Thread

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

這位同學用 JLink 單步跟蹤這段代碼發現,每次程序運行到第二部分的時候,拷貝就異常了,能看到程序執行了,但是數據就是沒拷貝過去!而第一段的拷貝都是正常的。

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

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

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

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

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

為了進一步確認這個結論,我寫了一段測試代碼:

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

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

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

一次寫 16 字節的 1 到 ITCM,然后通過 Jlink 可以看到 ITCM 這片區域被成功的寫入了 16 字節的 1。因為 16 是 4 個 4 字節,所以這次的 memcpy 是通過 STR 指令進行的。

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

一次 copy 17 字節的 2 到 ITCM, 通過 JLink 觀察右下角的 ITCM,發現只寫進去了 16 字節。根據 memcpy 算法,前 16 字節 是以 Word 的形式通過 STR 指令寫入 ITCM 的,剩下的 一 字節 是以 STRB 的形式寫入 ITCM 的。

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

一次 Copy 18 字節,同樣發現只寫進去了 16 字節。

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

一次 Copy 19 字節,還是只寫進去了 16 字節!

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

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

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

一次 Copy 21 字節,發現還是只寫入了 20 字節!

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

一次 Copy 24 字節,全部拷貝成功!

到這里,我基本確認 Cortex M3 以 Byte 模式訪問 ITCM 會失敗!

然后聯系 IC 設計方,確認是什么原因。IC 設計方回復說:Cortex M3 確實無法以 Byte 模式訪問 ITCM,這是總線設計上限制的!

艾瑪呀!忽然有種想打人的沖動,你文檔上根本沒提有這個限制啊!

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

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dsp
    dsp
    +關注

    關注

    557

    文章

    8161

    瀏覽量

    358291
  • 存儲
    +關注

    關注

    13

    文章

    4542

    瀏覽量

    87565
  • 固件
    +關注

    關注

    10

    文章

    566

    瀏覽量

    23989

原文標題:固件下下去,板子沒反應,我也很絕望啊

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

    。 據我所見,加載到 RAM 部分工作正常,當它開始閃存操作時,設備會凍結并需要電源循環,并且通常需要通過 miniwiggler 重新編程。刻錄機功能通過鏈接腳本存儲在 RAM ,以允許成功編程
    發表于 07-15 07:39

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

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

    STM32IDE如何設定代碼到ITCM運行?

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

    如何使用Keil將二進制文件加載到外部SPI Flash

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

    將指定文件下的函數加載到指定ram問題

    問題:mcuxpresso環境,xip模式下我需要使用flexspi將norflash的一部分作為文件系統,將flex以及fatfs相關函數全部加載到ram,發現rodata仍然在flash地址
    發表于 03-12 17:02

    STM32H743對關鍵中斷函數,使用ITCM搬至RAM運行,仿真進入HardFault_Handler報錯怎么解決?

    ,CubeIDE編譯能正常通過,且map文件,對已搬至ITCM RAM區域運行的中斷函數的地址是OK的。只要上電一仿真運行就會進入HardFault_Handler函數,MCU主頻是480MHz,不知
    發表于 03-07 08:04

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

    測試,無論固件大小是否大于16MB,均可正常燒錄,正常投影。 請協助分析下原因,并提供下解決思路!! 問題2: 根據DLPC350手冊,DLPC350內部存在2個24bit的buff
    發表于 02-18 07:11

    使用wavevison5軟件時,FPGA的程序是在線加載的,CY7C68013A固件也是在線加載的嗎?

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

    Purepath studio生成的ASM文件有好幾個 ,應該選擇哪個文件加載到工程文件

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

    如何測試光纖是否正常

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

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

    判斷繼電器是否正常工作是一個涉及多個方面的過程,主要包括外觀檢查、電氣性能測試以及實際應用的表現等。以下將從這些方面詳細闡述如何判斷繼電器是否正常
    的頭像 發表于 09-10 11:06 ?2005次閱讀

    MSPM0實時固件更新(LFU)引導加載程序實施

    電子發燒友網站提供《MSPM0實時固件更新(LFU)引導加載程序實施.pdf》資料免費下載
    發表于 08-29 09:58 ?0次下載
    MSPM0實時<b class='flag-5'>固件</b>更新(LFU)引導<b class='flag-5'>加載</b>程序實施

    如果SPI啟動失敗,如何創建可通過USB啟動的兩階段啟動加載程序?

    ) ------------------------------------------- 你好,我想創建一個引導加載程序,在 SPI 啟動失敗時通過 USB 啟動。 如果閃存固件不正確,設備應能通過 USB
    發表于 08-01 08:13
    主站蜘蛛池模板: 边摸边吃奶边做带声音 | 免费人成视频X8X8国产更快乐 | 国产高清亚洲日韩字幕一区 | 免费人成在线观看网站视频 | 午夜伦理电影在线观免费 | 花蝴蝶在线观看免费8 | 九九热这里只有精品2 | www亚洲欲色成人久久精品 | 51精品国产AV无码久久久密桃 | 亚洲精品无码午夜福利在线观看 | 正在播放久久 | 天堂tv免费tv在线tv香蕉 | 99精品观看 | 日韩欧美成人免费中文字幕 | 中文字幕在线视频在线看 | 老熟女毛茸茸浓毛 | 亚洲精品无码不卡 | 欧美一区二区VA毛片视频 | 97精品少妇偷拍AV | 欧美香蕉大胸在线视频观看 | 亚洲视频网站欧美视频网站 | 久草热8精品视频在线观看 久草青青在线 | 国产国产乱老熟女视频网站97 | 亚洲 日韩 欧美 国产专区 | 99久久精品免费看国产一区二区三区 | 欧美午夜精品一区二区蜜桃 | 亚洲精品国偷拍电影自产在线 | 国产亚洲精品久久久999密臂 | 国产成人免费高清视频 | 亚洲国产免费观看视频 | 妞干网手机免费视频 | 性色欲情网站IWWW九文堂 | 日本午夜精品理论片A级APP发布 | 777米奇影院第七色色 | 久久99精品国产麻豆婷婷 | 亚洲欧美成人 | 波多久久亚洲精品AV无码 | 伊人狠狠丁香婷婷综合尤物 | 国产欧美一区二区三区在线看 | 亚洲国产系列一区二区三区 | 成人在线观看国产 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品