問題描述
客戶在項(xiàng)目開發(fā)中使用 STM32F427ZGT6 的 SPI 連接外部 Flash 時,發(fā)現(xiàn)在常溫下能正常讀寫,但是在高溫下一段時間后(大概 5 分鐘左右)出現(xiàn)讀寫異常的情況。讀寫異常時發(fā)生在發(fā)送 0x5 指令后,返回數(shù)據(jù)通過軟件讀取的是 0,而硬件抓取的是 1 。同時也發(fā)現(xiàn)同一份代碼,同樣硬件,如果 flash 換成別的廠家的,在同樣溫度條件下又沒有出現(xiàn)讀寫異常。
問題的排查
根據(jù)客戶的描述,初期懷疑是否是不同 Flash 廠家的兼容性問題,現(xiàn)場進(jìn)一步測試,發(fā)現(xiàn)客戶軟件在70℃環(huán)境溫度下,除了 program、erase 時寄存器會讀錯數(shù)據(jù),用只讀指令 0x03 也會讀錯數(shù)據(jù)(0x55、0xaa 會被軟件讀成 0x54、0xab)。
根據(jù)這個結(jié)果,我們懷疑到 tCLQV 這個參數(shù)??瓷先ギ?dāng)前的軟件是在 flash 輸出數(shù)據(jù)時,在 CLK 下降沿時去采集 flash MO 數(shù)據(jù)的,所以高溫引起的細(xì)微的 tCLQV 變化可能會導(dǎo)致軟件采集出錯。 我們建議MCU 在下一個 CLK 的上升沿去采集數(shù)據(jù),此時 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。