1. 程式人生 > >SPI/I2S除錯總結

SPI/I2S除錯總結

SPI晶片:W25Q16  

I2S晶片:AK4386  

主晶片:STM32F105

1.查詢標誌位:

         1)while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//檢查傳送是否完成

         2)while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//檢查接受標誌位

SPI執行時有一定機率程式會卡死在檢查接受標誌位處RXNE,論壇上的解決方案是將檢查接受標誌位改為檢查忙狀態,即:

         while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY)==SET);

此方案可行。

其根本原因是因為STM32F105的SPI增加了FIFO埠,使傳輸資料有了緩衝區。可以在SPI初始化是增加語句SPI_RxFIFOThresholdConfig(SPI1,SPI_RxFIFOThreshold_QF);,將應答資料位設定為8位。

有些庫函式沒有SPI_RxFIFOThresholdConfig函式,完整函式如下:

/**
  * @brief  Configures the FIFO reception threshold forthe selected SPI.
  * @param  SPIx: where x can be 1 or 2 to select the SPIperipheral.
  * @note   SPI2 is not available for STM32F031 devices.
  * @param  SPI_RxFIFOThreshold: specifies the FIFOreception threshold.
  *          This parameter can be one of thefollowing values:
  *            @arg SPI_RxFIFOThreshold_HF: RXNEevent is generated if the FIFO
  *                                         levelis greater or equal to 1/2.
  *            @arg SPI_RxFIFOThreshold_QF: RXNEevent is generated if the FIFO
  *                                         levelis greater or equal to 1/4.
  * @retval None
  */
voidSPI_RxFIFOThresholdConfig(SPI_TypeDef* SPIx, uint16_t SPI_RxFIFOThreshold)
{
  /* Check the parameters */
  assert_param(IS_SPI_ALL_PERIPH(SPIx));
 assert_param(IS_SPI_RX_FIFO_THRESHOLD(SPI_RxFIFOThreshold));
 
  /* Clear FRXTH bit */
  SPIx->CR2 &=(uint16_t)~((uint16_t)SPI_CR2_FRXTH);
 
  /* Set new FRXTH bit value*/
  SPIx->CR2 |= SPI_RxFIFOThreshold;
}
 

2. STM32105晶片的SPI允許的最大fsck為18MHz,設定分頻係數時注意不要超過這個數。

3.I2S的輸出頻率

音訊的取樣頻率可以是96kHz、48kHz、44.1kHz、32kHz、22.05kHz、16kHz、11.025kHz或者8kHz(或任何此範圍內的數值)。為了獲得需要的頻率,需按照以下公式設定線性分頻器:

1)當需要生成主時鐘時(暫存器SPI_I2SPR的MCKOE位為1):

①聲道的幀長為16位,Fs = I2SxCLK/ [(16*2) * ((2*I2SDIV) + ODD)*8]

②聲道的幀長為32位,Fs =I2SxCLK / [(32*2) * ((2*I2SDIV) + ODD)*4]

2)當關閉主時鐘時(MCKOE位為0):

①聲道的幀長為16位,Fs =I2SxCLK / [(16*2) * ((2*I2SDIV) + ODD)]

②聲道的幀長為32位,Fs =I2SxCLK / [(32*2) * ((2*I2SDIV) + ODD)]

I2SDIV、ODD由暫存器SPI-I2SPR的第[7:0]位和第8位設定。

3.使用SPI,I2S傳送資料時,注意時序,否則資料可能會變成一段一段的。

4.在除錯過程中,更改資料(右移一位,相當於音量減半)再次播放則變成了雜音,其原因為原資料設定成了無符號數,實際上是有正負之分的,單純的右移打亂了資料。

相關推薦

SPI/I2S除錯總結

SPI晶片:W25Q16   I2S晶片:AK4386   主晶片:STM32F105 1.查詢標誌位:          1)while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//檢查傳送是否完成   

Linux中SPI驅動除錯總結

1.先了解一下spi協議的基本資訊,包括spi的工作原理,4中不同模式的區別。 2.新增spi裝置 static struct spi_board_info   xxxxx_spi0_board[] = {      [0] = {               .

SPI,MCP2515除錯總結

MCP2515是一SPI轉CAN匯流排的晶片,對於CPU來說,CPU就是主裝置,SPI就是從裝置,所以在核心裡,MCP2515就是一個SPI裝置,而SPI裝置在核心中的結構是對應的,是一個spi控制器對應一個SPI裝置,也就是一個spi_master對應一個spi裝置,而

ublox NEO-7 SPI介面資料讀取除錯總結

        最近在除錯ublox NEO-7 GPS,主控晶片為TMS320C6722,這款DSP外設沒有UART,所以用SPI匯流排與GPS進行通訊。最初想在網上搜一些關於SPI介面的ublox資料讀取經驗,但網上都是清一色的UART介面讀取ublox資料。通過這兩天

A64 I2S除錯

通過A64 的I2S匯流排與迴音消除模組連線,在A64中需要使能並配置daudio功能。 Daudio 為A64 的數字音訊介面,可配置成i2s/pcm格式標準音頻介面。   核心配置在lichee/linux-3.10/ 下執行make ARCH=arm64 menuconfig 選中 “

PIC微控制器除錯總結

使用程式設計環境 :MPLAB X IDE V3.40 微控制器 :p33FJ64GS606 模擬器 :pickit3 問題       :斷點無法解析為有效的程式儲存器地址,及模擬無法          

關於SPI的一點總結

1 由於產品需要現在想共用SPI匯流排而且是用模擬SPI的方式來實現,共用的方式為SPI有4根線分別為MOSI  MISO  NSS  CLK  兩個IC共用MOSI   MISO   CLK 但是NSS分開當用那個的時候,將那個的NS

GDB除錯總結和例項

1)啟動gdb gdb hello 或者 gdb file hello 2)顯示程式 list 或者 l 3)打斷點 break(b) main() //函式的入口處 break(b) 11 //行號 break(b) hello.c:14 //

電池驅動除錯總結,電池服務+電量計驅動+除錯方法

1.概述: Android電池服務,用來監聽核心上報的電池事件,並將最新的電池資料上報給系統,系統收到新資料後會去更新電池顯示狀態、剩餘電量等資訊。如果收到過溫報警和低電報警,系統會自動觸發關機流程,保護電池和機器不受到危害。 Android電池服務的啟動和執行流程: And

轉載xilinx-DDR3 ip 核:DDR3除錯總結

DDR3除錯總結        以前同是DDR3的無知少年,由於專案需求、工作需要,有幸深入研究DDR3,中間也確實歷經各種盲目階段,查詢資料、建立工程、除錯錯誤等等,如今對此不敢說是精通,也只能說是基本入門,寫此文章的目的也無非是想讓那些和當初的我一樣的初學者少走些彎

STM32 SPI通訊協議總結

簡介        SPI是一種高速的,全雙工,同步的通訊匯流排,並且在晶片的管腳上只佔用四根線,以主從方式工作,這種模式通常有一個主裝置和一個或多個從裝置,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基於SPI的裝置共有的,它們是SDI(資料輸入),SDO(資

電池驅動除錯總結

1.概述:  Android電池服務,用來監聽核心上報的電池事件,並將最新的電池資料上報給系統,系統收到新資料後會去更新電池顯示狀態、剩餘電量等資訊。如果收到過溫報警和低電報警,系統會自動觸發關機流程,保護電池和機器不受到危害。  Android電池服務的啟動和執行流程:&nbs

SPI讀寫總結

SPI協議是主從模式:從機不主動發起訪問,總是被動執行操作。CSN:片選訊號。SCK:時鐘訊號。MOSI:master output slave input,即主機輸出從機輸入。可以理解主機寫從裝置。MISO:master input slave output,即主機輸入從機

H-Jtag介面板除錯總結

這個錯誤提示的是不能將驅動下載到正確的地址,這裡的合適的地址只得就是sdram,因為我們如果通過jtag埠控制flash晶片時,我們依然需要將flash的驅動通過jtag口將其下載到sdram中,這樣flash才能執行。出現這個錯誤我目前我接觸到的就兩個原因:一個是sdram虛焊或者壞掉了,或者周圍的電容電阻

前端chrome瀏覽器除錯總結

引言 “工欲善其事,必先利其器” 恩,這句話我覺得說的特別有道理,舉個例子來說吧,厲害的化妝師都有一套非常專業的刷子,散粉刷負責定妝,眼影刷負責打眼影,各司其職,有了專業的工具才能幹專業的事,這個靈感要來源於之前我想買化妝品時,店裡的海報標語,由此聯想到,如果你想在某個事情上做好,並且做的專業,那麼你一定要

Spark 原始碼除錯總結

最近在測試 Spark 2.3 的效能,其中踩的一些坑,除錯原始碼的一些技巧,適當記錄一下。本文是個人隨筆,也許邏輯不夠清晰,內容較多,敬請諒解。 首先 Spark 原始碼的基本斷點除錯,包括修改,仍然首推老大翟士丹的blog,其中有一些遠端除錯的操作。我們對於一個 S

Segmentation fault段錯誤除錯總結

Segmetation fault也叫做段錯誤,引發的原因有好多,這裡我們只說一下段錯誤發生時的除錯方法。 方法1:加列印printf。這是最基本的往往也很有效的方法,在哪裡Core掉就會在哪裡停止列印--一目瞭然。同時這種方法也存在一個致命缺陷:如果恰巧Core掉的地方沒

千兆網口、光口除錯總結

1000BASE-X模式下PCS所在的OSI七層模型 PCS是物理編碼子層,通過將8bit的資料編碼成10bit傳送給PMA(physical media attach)層,千兆編碼方式是8B/10B,每個傳送碼元表示5符號-2、-1、0、1、2中的一個符號,故每個碼元代表2位元資訊(4電平中每個電平代表2

ESP8266連線機智雲---------除錯總結

ESP8266樂鑫模組的燒錄 有道雲筆記連結: 關於esp8266的引腳圖說明如下: 燒錄過程的問題: 按接線方式連線好後沒有正常燒錄,而是顯示等待同步上電,之後出現一個錯誤。原因在於我使用的是開發板原本燒錄串列埠程式,一直髮送資料導致錯誤。當我在寫這個文件

MIPI LCD除錯總結

近來在用SSD2828驅動小米屏,沒有程式碼,沒有技術支援,自己寫程式碼反覆除錯,整死我了,目前已經能正常顯示圖片,現在總結一下與大家分享一下,要點:1. 小米3屏的解析度是1920*1080, 24bit, 行列畫素點為1080*1920, 預設顯示方式為從左->右