当前位置: 首页 > news >正文

基于 RA8P1 的数字录音与播放工程

本篇在原有触摸屏的基础上新增数字录音功能:按屏幕按钮即可录音,声音经 WM8960 音频编解码器采集,以 WAV 格式存入 SD 卡,录完自动回放。

一、WM8960 音频编解码器与 I2S 接口

WM8960 是低功耗立体声音频编解码器,内部集成 ADC/DAC、输入可编程增益放大器(PGA)和 D 类扬声器功放。它对外有两个接口:I2C 控制接口(7 位地址 0x1A)负责寄存器配置,I2S 音频接口负责双向传输 PCM 数据。

调试中遇到的一个关键特性:WM8960 是"只写"设备,不支持寄存器回读,对控制接口发起读操作一律返回 NACK。这意味着不能像调试 I2C 传感器那样读回寄存器验证配置,排障只能靠对写入值做位级分析和实际听感/采集波形验证。

录音增益链路(从麦克风到 I2S 输出):

1. 输入 PGA:LINVOL/RINVOL 寄存器,0.75 dB 一步,范围 -17.25 到 +30 dB,满增益 0x3F;
2. LPGA 后级增益:LADC_PATH 寄存器 bit6:4,0 到 +21 dB(3 dB 步进);
3. ADC 数字音量:LADCVOL/RADCVOL,-97.5 到 +30 dB;
4. 电源管理:PWR1 提供 VMID/VREF/MICBIAS 偏置,PWR2/PWR3 分别控制输出与输入通路电源——录音时只开输入域并断开输出混音器,防止回授啸叫。

音频编解码模块

二、新增外设与引脚配置

音频相关的硬件资源全部为 RA8P1 自带外设,无需额外编解码芯片之外的新器件:

外设:SSIE1(I2S 音频接口)
用途:主机模式,16-bit PCM、32-bit word slot,录音与播放分时使用
引脚:BCLK 接 P907、LRCK 接 P906、DATA 接 P206

外设:GPT2(通用定时器)
用途:输出 12.5 MHz MCLK 给 WM8960,LRCK 随之锁定在 48.828 kHz
引脚:GTIOC2A 接 PD06

外设:IIC1(硬件 I2C)
用途:主模式控制 WM8960 寄存器(7 位地址 0x1A),约 98 kbit/s
引脚:SDA 接 P511、SCL 接 P512

外设:SDHI0(SD 卡主机接口)
用途:4-bit 模式读写 WAV 文件,配合 FAT 文件系统(Lab-Project-FreeRTOS-FAT)
引脚:CLK-PD05、CMD-PD04、DAT0 到 DAT3 接 PD03/PD02/PD01/P111、CD-PD07

外设:UART(SCI9)
用途:printf 调试日志输出
引脚:TX-P209、RX-P208

需要注意的硬件风险点:RA8P1 的 SSIE1 只有一根双向数据线 P206,而 WM8960 的 DACDAT(输入)与 ADCDAT(输出)是分开的引脚。本工程录音与播放严格分时工作,板级验证可行;若需同时收发,应改用带独立 SSITXD0/SSIRXD0 的 SSIE0 或增加数据线切换。

相关引脚

三、录音与回放链路

录音流程:

1. UI 层按屏幕"3×3 数字按钮"中的 N,发出"录音 N 秒"命令;
2. 音频线程切换到录音 codec 配置(电源域、PGA、ADC、通路),启动 I2S 采集;
3. 采集数据经 DMA 写入双缓冲,每满一帧即由 CPU 追加写入 SD 卡的 WAV 文件(按键录音直存 48.828 kHz 立体声,回放链路同格式、无需重采样);
4. 定时到点后关闭采集、落盘,自动切到播放配置并回放刚录的文件。

播放流程:WAV 文件从 SD 卡流式读取,经重采样(仅跨格式路径)填充多块缓冲区,I2S 发送空中断触发补填,数据经 WM8960 DAC 与输出混音器驱动扬声器。输出音量由 SPKVOL 寄存器控制(0-127,默认 60%,可持久化保存)。

UI界面

四、系统架构与内存约定

工程在裁剪后只保留两条线程:

音频线程(player_Thread):负责音频外设初始化(I2C、WM8960、I2S、SD 卡)、录音/播放/提示音命令状态机,主循环处理命令队列、播放补填与录音落盘;
UI 线程(ui_thread):5 毫秒主循环驱动 LVGL,数字录音页交互与状态显示。

内存约定(板级验证):

数据:录音采集双缓冲
位置:内部 SRAM 的 .ram_noinit_nocache 段,32 字节对齐
约束:I2S DMA 直接写入、CPU 读取,必须绕过 D-Cache,否则读到的行可能来自上一轮填充,文件固定相位处出现"稳定间隔的冻结段(啪啪声)"

数据:播放 TX 环形缓冲与源数据缓冲
位置:内部 SRAM 的 .ram_noinit_nocache 段,32 字节对齐
约束:I2S DMA 直接读取,同样必须避开 D-Cache

五、工程裁剪中的问题排查

裁剪后出现"录音回放声音很小/无声"的问题,排查过程走了弯路,也最终确认了正确方法:

1. 误判一(噪声门):怀疑 WM8960 噪声门把安静信号静音,把噪声门寄存器 0x00C1 改为 0x0000。事后按数据手册位义核对,0x00C1 的使能位 bit8 本就是 0,噪声门原本就是关闭的,此改动不改变实际行为。
2. 误判二(ALC 自动增益控制):怀疑 ALC 压低增益,把 0x007B 改为 0x0000。同样按位核对,0x007B 的 ALCSW bit8 也是 0,ALC 原本就未使能。
3. 误判三(增益不足):把 LPGA 从 0 提升到 +21 dB、ADC 数字音量从 +22 拉到 +30 dB,总增益高达 +81 dB——声音反而变成"底噪轰鸣、人声依旧很小",随后还原。


六、工程代码结构(新增部分)

src/player_Thread_entry.c:音频线程入口(外设初始化、录音落盘、命令处理)
src/drivers/audio/wm8960/:WM8960 驱动(寄存器配置、录音/播放 profile 切换、音量控制)
src/middleware/audio/:audio_cmd_handler(录音/播放/提示音状态机)、pcm_capture(采集)、pcm_player(播放)、wav_reader/wav_writer(WAV 解析与写入)、pcm_resampler(重采样)
src/device/storage/sd_card:SD 卡驱动与 FAT 接入
src/application/ui/ui_page_dial:数字录音页(3×3 按钮交互)
src/application/core/:app_bridge(命令桥接)、app_state/app_events(状态与事件)

通过网盘分享的文件:麦克风与扬声器.zip
链接: https://pan.baidu.com/s/1XRfwnuU4UsRjR-cs51pf7w?pwd=ztjw 提取码: ztjw

感谢阅读,欢迎指正。

http://www.jsqmd.com/news/1369913/

相关文章:

  • 讲解GBase 8s数据库主键约束、唯一约束与唯一索引(上)
  • 重庆评价高的日语培训机构哪家可靠?认准高桥日本留学(重庆联络处) - 热点品牌推荐
  • JavaScript闭包:从词法作用域到内存管理的核心机制与应用
  • FanControl:告别风扇噪音与高温困扰的Windows终极解决方案
  • UE5高保真布料模拟:低模驱动高模的性能优化方案
  • Android Jetpack核心组件解析与实战应用
  • Playwright自动化测试:动态、嵌套与匿名iframe的精准定位实战
  • 智能旅游规划后端实战:Spring Boot+Redis+MySQL构建高并发系统
  • Seelen UI:Windows 实现 macOS 交互体验的技术解析
  • DashScope Embedding 分批处理实战——单批 20 条的完整解决方案
  • 东南亚食品机械市场增长与中国设备竞争优势分析
  • 如何实现淘宝多店防关联管理自动化?独占IP+Profile固化,从创建到销毁零关联
  • 2026福建特种车驱动桥定制哪家正规推荐兰带机械(福建销售部) - 热点品牌推荐
  • 2026年北林区口碑好的会计事务所怎么选?绥化市翔铭会计(北林区办事处) - 热点品牌推荐
  • Java策略模式实战:Spring Boot实现可扩展业务规则引擎
  • python+ai基于大数据旅游数据分析与推荐系统的设计与实现(045)3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 中山木箱直销厂商哪个好?2026年选型建议找中山市易诚木制品厂(中山联络处) - 热点品牌推荐
  • JavaScript防御性编程实战:从编码到监控的全链路防bug体系
  • 2026 年至今,西华值得关注的湖泊水下清理/打捞快艇订制厂家竞争格局,你敢信?这玩意儿居然能悄悄把湖泊水下的麻烦事儿全搞定!-救援打捞 - 企业推荐官-
  • 2026 年当下,开封本地卫浴疏通公司联系电话,洗手池堵到溢水不用慌,这玩意儿居然能帮你解决大麻烦-王师傅管道疏通中心 - 实业推荐官
  • UE5 Actor交互全解析:从碰撞检测到蓝图接口的六种通信方案
  • 16. string下
  • MLCC电容选型实战:从电路需求到可靠设计的系统方法
  • 使用Rufus绕过Win11硬件限制:TPM 2.0与CPU白名单实战指南
  • Meowa项目解析:如何通过API优化与批量处理降低AI动画生成成本
  • 从集成AI到AI原生:OoderAI V3.5.0如何重塑NLP驱动的应用开发范式
  • 虚拟机克隆完整指南:从原理到实践,解决环境部署难题
  • 学习笔记之关于RRU/AAU通道数的认识与应用举例
  • 5分钟掌握FlicFlac:Windows平台最轻量的音频格式转换工具完全指南
  • Ubuntu 18.04磁盘空间告急?LVM与非LVM环境下的安全扩容实战指南