目錄預覽
1.問題描述
2.問題的排查
3.原因的進一步分析
客戶在項目開發中使用STM32F427GT6的SPI連接外部Flash時,發現在常溫下能正常讀寫,但是在高溫下一段時間后(大概5分鐘左右)出現讀寫異常的情況。讀寫異常時發生在發送0x5指令后,返回數據通過軟件讀取的是0,而硬件抓取的是1。同時也發現同一份代碼,同樣硬件,如果flash換成別的廠家的,在同樣溫度條件下又沒有出現讀寫異常。
根據客戶的描述,初期懷疑是否是不同Flash廠家的兼容性問題,現場進一步測試,發現客戶軟件在70℃環境溫度下,除了program、erase時寄存器會讀錯數據,用只讀指令0x03也會讀錯數據(0x55、0xaa會被軟件讀成0x54、0xab)。
根據這個結果,我們懷疑到tCLQV這個參數。看上去當前的軟件是在flash輸出數據時,在CLK下降沿時去采集flash MO數據的,所以高溫引起的細微的tCLQV變化可能會導致軟件采集出錯。我們建議MCU在下一個CLK的上升沿去采集數據,此時flash MO數據已經穩定為1。
現場調整GPIO(即flash CLK/SI/SO)OSPEEDR速率后異常現象消失,GPIO速率調整后CLK信號斜率變大,tCLQV跟隨變小,軟件抓到錯誤數據的現象消失,這個實驗結果也與上述tCLQV這個懷疑點相匹配。下面是不同GPIO速率下的測試結果。
GPIO_SPEED_FREQ_LOW,常溫:tCLQV=5.584ns。
GPIO_SPEED_FREQ_LOW,70℃:tCLQV=6.064ns,FAIL。
GPIO_SPEED_FREQ_MEDIUM,70℃:tCLQV=4.805ns。
GPIO_SPEED_FREQ_HIGH,70℃:tCLQV=4.577ns。
進一步了解客戶系統的初始化,其中clock配置信息如下:采用外部晶振為25MHZ,plln=360,pllm=25,pllp=2,pllq=8,系統主頻:25/25*360/2=180MHz,APB2:180/2=90MHz,SPI的波特率為2.8MHz。SPI的引腳設置均為GPIO_Initure.Speed為low。
查找到STM32F42xx的勘誤手冊,我們發現有同樣問題的描述:
對于文檔推薦的2種workaround也和我們測試時發現的一樣。
至此也是能較好的和客戶解釋了MCU底層的一些原理,并建議客戶按照相應workaround的配置,去設定APB總線與OSPEEDR的關系,最終讓問題得以解決。
長按掃碼關注公眾號
更多資訊,盡在STM32
▽點擊“閱讀原文”,可下載原文檔
原文標題:應用筆記 | SPI讀取數據的最后一位出錯問題
文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
-
單片機
+關注
關注
6037文章
44568瀏覽量
636041 -
STM32
+關注
關注
2270文章
10904瀏覽量
356417
原文標題:應用筆記 | SPI讀取數據的最后一位出錯問題
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論