找回密码
 立即注册
查看: 2768|回复: 19

51开源-仿USB声卡I2S接口播放PCM格式立体声音乐@STC32F12K54 USB-CDC实时传输音频流

[复制链接]

该用户从未签到

62

主题

4710

回帖

9665

积分

超级版主

积分
9665
发表于 2023-11-25 15:50:31 | 显示全部楼层 |阅读模式
本帖最后由 梁工 于 2023-11-29 14:58 编辑

51开源-仿USB声卡I2S接口播放PCM格式立体声音乐@STC32F12K54
===USB-CDC实时传输音频流,下一步真正的 UAC1.0
仿USB声卡WAVE播放程序使用说明
1、简介
建议用户直接下载"Objects"里的"audio-play.hex"测试. 下载时选择主频45.1584MHZ
本播放器程序使用STC32F12K54运行,MCU内部ROSC工作于45.1584MHz
本例程无需按键,类似于USB声卡,用STC-ISP里的“播放Wave”界面直接打PCM文件播放。
STC32F12K54I2S接口连接I2S-DAC芯片即可播放,本例使用STC核心板“追风剑”连接
CS4334CS4344来播放声音,由上位机CDC串口连续发送音频流。

本播放程序仅支持PCM格式的WAV文件播放,由STC-ISP的“播放WAVE”界面通过CDC串口下传数据流:
支持16位无压缩(CD音轨)WINDOWS PCM格式,单声道或双声道音频。
常用采样率为8KHz16KHz22.05KHz44.1KHz(最高)。
由于I2SMCLK由主频分频得到,所以对于一些采样率会出现较大误差,不建议使用
2、输出I2S-DAC电路
CS4334CS4344是开关电容模拟滤波器输出,所以要接一个R/C滤波,下图参数截止频率为19.39KHz
对应采样率为44.1KHz。如果要别的截止频率,请按比例改变C5C6的值。
截图202311251546494456.jpg
3、使用“追风剑”核心板验证

本例使用STC核心板“追风剑”连接CS4334CS4344来播放声音,洞洞板验证电路如下:
截图202311251547439686.jpg
I2S链接:
P5.4---I2S-MCLK
P2.2---I2S-LRCK(WS)
P2.3---I2S-SDI
P2.5---I2S-SCLK

指示灯信号:
P2.0--> 播放指示灯,播放时输出低电平点亮LED,停止时输出高电平,LED灭。
P2.1--> 通信指示灯,USB-CDC每收到一包64字节数据就取反一次,示波器观察。
P4.5--> I2S中断函数使用时间指示,高电平时间为处理时间
(左声道处理3us,右声道处理2us),中断频率为采样率的2倍。

4、下载程序
下载程序和CDC通信均使用板上TYPE-C接口实现。打开STC-ISP V6.92G或更高版本。
打开程序文件,即打开"Objects"里的"audio-play.hex"文件。
USB TYPE-C延长线将“追风剑”核心板与PC连接,持续按下P3.2按键,短按OFF键释放,
1秒后释放P3.2按键,STC ISP就能自动识别到设备:

点击下载按钮,将程序下载到MCU中。
截图202311251548111627.jpg

5、播放设置
此时STC ISP已能自动识别播放程序的CDC通信口,
下图的“扫描”里显示的就是CDC串口。
截图202311251548398458.jpg

点击“STC调试接口”,选择“播放Wave(P)”,见下图:
截图202311251549246633.jpg
点击“打开Wave”,选择要播放的Wave文件。
Wave文件信息里会显示文件的重要信息:
    文件格式,只支持:1-PCM这种类型。
    通道数:1表示单声道,2表示立体声。
    采样率:每秒的采样数。
    采样位数:就是一个采样点的位数,用户不用关心。
    数据大小:即声音的字节数。
设置数据发送模式里的“每个数据包的大小(字节)”为1024
勾选“第一包数据发送WAVE文件信息”
选择“连续自动发送”。
“数据包之间的延时(ms)”根据播放的文件类型和采样率设置,或者均设置为0
PCM  采样率    包间延时时间     数据率
    44.1KHz       0ms          176.4KB/S
   22.05KHz    1ms2ms       128KB/S
     16KHz     4ms5ms        64KB/S
      8KHz     4ms5ms        32KB/S

点击“发送Wave数据”,发出的第一个包为14字节的文件信息,大端模式,字节安排如下:
   Byte0Byte1WAV类型,0x0001-->PCM0x0006-->A Law0x0011-->IMA ADPCM
   Byte2:声道数,1(单声道)或2(立体声)。
   Byte3:采样位数,用户不用理会。
   Byte4~Byte7:采样率,Hz
   Byte8~Byte11:数据长度(字节数)。
   Byte12~Byte13BLOCK长度(ADPCM使用)
后面发送的都是音频数据包,即可播放声音。

截图202311251550002198.jpg

06-I2S-STC32F-仿USB声卡播放16位PCM-CDC连续传输音频流.rar (707.88 KB, 下载次数: 165)

I2S-DMA版本:
07-I2S-DMA-STC32F-仿USB声卡播放PCM-CDC连续传输音频流.rar (696.15 KB, 下载次数: 137)

回复 送花

使用道具 举报

该用户从未签到

640

主题

1万

回帖

1万

积分

管理员

积分
15687
发表于 2023-11-25 16:01:00 | 显示全部楼层
就剩下 UAC 的描述符搞定 就是 UAC 了
截图202311251605447893.jpg
截图202311251606118120.jpg


截图202311251606512918.jpg


截图202311251607449935.jpg


C8952_数模转换芯片DAC_CS4344-CZZR_规格书_CIRRUS LOGIC(凌云)数模转换芯片DAC规格书.PDF

903.2 KB, 下载次数: 110

C1509050_数模转换芯片DAC_MS4344_规格书_杭州瑞盟数模转换芯片DAC规格书.PDF

493.35 KB, 下载次数: 105

C16197182_数模转换芯片DAC_GC4344_规格书_WJ455792.PDF

617.69 KB, 下载次数: 108

点评

发现个I2S DAC:ES9023P,指标好一些,内置负压电荷泵,输出不用RC滤波和隔直电容了,SOP16封装的,淘宝零售最低3.7元包邮,不知道国产有没有替代的  发表于 2023-11-26 01:06
回复 支持 反对 送花

使用道具 举报

该用户从未签到

62

主题

4710

回帖

9665

积分

超级版主

积分
9665
 楼主| 发表于 2023-11-25 16:07:34 | 显示全部楼层
神农鼎 发表于 2023-11-25 16:01
就剩下 UAC 的描述符搞定 就是 UAC 了
是的,UAC 指日可待

点评

梁工,我搞不定了,顺便给你几个设备的描述符参考一下,还有UAC1和USB2的文档翻译: https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5252  发表于 2023-11-26 00:42
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 336 天

    [LV.8]以坛为家I

    22

    主题

    433

    回帖

    1710

    积分

    荣誉版主

    积分
    1710
    发表于 2023-11-25 17:05:39 | 显示全部楼层
    期待论坛提供WAV格式的音源供选择。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-22 01:43
  • 签到天数: 168 天

    [LV.7]常住居民III

    2

    主题

    89

    回帖

    708

    积分

    高级会员

    积分
    708
    发表于 2023-11-26 17:00:26 | 显示全部楼层
    实力不允许,跟不上节奏,只能做做科普这样子。。。

    UAC1.0 和 UAC2.0的不同

    UAC1.0和UAC2.0是USB音频类协议的两个版本,它们的主要不同点如下:

    1. 采样精度:UAC1.0支持16位和24位的采样精度,而UAC2.0还支持32位的采样精度。

    2. 带宽:UAC2.0支持更高的带宽(最高可达384kHz),可以处理更高质量的音频数据。

    3. 控制接口:UAC2.0引入了新的控制接口,支持更多的控制命令和功能。

    4. 描述符:UAC2.0引入了新的描述符,支持多个采样频率和多个采样分辨率。

    5. 时钟同步:UAC2.0引入了时钟同步机制,可以更好地保证音频数据的同步和稳定性。

    总的来说,UAC2.0相对于UAC1.0在音频数据的处理能力、带宽和控制功能等方面有了显著的提升,
    适用于更高质量的音频应用场景。但是,UAC2.0也需要更高的硬件和软件支持
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    640

    主题

    1万

    回帖

    1万

    积分

    管理员

    积分
    15687
    发表于 2023-11-27 10:10:59 | 显示全部楼层
    大家多尝试下 DMA支持的 I2S
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-9-16 17:20
  • 签到天数: 72 天

    [LV.6]常住居民II

    1

    主题

    62

    回帖

    310

    积分

    中级会员

    积分
    310
    发表于 2023-11-27 10:26:53 | 显示全部楼层
    打卡学习
    回复 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    24

    回帖

    111

    积分

    注册会员

    积分
    111
    发表于 2023-11-28 16:58:48 | 显示全部楼层
    输出I2S-DAC电路
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    1 小时前
  • 签到天数: 342 天

    [LV.8]以坛为家I

    29

    主题

    401

    回帖

    1403

    积分

    金牌会员

    积分
    1403
    发表于 2023-12-6 09:13:42 来自手机 | 显示全部楼层
    打卡学习
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:06
  • 签到天数: 269 天

    [LV.8]以坛为家I

    5

    主题

    282

    回帖

    1440

    积分

    金牌会员

    积分
    1440
    发表于 2023-12-7 02:20:56 | 显示全部楼层
    本帖最后由 lzl1okOK 于 2023-12-7 02:22 编辑

    我单片机用的8G1K08A,用PWM输出,通过低通滤波器滤波可以输出声音,就是串口频率不是快就是慢,用内部XDATA做缓存串口速度又跟不上,一卡一卡的伤脑筋!

    点评

    要用合适的采样率,没有问题的。  详情 回复 发表于 2023-12-7 10:46
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-11-1 06:51 , Processed in 0.086567 second(s), 93 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表