介紹
RA系列單片機(jī)是瑞薩推出的32位ARM單片機(jī),在某些產(chǎn)品中需要通過(guò)安規(guī)認(rèn)證,如IEC60730(CLASS B),芯片硬件本身已經(jīng)通過(guò)IEC60730認(rèn)證了,今天主要說(shuō)RA芯片軟件自檢函數(shù)庫(kù)。
目前包括RA2A1、RA2L1、RA4M1、RA6M1四個(gè)系列芯片的例程。MCU自檢分為兩個(gè)部分:初始化自檢和循環(huán)調(diào)用自檢,可以分為以下:CPU、ROM、RAM、Clock、IWDT、Voltage、ADC、Temperature、POE、GPIO共10個(gè)部分,其中GPIO檢測(cè)需要?jiǎng)幼鱃PIO電位只能初始化時(shí)自檢。
移植CLASS B代碼
1、將SelfTestLib(CLASS B測(cè)試代碼文件)和srec(CRC腳本及其配置參數(shù)文件)加入自己工程中,并加入工程的includes目錄中如下圖1。并根據(jù)芯片的特性,排除不需要的模塊,如RA2系列MCU沒(méi)有FPU模塊,需排除,否則編譯報(bào)錯(cuò)。
圖1
2、可根據(jù)自身芯片的FLASH大小更改CRCcalcCmdXXKB.txt和CRCcalcCmdDebugXXKB.txt對(duì)應(yīng)的數(shù)值。
3、添加CRC計(jì)算腳本,加入腳本命令arm-none-eabi-objcopy -O srec "${ProjName}.elf" "Original.srec" & ${ProjDirPath}/srec/srec_cat @${ProjDirPath}/srec/CRCcalcCmd64KB.txt,并利用仿真將CRC計(jì)算后的值寫入ROM內(nèi)存中的最后一個(gè)32位字節(jié),如圖2。
圖2
4、設(shè)置一個(gè)周期性中斷調(diào)用CLASS B周期性自檢,周期時(shí)間長(zhǎng)短可根據(jù)安規(guī)公司要求調(diào)整。
按照上述步驟作者成功編寫移植了瑞薩官方提供的函數(shù)庫(kù),并編譯通過(guò)無(wú)報(bào)錯(cuò),見(jiàn)圖3。
圖3
CLASS B各個(gè)模塊自檢介紹
CPU
CPU的測(cè)試方式為向寄存器內(nèi)寫入數(shù)據(jù),然后讀出校驗(yàn)其是否能正常寫入、讀出,在寫入數(shù)據(jù)和完成后會(huì)有將之前工作數(shù)據(jù)入棧(PUSH {R0-R7})和恢復(fù)數(shù)據(jù)的出棧指令(POP {R0-R7})等,運(yùn)行CPU自檢程序時(shí),不能被其他程序打斷,否則會(huì)發(fā)生數(shù)據(jù)運(yùn)行錯(cuò)誤。
ROM
ROM測(cè)試方式為引入外部腳本srec計(jì)算出CRC值寫入內(nèi)存的最后一位并與RA單片機(jī)內(nèi)部CRC計(jì)算值對(duì)比,從而完成對(duì)ROM的計(jì)算,外部腳本寫入地址如u圖4中所示。
圖4
RAM
RAM模塊檢驗(yàn)方式是向MCU的RAM區(qū)域進(jìn)行讀寫測(cè)試,完成RAM校驗(yàn)。
CLOCK
CLOCK可采用內(nèi)部或是外部時(shí)鐘檢驗(yàn)MCU主時(shí)鐘,本例程中選中IWDTCLOCK時(shí)鐘作為基準(zhǔn)時(shí)鐘。其中CLOCK的校驗(yàn)函數(shù)ClockMonitor_Init(HOC
O , IWDTCLK , CLOCK_FREQ_MAIN , 15000 , Clock_Test_Failure);
參數(shù)1:目標(biāo)時(shí)鐘
參數(shù)2:基準(zhǔn)時(shí)鐘
參數(shù)3:目標(biāo)時(shí)鐘頻率
參數(shù)4:基準(zhǔn)時(shí)鐘頻率
參數(shù)5:錯(cuò)誤時(shí)回調(diào)函數(shù)
VOLTAGE
VOLTAGE檢驗(yàn)是MCU打開(kāi)LVD電壓監(jiān)控模式,如果MCU電源電壓低于設(shè)定電壓時(shí)MCU調(diào)用不可屏蔽中斷NMI,進(jìn)入報(bào)錯(cuò)函數(shù)。電壓檢測(cè)調(diào)用VoltageMonitor_Init(VOLTAGE_MONITOR_LEVEL_2_79);本例程中電源低于2.79V進(jìn)入報(bào)錯(cuò)函數(shù)。
ADC
MCU內(nèi)部有個(gè)ADC CRC模塊,可以將ADC引腳接入CRC模塊中,模塊會(huì)產(chǎn)生0V基準(zhǔn)、VCC/2基準(zhǔn)、VCC電壓基準(zhǔn)來(lái)校驗(yàn)ADC,需要實(shí)時(shí)查看ADC引腳上的電壓,看ADC模塊能否正常轉(zhuǎn)換電壓。
TEMPERATURE
MCU內(nèi)部有溫度傳感器TSN,可實(shí)時(shí)查看溫度情況,一旦超過(guò)設(shè)定范圍,可進(jìn)入報(bào)錯(cuò)。
GPIO
GPIO檢驗(yàn)功能在將GPIO設(shè)置為輸出模式,然后讀取管腳輸出電平,既而判斷完成檢驗(yàn)。在GPIO外接電路時(shí),可能會(huì)接上容性負(fù)載,GPIO管腳電平變化時(shí)可能是緩慢變化,所以設(shè)置完輸出后要根據(jù)電路連接適當(dāng)延時(shí)檢測(cè),從而避免發(fā)生錯(cuò)誤。
作者對(duì)CLASS B自檢各個(gè)模塊項(xiàng)目所用時(shí)間長(zhǎng)度做了大致的測(cè)算如圖5
圖5
結(jié)論
作者移植成功IEC60730安規(guī)認(rèn)證庫(kù)發(fā)現(xiàn)上電初始化自檢大概需要70ms,且每隔一段時(shí)間會(huì)定時(shí)自檢各個(gè)模塊,其中最長(zhǎng)的一次模塊自檢須用時(shí)長(zhǎng)1.48ms,加入庫(kù)代碼時(shí)要考慮此時(shí)間長(zhǎng)度是否對(duì)自身邏輯有無(wú)影響。注意循環(huán)測(cè)試中CPU自檢不應(yīng)該被任何中斷打斷,鑒于CPU測(cè)試時(shí)間比較短(小于1mS),建議開(kāi)始CPU測(cè)試之前關(guān)閉中斷、CPU測(cè)試完成后再打開(kāi)中斷,若強(qiáng)行打斷CPU自檢會(huì)導(dǎo)致程序跑飛、棧溢出等嚴(yán)重后果。此外GPIO自檢會(huì)動(dòng)作IO電平,對(duì)于大多數(shù)應(yīng)用來(lái)說(shuō)是不允許的,可跟安規(guī)公司溝通酌情添加此模塊自檢函數(shù)。
-
RA
+關(guān)注
關(guān)注
0文章
19瀏覽量
24675 -
Class
+關(guān)注
關(guān)注
0文章
53瀏覽量
19724 -
函數(shù)庫(kù)
+關(guān)注
關(guān)注
1文章
84瀏覽量
32431
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論