VS1053
? ? ?(1)VS1053通過7根線同MCU連接,如下:
??VS_RST:VS1053的復位信號線,低電平有效。
? ? ? ??VS_DREQ:數據請求信號(高電平有效),用來通知主機,VS1053是否
? ? ? ? ? ? ? ? ? ? ? ? ? ? 可以接收數據。?
? ? ? ??VS_XCS:命令片選(低電平有效)。
? ? ? ? ?VS_XDCS:數據片選(低電平有效)。
? ? ?VS_MISO、VS_MOSI和VS_SCK:SPI信號線。?
(2)在XCS變成低電平后,SCK的第一個上升沿標志著第一個數據被寫入。? VS1053的SPI數據傳送,分為SDI和SCI,分別用來傳輸數據/命令。
SDI采用SPI協議,不過,數據傳輸受DREQ控制,主機在判斷DREQ有效(高電平)之后,直接發送數據即可(一次可以發送32個字節)。
SCI串行總線命令接口包含了一個指令字節、一個地址字節(低四位有效)和一個16位的數據字。讀寫操作可以讀寫單個寄存器,在SCK的上升沿讀出數據位,所以主機必須在下
降沿刷新 數據。SCI的字節數據總是高位在前低位在后的。第一個字節指令字節,只有2個指令,也就是讀和寫,讀為0X03,寫為0X02。
SCI讀時序
SCI寫時序
注意:在讀和寫時序圖中,DREQ信號上都產生了一個短暫的低脈沖,也就是執行時間,在寫入和讀出VS1053的數據之后,它需要一些時間來處理內部的事情,這段
時間,是不允許外部打斷的。所以,在SCI操作之前,最好判斷一下DREQ是否為高電平,如果不是,則等待DREQ變為高。
(3)MODE寄存器(0X00)
該寄存器,我們只介紹:SM_RESET(bit2)和SM_SDINEW(bit11)位。 ??
SM_RESET:軟件復位,建議在每播放一首歌曲之后,軟復位一次。
SM_SDINEW:模式設置位,設置為1,選擇VS1002新模式(本地模式)。
其他位的詳細介紹,請參考:VS1053_cn.pdf。
(4)BASS寄存器(0X02)
[0:7]控制低音 ?[8:15]控制高音
該寄存器可以用于設置VS1053的高低音效,通過這個寄存器以上位的一些設置,我們可以隨意配置自己喜歡的音效(其實就是高低音的調節)。
? ? ? ? 注意:EarSpeaker效果由MODE寄存器控制。
(5)CLOCKF寄存器(0X03)
該寄存器用來設置時鐘頻率、倍頻等相關信息。其中:SC_FREQ是以4Khz為步進的一個時鐘寄存器,當外部時鐘是12.288M的時候,設置為0即可。
? ? ? XTALI是外部晶振的時鐘頻率(單位為:Hz )。CLKI是內部時鐘頻率。由于我們使用的是12.288M的晶振,在這里設置此寄存器的值為0X9800,也就是設置內部
時鐘頻率為輸入時鐘頻率的3倍(SC_MULT=0X100),倍頻增量為1.5倍(SC_ADD=0X11),SC_FREQ=0X00000000000。
(5)HDAT0&HDAT1寄存器(0X08&0X09)
?這兩個寄存器,是數據流頭寄存器,不同的音頻文件,讀出來的值意義不一樣,我們可以通過這兩個寄存器來獲取音頻文件的碼率,從而可以計算音頻文件的總
長度。這兩個寄存器的詳細介紹,請參考:VS1053的數據手冊(VS1053_cn.pdf)。
(6)VOL寄存器(0X0B)
該寄存器用于控制VS1053的輸出音量,該寄存器可以分別控制左右聲道的音量,每個聲道的控制范圍為0~254,每個增量代表0.5db的衰減,所以該值越小,代表
音量越大。比如設置為0X0000(高八位和第八位分別控制左右聲道)則音量最大,而設置為0XFEFE則音量最小。
? ? ? ?注意:如果設置VOL的值為0XFFFF,將使芯片進入掉電模式!?
(7)VS1053初始化步驟
①復位VS1053
?包括硬復位和軟復位,讓VS1053恢復初始狀態,準備解碼下一首歌曲。在每首歌曲播放之前都可以執行一次硬件復位和軟件復位,以便更好的播放音樂。
②配置VS1053的相關寄存器
這里我們配置的寄存器包括VS1053的模式寄存器(MODE)、時鐘寄存器(CLOCKF)、音調寄存器(BASS)、音量寄存器(VOL)等。
③發送音頻數據
經過以上①、②配置以后,我們剩下來要做的事情,就是往VS1053里面發送音頻數據,只要是VS1053支持的音頻格式,直接往里面丟就可以了,VS1053會
自動識別,并進行播放。不過,發送數據要在DREQ信號的控制下有序的進行,不能亂發。這個規則很簡單:只要DREQ變高,就向VS1053發送32個字節。然后繼續等待DREQ
變高,直到音頻數據發送完。(暫停的實現:MCU不發送數據到VS1053,快進:)
總結
- 上一篇: 学习SPI的一些疑惑
- 下一篇: 内存管理代码分析 stm32