国产一区二区三区三州86295_视频一区二区国产_国产日韩综合导航_日韩亚洲大尺度高清

你的位置:首頁(yè) > 互連技術(shù) > 正文

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

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

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

關(guān)閉

?

關(guān)閉