? ? ? ? 最近在做一個(gè)多MCU的項(xiàng)目時(shí),MCU之間的數(shù)據(jù)傳輸使用了SPI通信,在做從機(jī)時(shí)遇到了一些 “疑難雜癥”,研究了半天,總算是把故障排除了,就又總結(jié)了一下SPI常遇到的幾種問題寫出來整理一下。
目錄
一、SPI簡介:
?二、常見問題:
三、疑難雜癥:
Q1:使用的HAL庫,先開從機(jī),然后再給主機(jī)上電,通信正常,但是同時(shí)上電,即便是給主機(jī)加了延時(shí)都通信異常。
Q2:使用的DMA收發(fā),單獨(dú)測試一切正常,但是只要跟其他DMA同時(shí)使用就死機(jī)
四、SPI的穩(wěn)定性優(yōu)化:
一、SPI簡介:
? ? ? ? SPI是一種高速,全雙工的串行通信協(xié)議,由Motorola首先提出,其通信速率可輕松超過10Mbps
(詳見文章:STM32初學(xué)入門筆記(4):一文解析常見通信協(xié)議(USATR/UART,SPI,IIC))
?二、常見問題:
? ? ? ? 從結(jié)果來看,常見的問題可大致分為兩種:
? ? ? ? 1:主從完全無法通信
? ? ? ? 2:從機(jī)接收到的數(shù)據(jù)亂碼,移位等數(shù)據(jù)異常
? ? ? ? 第一種情況多是由硬件導(dǎo)致的,如SCK接到了MOSI,或者主從MOSI和MISO反接了(總之就是線沒接對),也有可能是因?yàn)槌跏蓟瘯r(shí)沒有開啟SPI的時(shí)鐘,或是沒有配置IO口等軟件問題。
? ? ? ? 其中我們經(jīng)常遇到的是第二種,導(dǎo)致第二種的原因通常有:
? ? ? ? 1、硬錯(cuò)誤:即硬件連接出現(xiàn)的錯(cuò)誤,如接觸不良,接線過長,噪聲過大等,常見于數(shù)據(jù)亂碼,移位的問題中。
? ? ? ? 2、軟錯(cuò)誤:若發(fā)生數(shù)據(jù)移位,且確定硬件無誤,則優(yōu)先排查主從機(jī)的數(shù)據(jù)長度是否一致,如主機(jī)發(fā)送的數(shù)據(jù)為16bits,從機(jī)接收的為8bits,如果從機(jī)項(xiàng)目使用了多個(gè)中斷,應(yīng)保證DMA的優(yōu)先級最高,以保證能夠完整獲取數(shù)據(jù)包。此外,如果發(fā)送的是數(shù)組,還有可能數(shù)據(jù)內(nèi)的數(shù)據(jù)出現(xiàn)錯(cuò)位,這種情況則應(yīng)檢查主從機(jī)數(shù)據(jù)包大小是否一致,如果使用的是DMA接收,則還有可能是因?yàn)?strong>在DMA傳輸完成中斷中再次開啟DMA時(shí)設(shè)置的數(shù)據(jù)包大小異常(總之就是數(shù)據(jù)包大小的問題)。數(shù)據(jù)亂碼在本質(zhì)上還是發(fā)生了數(shù)據(jù)移位,導(dǎo)致數(shù)據(jù)異常無法識別,從而引起亂碼,使用移位的排查方法即可,這里不再重復(fù)。
三、疑難雜癥:
Q1:使用的HAL庫,先開從機(jī),然后再給主機(jī)上電,通信正常,但是同時(shí)上電,即便是給主機(jī)加了延時(shí)都通信異常。
A:首先應(yīng)排查硬件上的問題,如芯片間的去耦電容是否正常,電源是否穩(wěn)定,如果確定了硬件沒有問題,就使用硬件片選試試,非常穩(wěn)定,主從同時(shí)上電即使主機(jī)不加延時(shí)也不會引起通信異常。具體原因不詳,個(gè)人猜測應(yīng)該是HAL庫的問題
Q2:使用的DMA收發(fā),單獨(dú)測試一切正常,但是只要跟其他DMA同時(shí)使用就死機(jī)
A:?嘗試增大堆棧,STM32死機(jī)很大一部分原因是堆棧溢出(DMA是要用到堆棧的)
四、SPI的穩(wěn)定性優(yōu)化:
1,通信速率:主機(jī)的通信速率盡量不要超過從機(jī)SPI的最大速率
2,CRC校驗(yàn):如果工作環(huán)境較為惡劣,有較大的噪聲干擾,推薦開啟CRC校驗(yàn)文章來源:http://www.zghlxwxcb.cn/news/detail-832419.html
3,硬件片選:雖然從理論上講,只有主機(jī)和從機(jī)片選開不開無所謂,但是經(jīng)過向多名開發(fā)者驗(yàn)證和我的多次測試,發(fā)現(xiàn)開啟硬件片選可以大大提升SPI通信穩(wěn)定性,甚至可以直接解決疑難雜癥一文章來源地址http://www.zghlxwxcb.cn/news/detail-832419.html
到了這里,關(guān)于STM32使用SPI通信時(shí)的一些常見問題及解決方法(主,從)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!