<abbr id="kc8ii"><menu id="kc8ii"></menu></abbr>
  • <input id="kc8ii"><tbody id="kc8ii"></tbody></input><table id="kc8ii"><source id="kc8ii"></source></table><kbd id="kc8ii"></kbd>
    <center id="kc8ii"><table id="kc8ii"></table></center>
  • <input id="kc8ii"></input>
    <abbr id="kc8ii"></abbr>
  • <abbr id="kc8ii"></abbr>
  • <center id="kc8ii"><table id="kc8ii"></table></center>
    <abbr id="kc8ii"></abbr>
    你的位置:首頁 > 互連技術(shù) > 正文

    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法

    發(fā)布時間:2020-05-15 來源:China Central FAE Sam Zhang 責(zé)任編輯:wenwei

    【導(dǎo)讀】隨著越來越多的工業(yè)應(yīng)用對產(chǎn)品的可靠性和安全性要求越來越高,我們在做產(chǎn)品設(shè)計的時候不僅要正確的實(shí)現(xiàn)產(chǎn)品功能,同時也需要通過一些功能安全認(rèn)證,比如家電行業(yè)的IEC60730等或者ISO13849等。一般的系統(tǒng)故障可以通過設(shè)計的迭代和嚴(yán)格測試來避免,但是硬件的隨機(jī)失效理論上是無法完全消除的,所以要想提高硬件隨機(jī)失效的診斷覆蓋率,就需要軟硬件診斷機(jī)制來保障。
     
    作為系統(tǒng)的核心控制部分,MCU主平臺的診斷機(jī)制就是最關(guān)鍵的部分。針對一般通用的MCU,以Piccolo C2000系列為例,硬件上提供了一些診斷或者校驗機(jī)制,如下所示:
     
    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法
     
    同時TI也提供了一些軟件診斷方案,如MSP430 IEC60730 Software Package和C2000 SafeTI 60730 SW Packages軟件庫等,可以提供很多的診斷測試功能,例如CPU、時鐘、外設(shè)、RAM等的診斷,已經(jīng)可以滿足一部分的需求。如下圖所示為C2000 SafeTI 60730 SW Packages中的功能和資源消耗。
     
    然而在實(shí)際的應(yīng)用中,有些安全標(biāo)準(zhǔn)要求對RAM進(jìn)行周期性的在線診斷,同時不能影響程序的正常運(yùn)行。但是程序在運(yùn)行過程中存儲在RAM中的數(shù)據(jù)會實(shí)時的變化,而RAM的診斷往往會破壞這些存儲的數(shù)據(jù),比如電機(jī)控制類的實(shí)時性要求較高的場合。所以在沒有ECC的情況下,如何對RAM進(jìn)行實(shí)時在線的診斷是一個值得討論的問題。
     
    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法
     
    下面以電機(jī)控制為例,討論硬件校驗的實(shí)現(xiàn),尤其是RAM在線檢測的過程。
     
    1. 系統(tǒng)軟件流程
     
    非破壞性的診斷可以放在背景循環(huán)里面進(jìn)行,這些軟件診斷不會對實(shí)時性中斷造成影響,例如看門狗測試,內(nèi)部晶振測試,F(xiàn)LASH CRC校驗,靜態(tài)變量RAM CRC校驗,堆棧溢出判斷,以及GPIO口診斷等。另外一些破壞性的或者對實(shí)時控制有影響的診斷,可以放到主中斷中進(jìn)行,如RAM March校驗,ALU診斷以及CPU寄存器診斷等。具體流程圖如下所示:
     
    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法
     
    2. RAM診斷的方法
     
    以C2000 SafeTI 60730 SW Packages為例,主要提供了兩種RAM檢測方式。
     
    一種是CRC檢測STL_CRC_TEST_testRam,此功能用于測試RAM的位錯誤。該測試以0和1的交替模式填充被測RAM區(qū)域,并使用PSA計算RAM的CRC。對于給定的RAM存儲器區(qū)域,如果RAM存儲器中沒有任何stuck bit,則CRC值應(yīng)始終相同。并行串行分析器(PSA)是c28x器件中的一個模塊,可用于生成40位給定存儲區(qū)域上的CRC。 PSA多項式為Y = x40 + x21 + x19 + x2 + 1。PSA通過監(jiān)視數(shù)據(jù)讀取數(shù)據(jù)總線(DRDB)來計算CRC值。 一旦激活就會監(jiān)控Data Read Data Bus (DRDB),當(dāng)CPU通過DRDB讀取數(shù)據(jù)時,PSA每個時鐘周期會為DRDB上的數(shù)據(jù)生成一個CRC。由于此測試具有破壞性,因此需要將要測試的RAM內(nèi)容保存到單獨(dú)的RAM位置。
     
    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法
     
    當(dāng)然也可以使用軟件CRC的方式,使用起來更靈活,并且可以選擇非破壞性的方式來計算CRC,對一些靜態(tài)常量存儲的區(qū)域可以考慮這種CRC方式。另外一點(diǎn)是軟件CRC算法可以更方便的進(jìn)行代碼評估,以滿足不同安全標(biāo)準(zhǔn)的要求。
     
    另一種是MARCH檢測STL_MARCH_TEST_testRam,此功能直接對RAM進(jìn)行32bit的讀寫測試,可以選擇進(jìn)行MarchC 13N或者M(jìn)archC-測試。由于此測試具有破壞性,因此也需要將要測試的RAM內(nèi)容保存到單獨(dú)的RAM位置。
     
    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法
     
    3. RAM在線檢測的實(shí)現(xiàn)
     
    由于需要周期性的RAM檢測,以電機(jī)控制為例,可以將RAM檢測放到主中斷里面執(zhí)行。同時關(guān)鍵是不能影響控制程序的運(yùn)行和實(shí)時性,所以主要考慮兩點(diǎn):
     
    第一是主中斷時間有限,要盡可能減小RAM檢測的時間,所以可以將RAM分成多個小段進(jìn)行檢測,每段RAM越小,占用中斷的時間越小,但是所有RAM檢測一遍的時間會變長,這個需要綜合考慮。
     
    第二是不能破壞RAM中的變量值,所以在檢測是之前將RAM段中的內(nèi)容保存到專門區(qū)域,戴檢測完成并且通過之后,再將保存好的數(shù)據(jù)恢復(fù)過來,使用memCopy來提高效率。
     
    具體實(shí)現(xiàn)方法如下:
     
    首先定義好各個RAM區(qū)間的地址范圍,可以參考具體的數(shù)據(jù)手冊,如下所示:
     
    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法
     
    然后定義好檢測的范圍和每次檢測的數(shù)據(jù)長度:
     
    一種C2000系列芯片的RAM在線診斷實(shí)現(xiàn)方法
     
    注意由于STL_MARCH_TEST_testRam函數(shù)執(zhí)行32位讀/寫測試,而在測試RAM單元陣列時,由于RAM單元的16位體系結(jié)構(gòu),所以要求起始地址為偶數(shù),結(jié)束地址為奇數(shù),可以測試的最大內(nèi)存范圍限制為65535個32位字。所以要求測試長度也需要為奇數(shù)。
     
    在主中斷里面的RAM在線檢測函數(shù)里,首先將要檢測區(qū)域的RAM值保存下來:
     
    if ((gStructSTLMonitor.NowRamAddrStart >= MARCH_RAM_START)
     
           && (gStructSTLMonitor.NowRamAddrStart <= (MARCH_RAM_END-RAM_CHK_NUM)))
     
    {
     
    gStructSTLMonitor.NowRamAddrEnd = gStructSTLMonitor.NowRamAddrStart + RAM_CHK_NUM;
     
    memCopy((uint16_t *)gStructSTLMonitor.NowRamAddrStart,(uint16_t *)
     
             gStructSTLMonitor.NowRamAddrEnd,(uint16_t *)MARCH_RAM_BK);
     
    }
     
    然后進(jìn)行檢測:
     
    gStructSTLMonitor.status = STL_MARCH_TEST_testRam((uint32_t *)
     
       gStructSTLMonitor.NowRamAddrStart,(uint32_t *)gStructSTLMonitor.NowRamAddrEnd);
     
    if(gStructSTLMonitor.status != SIG_RAM_MARCH_TEST)
     
    {
     
    STL_SetFail();
     
    }
     
    else
     
    {
     
    memCopy((uint16_t *)MARCH_RAM_BK,(uint16_t *)(MARCH_RAM_BK + RAM_CHK_NUM),
     
    (uint16_t *)gStructSTLMonitor.NowRamAddrStart);
     
    gStructSTLMonitor.NowRamAddrStart = gStructSTLMonitor.NowRamAddrEnd + 1;
     
    gStructSTLMonitor.gTestStep++;
     
    }
     
    注意檢測成功之后馬上恢復(fù)當(dāng)前區(qū)域的RAM值,并為下一次檢測做好準(zhǔn)備。如果檢測發(fā)現(xiàn)故障,則進(jìn)入故障處理函數(shù)。
     
    參考文檔:
     
    1. IEC60730 Safety Library for TMS320F2806x USER’S GUIDE
    2. Safety Manual for C2000™ MCUs in IEC60730 Safety Applications (SPRUHI3A)
     
     
    推薦閱讀:
     
    專業(yè)音頻應(yīng)用中生成負(fù)電源軌的方案
    工程師福利!Digi-Key聯(lián)手柴火x.factory在中國社區(qū)推廣Arduino基礎(chǔ)認(rèn)證考試
    無線水質(zhì)監(jiān)測系統(tǒng)
    穩(wěn)定可靠和高能效的工業(yè)驅(qū)動方案
    通過驅(qū)動器源極引腳將開關(guān)損耗降低約35%
    要采購晶振么,點(diǎn)這里了解一下價格!
    特別推薦
    技術(shù)文章更多>>
    技術(shù)白皮書下載更多>>
    熱門搜索
    ?

    關(guān)閉

    ?

    關(guān)閉

    国产成人AV一区二区三区无码| 亚洲精品无码AV中文字幕电影网站| 中文字幕无码久久久| 最近最好最新2019中文字幕免费| 无码国产伦一区二区三区视频| 亚洲成a人在线看天堂无码| 中文字幕一区日韩在线视频| 国模吧无码一区二区三区| 国产中文在线亚洲精品官网| 久久久久久久久无码精品亚洲日韩 | 无码中文人妻在线一区二区三区| 久久影院午夜理论片无码| 日韩精品一区二区三区中文字幕| 国产精品无码一区二区三级 | 精品日韩亚洲AV无码一区二区三区| 丰满白嫩人妻中出无码| 一级中文字幕免费乱码专区| 久久无码人妻精品一区二区三区| 国产品无码一区二区三区在线| 无码人妻一区二区三区精品视频| 99精品人妻无码专区在线视频区| 欧美 亚洲 日韩 中文2019| 精品无码AV无码免费专区| 中文字幕不卡亚洲| 亚洲中文字幕一二三四区苍井空| 无码人妻视频一区二区三区| 久久久这里有精品中文字幕| 在线观看免费无码视频| 无码人妻久久一区二区三区免费| 欧美中文字幕无线码视频| 中文字幕精品无码一区二区| 日韩乱码人妻无码系列中文字幕 | 午夜不卡无码中文字幕影院| 潮喷无码正在播放| 亚洲AV永久青草无码精品| avtt亚洲一区中文字幕| 无码中文av有码中文a| 无码人妻久久一区二区三区蜜桃 | 国产高清无码二区| 无码专区AAAAAA免费视频| 久久无码高潮喷水|