問(wèn)題描述
客戶在項(xiàng)目開發(fā)中使用 STM32F427ZGT6 的 SPI 連接外部 Flash 時(shí),發(fā)現(xiàn)在常溫下能正常讀寫,但是在高溫下一段時(shí)間后(大概 5 分鐘左右)出現(xiàn)讀寫異常的情況。讀寫異常時(shí)發(fā)生在發(fā)送 0x5 指令后,返回?cái)?shù)據(jù)通過(guò)軟件讀取的是 0,而硬件抓取的是 1 。同時(shí)也發(fā)現(xiàn)同一份代碼,同樣硬件,如果 flash 換成別的廠家的,在同樣溫度條件下又沒(méi)有出現(xiàn)讀寫異常。
問(wèn)題的排查
根據(jù)客戶的描述,初期懷疑是否是不同 Flash 廠家的兼容性問(wèn)題,現(xiàn)場(chǎng)進(jìn)一步測(cè)試,發(fā)現(xiàn)客戶軟件在70℃環(huán)境溫度下,除了 program、erase 時(shí)寄存器會(huì)讀錯(cuò)數(shù)據(jù),用只讀指令 0x03 也會(huì)讀錯(cuò)數(shù)據(jù)(0x55、0xaa 會(huì)被軟件讀成 0x54、0xab)。
根據(jù)這個(gè)結(jié)果,我們懷疑到 tCLQV 這個(gè)參數(shù)。看上去當(dāng)前的軟件是在 flash 輸出數(shù)據(jù)時(shí),在 CLK 下降沿時(shí)去采集 flash MO 數(shù)據(jù)的,所以高溫引起的細(xì)微的 tCLQV 變化可能會(huì)導(dǎo)致軟件采集出錯(cuò)。 我們建議MCU 在下一個(gè) CLK 的上升沿去采集數(shù)據(jù),此時(shí) flash MO 數(shù)據(jù)已經(jīng)穩(wěn)定為 1。
原因的進(jìn)一步分析
進(jìn)一步了解客戶系統(tǒng)的初始化,其中 clock 配置信息如下:采用外部晶振為 25MHZ,plln=360,pllm=25, pllp=2, pllq=8,系統(tǒng)主頻: 25/25*360/2 = 180MHz,APB2: 180/2 = 90MHz,SPI 的波特率為2.8MHz。SPI 的引腳設(shè)置均為 GPIO_Initure.Speed 為 low。