stm32f4的SPI主從機通信怎么做的可靠:
Android做主機,stm32f4做從機,spi,16bit,主機mode3,從機mode0,發送和接收都用dma;
主機設置從機的參數,參數大於2個字節:
發送一個命令字節,16bit=8bit主命令+8bit子命令,忽略返回數據
根據實際情況設置一個或多個參數,忽略返回數據(發送數據填充0xffff)
主機設置從機的參數,參數大於1個字節:
發送一個命令字節,16bit=8bit主命令+8bit數據
主機獲取從機參數:
發送一個命令字節,16bit=8bit主命令+8bit子命令,忽略返回數據
根據實際情況獲取一個或多個參數,忽略發送數據(發送數據填充0xffff)
TIP
stm32f4,spi+dma發送大批量數據時會丟數據,但基本上只會丟最會幾個數,Txdma會一直等待,導致新的命令響應不了,現在的做法是,主機結尾多采集10個數據。這時候速率很快,Receive_DMA中斷,可能響應不及時,IRQ中會報OV溢出錯誤,讓spi的管理狀態復位,spi就響應不了了,因此需要在IRQ中注釋掉溢出錯誤的處理。
Android發送10個自己以內,或2048個數據都可以,但是2047或4096這樣的就發送失敗,安卓IO報錯。