系統(tǒng)壓力測(cè)試發(fā)現(xiàn)的問題通常都比較復(fù)雜,作者最近解決了一個(gè)有意思的系統(tǒng)穩(wěn)定性問題,也想請(qǐng)各位讀者一起思考下,想想問題的原因是什么。
i.MXRT600/i.MXRT500/i.MXRT700 廣泛用AI眼鏡的應(yīng)用中. 其中i.MXRT600,因?yàn)槠鋬?yōu)秀的音頻處理能力,在系統(tǒng)中,通常作為音頻協(xié)處理器使用。
i.MXRT600微控制器包括兩個(gè)內(nèi)核ARM Cortex M33 以及 Cadence Xtensa HiFi4 AudioDSP, 4.5MB 片上SRAM. 以及兩個(gè)DMA 控制器及I2S/PDM 等音頻接口。
該系統(tǒng)大致框圖如下所示:
系統(tǒng)包括應(yīng)用處理器, i.MXRT600, 音頻CODEC,以及麥克風(fēng)。應(yīng)用處理器作為I2S 主機(jī)通過I2S輸送下行音頻到RT600,DMA1用于搬移音頻數(shù)據(jù),HiFi4 DSP運(yùn)行降噪,去回聲等算法處理上下行音頻。音頻Codec和揚(yáng)聲器用于音頻下行數(shù)據(jù)的播放,麥克風(fēng)用于音頻上行數(shù)據(jù)的采集。CM33和DMA0處理非音頻的應(yīng)用,CM33和HIFI4使用中斷和共享內(nèi)存通信。
系統(tǒng)在壓力測(cè)試時(shí),數(shù)小時(shí)后會(huì)出現(xiàn)下行音頻停止的情況。
下行音頻的路徑如下圖所示,I2S外設(shè)0(I2S0)配置為I2S SLAVE接收, 下行數(shù)據(jù)會(huì)存儲(chǔ)到I2S0的FIFO中。DMA1從FC0的FIFO 搬移音頻到SRAM_0,HIFI4處理在SRAM_0的數(shù)據(jù)輸入并將處理結(jié)果放在SRAM_1。最后,DMA1搬移SRAM_1中的數(shù)據(jù)到I2S外設(shè)1(I2S1) FIFO, I2S1被配置為I2S MASTER 發(fā)送模式。
通過在DMA中斷回調(diào)函數(shù)中翻轉(zhuǎn)IO調(diào)試顯示,當(dāng)下行音頻停止的時(shí)候,DMA1搬運(yùn)I2S0數(shù)據(jù)到SRAM_0的中斷不能在進(jìn)入了。這個(gè)問題的范圍也就縮小到DMA1從I2S0的FIFO拷貝數(shù)據(jù)到SRAM_0的過程。
當(dāng)問題出現(xiàn)時(shí),停下HiFi4內(nèi)核,使用調(diào)試器觀察DMA1 和 I2S0的寄存器。DMA1控制器的DMA狀態(tài)寄存器和DMA通道狀態(tài)寄存器都是正確的。DMA1通道寄存器顯示傳輸正在進(jìn)行。而I2S1 狀態(tài)寄存器顯示了2個(gè)異常情況。
1. I2S0 狀態(tài)寄存器(STAT)顯示SLVFRAMEERR, Slave Frame Error.
2. I2S0 FIFO狀態(tài)寄存器(FIFOSTAT)顯示接收FIFO溢出,但當(dāng)前FIFO中數(shù)據(jù)為空。
異常情況1只發(fā)生在I2S做SLAVE從機(jī)時(shí)產(chǎn)生。錯(cuò)誤的原因是I2S SCK信號(hào)和WS信號(hào)不匹配。I2S每個(gè)SCK時(shí)鐘周期傳輸1個(gè)音頻位,如果一個(gè)音頻采樣是16位,雙聲道傳輸?shù)那闆r,那么在一個(gè)WS的低電平(高電平)脈沖應(yīng)該對(duì)應(yīng)16個(gè)SCK的時(shí)鐘。當(dāng)SCK和WS不匹配時(shí),就會(huì)出現(xiàn)SLVFRAMEERR錯(cuò)誤。
一個(gè)關(guān)于問題原因猜想是,F(xiàn)RAME ERROR導(dǎo)致I2S0不能再正常工作,從而DMA1無法從I2S0 FIFO中取到音頻數(shù)據(jù)而導(dǎo)致下行音頻鏈路終止。
為了證實(shí)這個(gè)猜想,作者做了如下實(shí)驗(yàn), 分別短時(shí)間斷開I2S0輸入的WS信號(hào)和CLK信號(hào),看DMA1是不是會(huì)因?yàn)閃S或者CLK的停止而停止,隨著WS/CLK的恢復(fù)而恢復(fù)。答案是肯定的,當(dāng)I2S0的輸入WS或者CLK信號(hào)斷開時(shí),DMA由于沒有數(shù)據(jù)可搬運(yùn)從而停止,當(dāng)WS或CLK恢復(fù)時(shí),I2S SLAVE會(huì)根據(jù)WS信號(hào)重新同步數(shù)據(jù)并接收數(shù)據(jù)到I2S FIFO,DMA也可以繼續(xù)完成未完成的傳輸。而FRAME ERROR會(huì)置位,但這種WS/CLK丟失導(dǎo)致的FRAME ERROR不是關(guān)鍵的致命錯(cuò)誤。同時(shí),在這種情況下I2S FIFO寄存器也沒有出現(xiàn)溢出的錯(cuò)誤。
由于DMA1 控制器工作正常,在壓力測(cè)試期間很難監(jiān)控I2S信號(hào)來分析I2S FRAME ERROR 和FIFO溢出產(chǎn)生的原因,作者計(jì)劃使用HiFi4通過處理I2S0的FIFO溢出中斷,在I2S0FIFO溢出中斷中,復(fù)位I2S0來保證I2S0狀態(tài)恢復(fù)到正常的狀態(tài)。
作者做了以下的驗(yàn)證,確保這個(gè)功能的有效性。使用GPIO中斷,在GPIO中斷中暫停DMA1搬移I2S0到SRAM0的通道。由于DMA1停止了,I2S0FIFO溢出進(jìn)入中斷處理函數(shù),復(fù)位I2S, 此時(shí)重啟DMA1通道,下行音頻恢復(fù)。
可惜的是,這種方法并不奏效,在接下來的壓力測(cè)試中,I2S0 FIFO狀態(tài)寄存器(FIFOSTAT)顯示接收FIFO溢出,I2S0中斷服務(wù)程序可以進(jìn)入,并重啟I2S0,但很快,I2S0 FIFO又馬上進(jìn)入了溢出的狀態(tài),DMA1完成中斷還是不能夠正常觸發(fā),DMA沒有完成描述字要求的傳輸任務(wù)。
到底是什么原因?qū)е翫MA1不能完成從FIFO搬移到SRAM的任務(wù)呢?歡迎評(píng)論區(qū)留言,答案見下期揭曉~
-
微控制器
+關(guān)注
關(guān)注
48文章
7896瀏覽量
153624 -
處理器
+關(guān)注
關(guān)注
68文章
19785瀏覽量
233330 -
寄存器
+關(guān)注
關(guān)注
31文章
5412瀏覽量
123159 -
音頻
+關(guān)注
關(guān)注
29文章
3012瀏覽量
82973 -
壓力測(cè)試
+關(guān)注
關(guān)注
0文章
28瀏覽量
13597
原文標(biāo)題:經(jīng)驗(yàn)分享 - 系統(tǒng)壓力測(cè)試出現(xiàn)問題,該怎么辦?(上)
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STC-ISP下載失敗的原因和解決方法
BIOS錯(cuò)誤信息和解決方法
TD-SCDMA測(cè)試出現(xiàn)不順暢插曲:設(shè)備互通出現(xiàn)問題(1)
假焊的原因和解決方法
液晶拼接屏安裝時(shí)出現(xiàn)色差的原因和解決方法
壓力變送器輸出過大可能的原因和解決方法資料下載

電風(fēng)扇轉(zhuǎn)速慢的原因和解決方法
減速電機(jī)日常出現(xiàn)的異常原因及解決方法

GSM系統(tǒng)中干擾問題的分類、定位和解決方法

步進(jìn)電機(jī)丟步的原因和解決方法
常見的錫珠形成的原因和解決方法

評(píng)論