文檔標識符: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保留所有權利。
由於本人學識有限,加上整理較爲倉促,如有錯誤,懇請指正,謝謝!