RDA5807M開發指南 & 開源庫函數
文檔標識符:RDA5807M_T-D-P16
作者:DLHC
最後修改日期:2022.1.14
最後修改內容:修改、添加內容
發布狀態:已發布
本文鏈接://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: //github.com/HaochuanDeng/RDA5807M
聲明
本文未經DLHC允許,禁止轉載。DLHC保留所有權利。
由於本人學識有限,加上整理較為倉促,如有錯誤,懇請指正,謝謝!