RDA5807M開發指南 & 開源庫函數

文檔標識符:RDA5807M_T-D-P16

作者:DLHC

最後修改日期:2022.1.14

最後修改內容:修改、添加內容

發佈狀態:已發佈

本文鏈接:https://www.cnblogs.com/DLHC-TECH/p/RDA5807M_T-D-P16.html

 

前言

    RDA5807M是一款基於CMOS(互補金屬氧化物半導體)工藝、單芯片、低功耗的FM廣播立體聲調諧芯片,支持50MHz--115MHz的頻率範圍,音頻輸出最大負載爲32Ω,支持標準的 I^2C 總線協議。關於RDA5807M的更多特性見圖0.0,RDA5807M內部各模塊框圖見圖0.1。基於RDA5807M的收音機模塊售價在1元左右,實物見圖0.2和圖0.3。

    以開發者的角度,RDA5807M可實現以下基本功能:

     1.基本控制(電源、時鐘等)

     2.調諧控制(調諧到指定頻率)

     3.自動搜臺(可設置SNR(信噪比)閾值)

     4.獲取RSSI(當前頻率的無線電信號強度)

     5.獲取當前電臺的頻率、RDS/RBDS等信息(RDS/RBDS需要軟件解碼,RDA5807M只獲取原始數據)

     6.音頻控制(音量調節、BASS(低音增強)、噪聲抑制、立體聲等)

    從模塊框圖中可以看出:天線來的信號通過LNA(低噪聲放大器)(具有限幅功能)放大,由6個混頻器組成的網絡將放大後的RF信號下變頻到IF上並將其分爲I(同相,Inphase,I)和Q(正交,Quadrature,Q)兩個部分,這兩個信號分量分別通過PGA(可編程增益放大器)放大後送至ADC(模數轉換器),ADC對這兩個模擬的IF信號進行採樣並將其轉換爲數字信號,以產生相應的數字I/Q樣本,上述數字信號經DSP(數字信號處理器)通過相應的算法(抽取、數字濾波、解調等)處理後,得到無線電載波上的有效數據。該有效數據包括音頻流、RDS/RDBS原始數據以及其他的數據,音頻流通過DAC(數模轉換器)轉換爲模擬信號並驅動揚聲器發聲,RDS/RBDS原始數據與其他數據存儲在芯片中,用戶可以通過I^2C通信協議獲取它們並進行相應的解碼。同時,外部的時鐘信號通過同步器後驅動VCO(壓控振盪器)產生一個時鐘信號提供給混頻器網絡和DSP,以實現下變頻並提供同步信號。此外,芯片上還集成了LDO(低壓差線性穩壓器),用於爲片上相關的模塊提供電源。

    總的來說,RDA5807M具有功能完善、價格便宜、功耗低、開發簡單等優點,是一款不錯的FM廣播立體聲調諧芯片(如果它內部的DSP功能再多一點,就差不多是一個SDR(軟件定義無線電)了。但是,由於數據手冊提供的信息有限,部分描述需要揣測作者意圖,並且RDS/RBDS技術在國內普及度不高,部分部分功能暫無法測試和實現。

圖0.0-RDA5807M的特性

圖0.1-RDA5807M內部各模塊框圖

圖0.2-RDA5807M收音機模塊實物(正)

圖0.3-RDA5807M收音機模塊實物(反)

圖0.4-RDA5807M芯片封裝(正)

圖0.5-RDA5807M芯片封裝(反)

圖0.6-RDA5807M(dieshot) ©DLHC

 

測試電路

    測試電路主要爲RDA5807M收音機模塊提供電源、I^2C接口、音頻接口、射頻接口、以及其他的外部元件,測試電路圖見圖1.0。

    I^2C 接口電路是單片機與RDA5807M通訊的“橋樑”,設計電路時需要注意電壓最大最小值、邏輯電平兼容性、扇入扇出數、寄生電容、時鐘速度以及傳輸線長度等基本因素(詳細請參考 I^2C 標準),並且可以不用接外部上拉電阻(RDA5807M內部 I^2C 端口的OD門集成了上拉電阻與驅動反相器)。

    RDA5807M的電氣特性見圖1.1、圖1.2和圖1.3。

    電源電壓範圍:1.8v-3.3v。IO端口輸入電壓範圍:-0.5v-+3.3v。輸入邏輯高電平最小值:0.7VIO,輸入邏輯低電平最大值:0.3VIO。

    其中此芯片正常工作時功耗爲60mW,最低爲15uW,適用於對功耗控制嚴格的場所。

圖1.0-測試電路圖

圖1.1-推薦操作條件

圖1.2-各項最大指標

圖1.3-功耗指標

圖1.4-測試電路BOM

圖1.5-測試電路(正)

圖1.6-測試電路(反)

 

 I^2C 驅動層

    RDA5807M支持兩種 I^2C 通信模式:1.連續讀寫方式。2.標準 I^2C 讀寫方式。由於連續讀寫方式比較難以理解和實現,故本文只介紹標準讀寫方式。

    標準 I^2C 讀寫方式:該模式與標準 I^2C 讀寫方式一致,即帶寄存器地址的方式。RDA5807M的 I^2C 器件地址爲 0010,0010B,加上讀寫標誌位,即爲 0x22(寫操作)和 0x23(讀操作),具體的通信格式見圖2.0。

    寫時序:主機發送起始信號,發送從機(RDA5807M)地址加上W位,等待從機響應。從機響應成功後,發送待寫入的寄存器地址,等待從機響應。從機響應成功後,發送待寫入數據的高八位,等待從機響應。從機響應成功後,發送待寫入的數據的低八位,此時從機會響應或不響應。最後,主機發送停止信號。

    讀時序:主機發送起始信號,發送從機(RDA5807M)地址加上W位,等待從機響應。從機響應成功後,發送待讀取的寄存器地址,等待從機響應或不響應。主機發送起始信號,發送從機(RDA5807M)地址加上R位,等待從機響應。從機響應成功後,接收寄存器高八位,主機向從機響應,接收寄存器低八位,主機不響應。最後,主機發送停止信號。

    本非官方標準庫在 I^2C 底層驅動實現了:

      1. I^2C 初始化。

      2.向指定寄存器地址寫入一個半字(16位)。

      3.從指定寄存器地址讀取一個半字。

    有關 I^2C 的通信協議的源碼在 I^2C.c 和 I^2C.h 兩個文件中,基於STM32標準庫開發。I^2C 的通訊速率儘量不要太高,否則會導致時序緊張(最終陷入死循環)。

圖2.0-標準 I^2C 讀寫方式時序圖

 

初級驅動層

    初級驅動層建立在 I^2C 驅動層之上,主要是對RDA5807M內部寄存器進行位寫入、位讀取(精細操作),方便後面應用驅動層的開發。初級驅動層實現了以下功能(以下列舉的均爲函數名稱 + 簡要註釋,源碼見 RDA5807M.c 與 RDA5807M.h,更多信息請參考RDA5807M數據手冊):

//其他

    Direct_Mode  //直接控制模式

    De_Emphasis//信號還原

    Open_Mode  //保留寄存器寫權限

 

//音頻

    Soft_MUTE_EN    //軟件靜音控制使能

    Th_SoftBlend_Set//噪聲抑制閾值

    SoftBlend_EN      //噪聲抑制控制

    ST_Status            //立體/單聲道標誌

 

//控制

    RCLK_Mode      //RCLK模式

    RCLK_Direct_In//RCLK直接輸入

 

//自動搜臺

    Seek_Dir              //自動搜臺方向

    Seek                     //自動搜臺控制

    Seek_Mode         //自動搜臺模式

    SeekTh_Set         //自動搜臺信噪比閾值

    SeekTh_Old_Set //自動搜臺信噪比閾值(舊搜臺模式)

    STC_Status         //自動搜臺/調諧完畢標誌

    SF_Status           //自動搜臺失敗標誌

 

//RDS/RBDS

    Interrupt_Mode  //中斷模式

    RDS_Status        //RDS/RBDS支持狀態

    RDSS_Status     //RDS解碼器同步標誌

    Block_E_Status //BLOCK_E發現標誌

    ABCD_E_Ststus//寄存器0x0C,0x0D,0x0E,0x0F是數據塊ABCD或E標誌

    BLERA_Status  //RDS_DATA0塊錯誤率

    BLERB_Status  //RDS_DATA1塊錯誤率

    RDSA_Status   //BLOCK_A(RDS模式)或BLOCK_E(RBDS模式)

    RDSB_Status   //BLOCK_B(RDS模式)或BLOCK_E(RBDS模式)

    RDSC_Status   //BLOCK_C(RDS模式)或BLOCK_E(RBDS模式)

    RDSD_Status   //BLOCK_D(RDS模式)或BLOCK_E(RBDS模式)

 

//無線電

    New_Demodulate_Method//新解調模式

    TUNE                                     //調諧

    FM_Ture_Status                  //當前頻道是否爲station

    FM_Ready_Status               //FM準備狀態

 

//頻率    

    CHAN_Set               //調諧頻率設定

    Freq_Mode             //頻率模式(另外一種改變頻率的方式)

    ReadChan_Status //當前頻率

 

應用驅動層

    應用驅動層建立在初級驅動層之上,用戶可以"直接"調用本層的函數以實現對RDA5807M的控制。

    本層主要實現了以下功能:

       1.基本控制(電源、時鐘等)

       2.自動搜臺(可設置SNR(信噪比)閾值)

       3.獲取RSSI(當前頻率的無線電信號強度)

       4.獲取當前電臺的頻率

       5.音頻控制(音量調節、低音增強、噪聲抑制、立體聲等)

    以下列舉的均爲函數名稱 + 簡要註釋,詳細源碼見RDA5807M.c 與 RDA5807M.h,更多信息請參考RDA5807M數據手冊:

//其他

    Get_Chip_ID        //讀器件ID

 

//音頻

    SoftBlend_Control //噪聲抑制

    Audio_Init               //音頻初始化

    Volume_Set           //DAC增益控制/輸出音量控制

    BASS                      //低音增強

    Stereo_Mono_Sel//立體聲/單聲道選擇

    Audio_Out_HZ      //音頻輸出高阻態

    MUTE                    //靜音控制

 

//控制

    CLK_Mode //輸入時鐘頻率選擇

    Soft_RST   //軟件復位

    PWR_UP   //上電

    Sys_Init     //系統初始化

 

//自動搜臺

    Seek_Control    //自動搜臺

 

//RDS/RBDS

    RDS_RBDS_Ctl //RDS/RBDS使能

    RDS_Decode    //RDS解碼

 

//無線電

    BAND_Set     //頻帶選擇

    SPACE_Set   //頻道跳躍間隔設置

    RSSI_Status //無線電信號強度

    Freq_Set       //調諧到指定頻率

    Tune_Status//檢查調諧狀態

 

//頻率  

    AFC                                   //自動頻率控制

    F_65_76M_50_76M_Sel//65_76M/50_76M頻帶選擇

    Get_Freq                          //獲取當前頻率(MHz)

 

後續開發

    由於部分內容在數據手冊中的描述過於簡略,以及RDS/RBDS在國內不普及,部分功能的測試無法進行。以下是後續開發的方向:

      1.調諧控制(調諧到指定的頻率)

      2.RDS/RBDS等信息的獲取與解碼(RDS/RBDS需要軟件解碼,RDA5807M只是獲取原始數據)

 

代碼託管地址 

    github: https://github.com/HaochuanDeng/RDA5807M

 

聲明

    本文未經DLHC允許,禁止轉載。DLHC保留所有權利。

    由於本人學識有限,加上整理較爲倉促,如有錯誤,懇請指正,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章