<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Cortex―M3的SRAM單元故障軟件的自檢測研究

          Cortex―M3的SRAM單元故障軟件的自檢測研究

          作者: 時間:2011-07-29 來源:網(wǎng)絡 收藏

          引言
          目前,對于存儲都是基于硬件電路來完成,而且這些方法都是運用在生產(chǎn)過程中,但是生產(chǎn)過程并不能完全杜絕的硬件。在其使用過程中,如果硬件出錯,將導致程序出錯而且很難被發(fā)現(xiàn)。因此在運用的階段,為防止存儲損壞而導致系統(tǒng)出錯,通過的方式對SRAM進行是必要的。

          1 SRAM運行狀態(tài)分析
          SRAM是存儲非CONSTANT變量(如RW),它具有掉電即失的特點。由的啟動步驟可知,系統(tǒng)上電后,首先執(zhí)行復位的5個步驟:
          ①NVIC復位,控制內(nèi)核;
          ②NVIC從復位中釋放內(nèi)核;
          ③內(nèi)核配置堆棧;
          ④內(nèi)核設置PC和LR;
          ⑤運行復位程序。
          可以看出,不能在調(diào)入C環(huán)境之后SRAM,必須在復位之前和啟動之后進行。
          在執(zhí)行系統(tǒng)復位的最后一個步驟之前,系統(tǒng)都沒有對SRAM執(zhí)行任何相關的數(shù)據(jù)傳送動作。第⑤步運行復位程序,在ST公司-處理器內(nèi)核的STM32系列微控制器的啟動代碼中有一段復位子程序:
          c.JPG
          在這個子程序里導入了__main,__main是C庫文件的入口地址。它執(zhí)行下面3個步驟:
          ①復制非root(RW、RO)從Flash到SRAM;
          ②分配ZI區(qū),并且初始化為0;
          ③跳轉(zhuǎn)到堆棧初始化子程序接口__rt_entry。
          由_ _main的第一步可以得出,在跳入_ _main之后,系統(tǒng)對SRAM進行了相關數(shù)據(jù)轉(zhuǎn)移的操作。因此,檢測SRAM必須在此步驟之前,否則將會覆蓋SRAM從Flash中轉(zhuǎn)移過來的數(shù)據(jù)。

          2 SRAM檢測方案設計
          在復位子程序跳入_ _main之前,設計另一個程序入口SRAM_Check,使PC指針指向該SRAM進行硬件檢測程序(SRAM_Check)的入口。在SRAM_check里,首先將PC指針指向SRAM的首地址并寫入0xFF,讀回該地址的值到通用寄存器Rn1,并對Rn1里的值進行加1操作,然后將Rn1和256做比較,得出SRAM硬件是否損壞。這種操作可以避免因SRAM硬件一直為1或0而出現(xiàn)算法本身錯誤。由于Cortex—M3復位后默認的時鐘為HSI,是一個內(nèi)部RC振蕩器,因此精度不高。如果需要更準和快速的時鐘,就必須在跳入SRAM_Check之前對相關的寄存器進行操作。

          3 SRAM檢測設計
          圖1為本文設計的SRAM檢測程序流程。

          本文引用地址:http://www.ex-cimer.com/article/150421.htm

          d.JPG


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();