梁工 发表于 2024-8-20 18:00:02

Ai8051U 实现USB声卡(播放或录音+播放),读TF卡/SD卡 音频播放器,32位8051,重磅开源

Ai8051USB,USB 型 1T 8051,支持32位和8位指令集
管脚兼容天王级别的:89C52RC,12C5A60S2
要兼容 8位8051指令集,可以用 Keil C51/IAR/SDCC 编译器
===就相当于更强大的 8H8K64U
要兼容 32位8051指令集,可以用 Keil C251 编译器,双核兼容设计
===就相当于更强大的 32G12K128, 32G8K64
34K SRAM(2K edata, 32K xdata), 64K Flash
TFPU@120MHz, 硬件浮点/硬件三角函数 运算器
DMA支持PWM, DMA支持外设直接到外设, P2P
120MHz-PWM支持硬件移相,16位PWM; 真12位ADC
USB, 4组串口,12位ADC, 轨到轨比较器
QSPI, SPI, I2S, I2C,TFT-i8080/M6800 接口
PDIP40,LQFP44,LQFP48CPU32@42MHz====================================Ai8051U实验箱实现 USB声卡(单播放或录音+播放)=== TF卡 音频播放器,小SD卡 音频播放器,CD音源===32位8051,I2S, 重磅开源TF卡/小SD卡,32G字节是RMB20元,CD音频 3200分钟本例程使用“Ai8051U实验箱V1.1”验证。通用USB外置声卡,无需安装驱动,线路、耳机输出。
MCU主控:Ai8051U-34K64-QFP48,运行频率36.864MHz。USB接口:USB TYPE-A或TYPE-C接口,用于USB下载、USB传输音频(通用USB外置声卡)。工作电源: USB接口的5V电源输入经过ME6231C33输出3.3V给电路供电,整个电路工作于3.3VI2S接口:接CODEC芯片TLV320AIC23B用于I2S接口输出立体声。          由于Ai8051U系列只有一个I2S接口,所以I2S的线路输入/话筒输入的数据未用。耳机音量: 行列键6--音量增大,键7--音量变小,音量最大为80,最小为0,开机默认60。耳机输出:3.5立体声音频插座,插接阻抗为16~64欧姆耳机,音量由行列键盘6、7键控制。线路输出:3.5立体声音频插座,无音量控制。音频格式: 48KHz采样,立体声16bit数据。演示视频:
<br>
##AI8051U-USB声卡-加州旅馆 https://v.stcai.com/sv/d90ead3-191930d2c5c/d90ead3-191930d2c5c.mp4<br>
##AI8051U-USB声卡-昨日重现 https://v.stcai.com/sv/2655518a-191930cfe9f/2655518a-191930cfe9f.mp4<br>
##AI8051U-播放SD卡音乐-CD音源 https://v.stcai.com/sv/5d5c7c5c-191930d2c67/5d5c7c5c-191930d2c67.mp4<br>

Ai8051U实验箱实现 USB声卡=== TF卡 音频播放器,小SD卡 音频播放器,CD音源===32位8051,I2S, 重磅开源
TF卡/小SD卡,32G字节是RMB20元,CD音频 3200分钟
下载程序方法:
打开下载软件,打开OBJ里的HEX文件,选择内部主频36.864MHz。用USB数据线链接电脑,持续按着开关SW2(P3.2)键,短一下POWER键并放开,一秒左右电脑识别到(HID1)USB Writer,放开SW2,则已经准备好USB下载,点击“下载/编程”按钮,即可下载。下载完成后,就可以直接播放音乐了。

单播放C语言源码:
电路原理图:
录音+播放C语言源码:

soma 发表于 2024-8-20 22:20:27


www.stcai.com/syx




_奶咖君_ 发表于 2024-8-21 09:04:03

梁工这加班加点儿的测试新的实验箱{:4_197:}

梁工 发表于 2024-8-21 09:32:03

_奶咖君_ 发表于 2024-8-21 09:04
梁工这加班加点儿的测试新的实验箱

花了不少时间测试各种程序,基本已完成,这几天会陆续发布我的各种程序。
这次重要的是DMA的使用,AI8051U这个32位内核的MCU性能不错,下面是几个DMA使用的情况:
1、SPI DMA,用于读取FLASH、SD(TF)卡、驱动PSI接口的黑白液晶屏、OLED屏等等。
   读取SD(TF)卡播放CD抓取的WAV文件,SPI DMA读取一个扇区512字节耗时820us,平均速度624KB/S @33.8688MHz,读取时不耗CPU时间。CD音乐数据流为176.4KB/S。
2、SPI DMA驱动OLED或LCD12864,刷新一屏(1024字节)耗时1.04ms @40MHz SPI-2T模式或1.46ms @40MHz SPI-4T模式,传输时不耗CPU时间。
3、黑白并口LCD12864速度巨慢,写一个字节典型值72us,刷一屏要84ms,以往用IO操作,刷新占CPU时间太长,不可容忍,用LCM DMA刷新则节省掉时间。
4、读取FLASH或TF卡的BMP图片送彩色TFT屏可以用点到点DMA,不要太爽。
5、USB声卡提供线路输出和耳机输出(带数字音量)。
6、ADC采样声音存储于FLASH以供I2S接口的DAC重放,使用W25QXX系列的FLASH便宜、容量大。
7、由于有32位硬件整数、浮点计算单元,256点频谱(显示128点)最高采样可达32KHz。
8、简易示波器仍然如以前的最高500KHz采样,正在等待后面100脚的更高速版本MCU的双DAC交替采样有望可达2MHz采样,双路DAC可以输出模拟信号。

还有好多功能,敬请期待!

_奶咖君_ 发表于 2024-8-21 09:53:38

梁工 发表于 2024-8-21 09:32
花了不少时间测试各种程序,基本已完成,这几天会陆续发布我的各种程序。
这次重要的是DMA的使用,AI8051 ...

{:4_196:}芜湖~

health 发表于 2024-8-21 11:43:00

我测试DMA的结果是速度有点慢,这可能是XDATA的访问速度限制了。
虽然SPI,QSPI,LCMIF这些外设的时钟可以设很高,速度可以设置很快,但是DMA数据供应不上,导致结果就是数据输出不联系,字节间有间隔。
用示波器看SCLK的波形是否均匀连续。
对于SPI来说就是时钟断断续续,以很快的速度发完一个字节后,停下来等下一个字节准备好。
测试QSPI时钟设置为8分频,才能保证数据连续传输。
当然了,外设速度大于DMA,这并不会导致数据出错,只是跑不了预计的速度。

梁工 发表于 2024-8-21 12:06:19

health 发表于 2024-8-21 11:43
我测试DMA的结果是速度有点慢,这可能是XDATA的访问速度限制了。
虽然SPI,QSPI,LCMIF这些外设的时钟可以 ...

DMA不需要CPU干预,为什么还可以模拟CPU的动作?因为有状态机!由于DNA使用状态机来处理,所以需要额外的时钟,各个外设的性能、架构不同,状态机耗时不同。
比如,影响SPI最高速度的是IO的速度,特别是3.3V时,而SPI器件大部分又是3.3V的,因而以3.3V的速度来评估是最合理的。
而SPI器件能接受的最高速度也不同,因此会因器件不同而最高速度不同,下面是我的结果:
1、SPI接口的OLED、黑白LCD12864,速度最高,在40MHz主频时,可以使用2分频、20MHz的SPI访问,或者低一点4分频、10MHz访问,使用DMA传输,一屏1024字节,分8页,每页128字节+3字节地址,则总传输字节数为131*8=1048,每字节状态机22个时钟(我测出来的),使用4分频,则一个字节需要0.8+22/40=1.35us,加16次中断处理,总时间实测1.46ms,平均一个字节1.39us。
2、QSPI在40MHz时可以5分频,8MHz时钟,4线模式,则可以到4MB/秒,这个速度对于MCU来说,已经是非常高速了。

如果你觉得慢,请列出你测量的数据。

health 发表于 2024-8-21 12:25:22

我说的慢,是指的DMA相对于外设的速度。
测量数据上面也说了,系统时钟24MHz,QSPI设置为4分频,6MHz,此时DMA填不满QSPI的需求,表现就是QSPI的CLK不连续。当QSPI设为8分频时,DMA可以满足QSPI的数据需求,表现就是CLK连续输出。

梁工 发表于 2024-8-21 13:47:31

health 发表于 2024-8-21 12:25
我说的慢,是指的DMA相对于外设的速度。
测量数据上面也说了,系统时钟24MHz,QSPI设置为4分频,6MHz,此时 ...

QSPI DMA,设置偶数分频,比如24MHz、6分频,你会看到CLK信号是50%占空比连续稳定输出,高电平3T,低电平3T。奇数分频,比如5分频,则高电平3T,低电平2T,连续稳定输出。
你可以贴个示波器波形图,我看看如何的不连续。

health 发表于 2024-8-21 15:11:49

我只试了4分频和8分频,6分频确实没试。
既然这样,那就试一下6分频。


下图是4分频
页: [1] 2 3 4 5
查看完整版本: Ai8051U 实现USB声卡(播放或录音+播放),读TF卡/SD卡 音频播放器,32位8051,重磅开源