基于RP2350+CircuitPython的音视频输出系统
该项目使用了RP2350开发板,实现了HDMI显示输出和模拟音频输出的设计,它的主要功能为:项目通过读取存储的BMP图像序列和WAV音频文件,在HDMI显示器上播放动画,并通过PWM音频输出播放伴音,模拟了一个简易的多媒体播放系统。。
标签
显示
开发板
接口
tinySDR
更新2025-07-11
13

我给RP2350装上了声卡和显卡

——基于RP2350+CircuitPython的HDMI音视频输出系统


1 项目介绍


在嵌入式系统领域,实现多媒体功能往往面临资源受限的挑战。本项目基于Raspberry Pi RP2350微控制器,通过CircuitPython操作系统,成功实现了HDMI视频输出与音频播放功能。项目以经典动画《Bad Apple!!》为演示内容,在160×120分辨率下输出视频,同时通过PWM驱动音频播放。


整个系统充分利用了RP2350的双核处理能力和CircuitPython的丰富库支持。视频方面,借助增加了一款背板生成HDMI信号;音频方面,通过小脚丫FPGA综合技能训练板上面丰富的GPIO实现了PWM功能实现数模转换。项目使用了内存管理、实时处理、资源分配等多项技术难题,为低成本嵌入式设备提供了多媒体解决方案。


2 硬件介绍


2.1 RP2350核心板

双核双架构设计,可选择Arm Cortex-M33或Hazard3 RISC-V内核

- 处理器:双核RP2350,最高频率150Mhz 为了输出640*480的分辨率,本项目设置为126MHz运行

- 存储资源:520KB SRAM + 2MB Flash

- 扩展接口:30个多功能GPIO引脚

- 供电系统:5V USB-C供电


该核心板负责运行CircuitPython操作系统,执行视频解码、音频处理等核心任务,并通过GPIO与其他硬件交互。


2.2 小脚丫FPGA综合技能训练板

作为HDMI信号生成的关键设备,该训练板具有以下特点:

- 信号转换:将GPIO37输出的PWM音频信号通过运算放大器放大幅度和功率,推动扬声器进行播放

- 输出引脚:GP37

- **信号类型:PWM模拟音频信号

- 外围电路:连接TLC271运算放大器电路驱动扬声器

- 格式支持:8/16-bit单声道WAV文件


HDMI 信号输出

- 时钟信号GP12(正极)/GP13(负极)

- 红色分量:GP14/GP15

- 绿色分量:GP16/GP17

- 蓝色分量:GP18/GP19

- 分辨率支持:最高支持640×480@60Hz


通过精确的时序控制,该板实现了160×120@6.67FPS的视频输出,满足了项目的基本需求。



3 方案框图与设计思路

本项目框图如下

3.1 系统照片





3.2 视频处理设计

视频处理采用流水线架构:

1. **文件加载**:从SD卡顺序读取BMP帧(约200帧)

2. **内存管理**:

- 使用displayio.OnDiskBitmap流式加载

- 每帧显示后立即释放内存(del对象 + gc.collect())

3. **信号生成**:

- 通过picodvi库生成RGB888信号

- 将并行信号转为HDMI串行信号

4. **帧率控制**:

- 固定帧延迟0.15秒(≈6.67FPS)

- time.sleep()精确控制刷新间隔


3.3 音频处理设计

音频系统采用非阻塞架构:

1. **文件加载**:一次性打开WAV文件

2. **解码处理**:audiocore.WaveFile实时解码

3. **PWM输出**:

- audiopwmio直接驱动GPIO

- 占空比模拟音频波形


3.4 资源优化策略

针对有限的520KB内存:

- **主动回收**:在关键节点调用gc.collect()

- **分时处理**:音视频分时占用总线

- **数据精简**:8-bit色深 + 单声道音频


3.5 硬件HDMI 小板设计

RP2350微控制器集成的**高速数据发送器(HSTX)**是一种单向高速通信接口,专为数据输出应用设计:

  1. 单向传输架构
    • 仅支持数据发送(Transmit-only)
    • 不支持数据接收功能
    • 适用于显示器驱动、数据流输出等场景
  2. 性能参数
    • 最大理论速率:250Mbps
    • 支持协议:可配置为LVDS、MIPI DSI等物理层协议
  3. 低延迟设计
    • 传输延迟:< 10ns
    • 支持实时数据流传输


根据RP2350 手册,HSTX设备仅限制使用GPIO 12-19 这8个。并且需要电阻进行阻抗匹配。为此,我专门绘制了一块小板用来将RP2350电路转换为HDMI接口,图纸资料可以从附件内下载。绘制的小板刚还可以背面焊接至小脚丫底板的背面。



4 软件流程图与关键代码


4.1 软件流程图


4.2 关键代码解析


4.2.1 HDMI初始化(核心配置)

fb = picodvi.Framebuffer(160, 120,  # 分辨率

clk_dp=board.GP12, clk_dn=board.GP13, # 差分时钟

red_dp=board.GP14, red_dn=board.GP15, # 红色通道

green_dp=board.GP16, green_dn=board.GP17,

blue_dp=board.GP18, blue_dn=board.GP19,

color_depth=8) # 8位色深


此代码配置了HDMI输出的物理引脚和色彩参数,建立了到FPGA板的连接通道。


4.2.2 帧加载函数(内存优化关键)

def bitmap_example(filename):

gc.collect() # 强制垃圾回收

blinka_bitmap = displayio.OnDiskBitmap(filename) # 从磁盘加载

blinka_grid = displayio.TileGrid(blinka_bitmap) # 创建显示对象

group.append(blinka_grid) # 添加到显示组

time.sleep(0.15) # 保持帧显示

# 删除对象释放内存

del blinka_bitmap

del blinka_grid

gc.collect()


该函数通过三步内存管理策略:使用前回收→流式加载→立即释放,确保稳定处理每帧。


4.2.3 非阻塞音频播放

def play_nonblocking(filename):

global wave_file

wave_file = open(filename, "rb") # 保持文件打开

wave = audiocore.WaveFile(wave_file)

audio.play(wave) # 非阻塞播放


此实现避免阻塞主线程,使视频播放能与音频同步进行。


5 项目中遇到的难题和解决方法


5.1 HDMI输出资源占用过高

问题表现:

- 视频输出占用>80% CPU资源

- 音频播放时出现明显爆音

- 系统响应延迟超过300ms


解决方案:

1. **硬件层面**:

- 优化HDMI时序参数,减少总线占用

2. **软件优化**:

- 采用分时处理策略:视频渲染期间暂停音频缓冲

- 精简显示流程:移除不必要的图层混合

3. **架构调整**:

- 将视频解码与输出分离到不同核心

- 增加帧间延迟,预留处理余量


5.2 内存资源紧张

问题表现:

- 加载160×120 BMP时频繁MemoryError

- 音频缓冲区溢出导致杂音

- 系统运行10分钟后崩溃


解决方案:

1. **精细内存管理**:

- 在每帧加载前/后主动gc.collect()

- 使用displayio.OnDiskBitmap替代Bitmap加载

2. **资源限制**:

- 将图像色深从16bit降至8bit

- 音频采样率从44.1kHz降至16kHz

3. **异常处理**:

- 添加内存不足时的帧跳过机制

- 建立看门狗复位系统




6 心得体会与建议


6.1 项目收获

通过本项目,我们获得了以下宝贵经验:

1. **资源优化艺术**:在520KB内存中实现音视频输出,深刻理解了"每一字节都很重要"的含义

2. **软硬件协同**:通过调整CPU频率、内存分配等参数,实现系统级优化

3. **实时系统挑战**:在非实时操作系统中实现音视频同步,积累了时序控制经验

4. **CircuitPython优势**:验证了其在快速原型开发中的高效性



结语

本项目成功验证了RP2350在多媒体应用中的潜力,通过创新的软硬件设计,在低成本微控制器上实现了HDMI音视频输出。未来随着硬件性能提升和软件优化,这类嵌入式多媒体系统有望在智能家居、工业HMI、便携设备等领域发挥重要作用。



---


附件下载
BadAppleHDMI.zip
适用于CircuitPython 9.2.7 的 HDMI 输出、音频输出测试程序
PCB_PCB1_2025-07-05-1.pdf
HDMI小板 PCB图
SCH_Schematic1_2025-07-05-1.pdf
HDMI小板 原理图
团队介绍
单打独斗,开发板一堆,啥也干不成的我
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号