使用RDA5807m实现调台收音功能

  • 连续读写方式
  • 标准IIC读写方式
  • 过程记录

最近用RDA5807M实现调台收音的功能,在这里记录下整个历程(主要是程序实现)。
RDA5807是用IIC协议通信的,我用stm32作为控制器,通过CLOCK和DATA两个引脚和stm32连接,外围电路按照规格书给的应用电路。

RDA5807M的datasheet只给出了连续读写的方式,但在其他系列比如RDA5807N编程指南里描述了标准IIC读写方式,区别于IIC的器件地址不同。

连续读写方式

连续读写方式的器件地址是0010000B,加上读写标志,即0x20(写操作)和0x21(读操作)。
连续读写的方式不可以直接操作寄存器的地址,只有一个固定的开始寄存器地址,(写0x02H,读0x0AH),内部有一个增量地址计数器。
每个寄存器都是16bit的,写寄存器默认从0x02H开始,按字节算,写进去的数据依次为0x02H的高字节,0x02H低字节,0x03H高字节…,读寄存器时,默认从0x0AH开始读,所以读出来的数据依次是0x0AH的高字节,0x0AH的低字节…
读写顺序按照datasheeet给出的时序图,用stm32任意两个引脚模拟IIC通信,要注意在发送之后是否有收到ACK。

标准IIC读写方式

这是带寄存器地址的方式,IIC器件地址0010000B,加上读写标志,即0x22(写),0x23(读),这种方式可以单独对相应的寄存器操作,并且可以直接读写每一个寄存器。

过程记录

开始的时候这两种读写方式我都尝试过,都遇到了不同的问题。
一开始我先用标准读写方式,我能够读写,但是02H和03H这两个写不进去,写完以后读出来的跟写的不一样。
于是我就改成了用连续读写的方式,不能实现连续写,写入两个字节之后再继续写就收不到ACK。搜了很多东西,也请教了曾经做过这个的大佬,他们当时遇到的问题是IIC延时太短,来不及收到ACK,我也试过还是不行,各种办法都试了一下,甚至还有一天试了个通宵。
一个星期之后另一个队友重做了一块板(之前在IIC接口加了上拉电阻没有用,重做板之后03H还是读出来不对),加了上拉之后,其他都正常,这次的问题是03H的第四位写1读出来是0,但实际是可以正常工作。
还要注意的是IIC通信,串口通信对传输线的要求比较高,之前用杜邦线,传输数据会乱,所以建议做通信绝对不要用杜邦线。还有前面提到的延时也是必要的。频繁读写会造成RDA不正常工作或者出现奇怪的音效。
实现调频率收音也就是TUNE模式主要设置02H,03H以及读0AH,0BH。

排除所有不可能的,剩下的那个即使再不可思议,那也是事实

在什么尝试都没有用的时候,怀疑板的问题是很合理的,确认代码没有问题的情况下板也查不出来什么的时候不如重做一块。

下面是基于stm32模拟IIC的代码,按照标准IIC读写的方式

//读写寄存器
unsigned int ReadReg(u8 reg_Addr)
{unsigned int buf = 0;IIC_Start();IIC_Send_Byte(RDA_WRITE);IIC_Wait_Ack();IIC_Send_Byte(reg_Addr);IIC_Wait_Ack();IIC_Start();IIC_Send_Byte(RDA_READ);IIC_Wait_Ack();buf = IIC_Read_Byte(1);buf = buf<<8;buf = buf|IIC_Read_Byte(0);IIC_Stop();return buf;
}
void WriteReg(u8 reg_Addr, u16 value)
{IIC_Start();IIC_Send_Byte(RDA_WRITE);IIC_Wait_Ack();IIC_Send_Byte(reg_Addr);IIC_Wait_Ack();IIC_Send_Byte(value>>8);IIC_Wait_Ack();IIC_Send_Byte(value&0xFF);IIC_NAck();IIC_Stop();
}
RDA FM系列芯片的初始操作顺序:复位 → 读取芯片ID(可有可无) → 上电(使能) → 写初始化数据。

复位和使能后都需要延时(尤其是使能后)
RDA5807M初始化:

void RDA_init(void)
{unsigned int temp;WriteReg(RDA_R02,0x0002);  delay_ms(50);WriteReg(RDA_R02,0xc001);delay_ms(600);WriteReg(RDA_R03,0x1A10);WriteReg(RDA_R04,0x0400);WriteReg(RDA_R05,0x86ad);WriteReg(0x06,0x8000);WriteReg(0x07,0x5F1A);
}
 Frequency = Channel Spacing (kHz) x CHAN+ 87.0 MHz

设置频率(设置频率之后一定要延时):

void Set_Fre(u32 fre)  //88MHz~108MHz  200KHz步进
{u16 chan, temp;chan = (int)((fre-87000)/200);temp |= chan<<6;//chan[15:6]temp |= 1<<4;      //tune enabletemp |= 1;      //200kWriteReg(RDA_R03, temp);delay_ms(40);
}

写完之后读寄存器测试读的和写的是否对应
最后能够实现功能感谢队友
感谢不放弃

以上部分内容参考RDA5807M datasheet和RDA5807N 编程指南

用RDA5807M实现收音机功能相关推荐

  1. Android开发收音机功能,基于Android系统的FM收音机功能的设计与实现

    摘要: 随着移动互联网时代的到来,智能移动终端产业也迎来了繁荣期.各手机厂商争相推出自己的智能手机和平板电脑.其中安卓系统由于其源码的开放性以及不错的用户体验,而得到了各大手机厂商以及手机应用开发人员 ...

  2. 自制的万年历收音机功能完工。

    正在清除小的bug,完善功能. 转载于:https://www.cnblogs.com/pulan/archive/2012/02/29/2921594.html

  3. 国美GOME U7 启用自带fm收音机功能,无需流量和wifi便可畅听广播.2021-12-23

    这款手机自带了硬件级fm无线接收功能,同时软硬件条件均满足,但很可惜的是商家不知出于什么原因将已经完备的功能做了隐藏-------没有桌面快捷键.但是可以在系统的系统软件进程列表里看到这个玩意 下载一 ...

  4. 基于Arduino nano 的RDA5807M的收音机(一)

    一:准备工作 软件:1.arduino-1.8.8-windows.exe(可去官网直接下载 https://www.arduino.cc/en/Main/Software) 2.串口调试助手 3.串 ...

  5. Android开发收音机功能,Android实现的网络收音机示例利用Vitamio组件

    Vitamio组件异常强大,请自行百度,android开源的媒体处理框架,无所不能 本项目需要Vitamio项目作为引用项目(Android Library) xmlns:tools="ht ...

  6. 不需要网络的调频收音机_单片调频接收机

    无线广播曾经是上个世纪的人们快速获得资讯和实时娱乐节目的手段.商用广播包括有中波调幅(AM),短波调幅和调频(FM)广播等.调频广播由于使用更高的无线频段,可以提供更加优质声音,容纳更多的电台,现在仍 ...

  7. arduino使用oled代码_用 Arduino 制造一台 FM 调频收音机

    这是一个基于 Arduino 的开源的收音机项目,它具备一台标准收音机的全部功能,从控制部分到外壳都可以自己 DIY.在项目中,我们将介绍让 FM 收音机调谐器的 RDA5807 模块与 I2C 协议 ...

  8. 挑战IPOD功能最强MP3——Zune二代评测

    挑战IPOD功能最强MP3--Zune二代评测 买来Zune2代是1个月以前的事,拿来使用了一段时间.发现与其相处的过程是一个不断发现惊喜的过程,以至于不断的感叹于Zune二代的各种神奇之处.本人的小 ...

  9. 基于STM32的多功能MP3设计 毕业设计(论文)开题报告

    中国计量学院 毕业设计(论文)开题报告 学生姓名:卢杰学 号:XXXXXXXXX 专    业:电子科学与技术 班    级:10电子1 设计(论文)题目: 基于STM32的多功能MP3设计 指导教师 ...

最新文章

  1. 死磕 java集合之TreeMap源码分析(一)——红黑树全解析
  2. mysql z中文乱码_c#写入Mysql中文显示乱码 解决方法 z
  3. 二、前端开发-HTML
  4. DPM2012保护sharepoint场
  5. php exec grep 写错误,又遇到了grep的结果毫无意义的错误性显示
  6. mysql event type_MySQL 【Row】下的 Event_type
  7. Find命令使用详解
  8. c实现三角形角度大于一个值_初中数学三角形知识点小结
  9. 工作325:uni-格式化日期
  10. libfacedetection库 yufacedetectnet-open-v1.prototxt详解
  11. 数据3分钟丨Databricks与Snowflake开撕;阿里云多款自研数据库支撑首个“100%云上双11”...
  12. jenkins构建后接受者收不到邮件问题解决方案
  13. python 数组学习
  14. 教你一分钟制作超炫Flash翻页相册
  15. tomcat 日志切割
  16. b站python_python学习 —— B站抢楼原理
  17. 前端获取北京时间_js获取北京时间
  18. 屠龙少年终成恶龙!Adobe豪掷200亿美元收购Figma,设计圈炸了!
  19. 倍思 O HUB Type-C多功能转换器 兼容多设备 快速拔插使用简单倍思 O
  20. Fastdfs 卸载

热门文章

  1. python爬虫之使用BeautifulSoup模块抓取500彩票网竞彩足球赛果及赔率
  2. 游匣G15怎么样 游戏评测来了
  3. 【Hive】Hive入门解析(一)
  4. windows 禁用win任务管理器
  5. VPS是干嘛用的?有哪些知名牌子?与云服务器有什么区别?
  6. wro4j的js和css压缩技术
  7. c语言main方法返回至爱,extern C的用法解析
  8. FTP服务器vsftpd安装架设
  9. SwiftUI 基async/await and actors ObservableObject 实现Autocomplete自动完成组件
  10. 带有默认参数值的构造函数