大家好,初次接触USB,现在项目需要通过USB实现音频播放,有很多疑问,向大家请教下。
1. PC向USB开发板发送音频数据的流程
我们讨论认为发送数据的流程可能是下面两种中的一个,但不确定,希望熟悉的人解答一下。
假设使用的端点最大能接收256字节/包,音频采样率1Khz,采样位数16位,格式PCM。
- 认为发送的就是一个流,主机每包都向USB开发板发送256个字节,USB开发板将这256个字节进行处理(或者不需要进行处理,对音频格式不了解)后放到FIFO,然后再通过I2S以一定的频率送给DA转换。
- 主机每1ms发送一个包,每个包发送16位数据,USB开发板通过I2S将这16位数据发送到DA转换。
如果是上面第二种情况,那PC,USB开发板必须要知道音频采样率和音频的采样位数,这些参数是由哪边决定的,以及是怎样告知另一方的,通过请求吗?
2. USB设备发送接收数据的流程
我们使用的单片机每个端点都有对应的buffer,每个端点都有一个DRQ中断。如果端点设置的是IN,当产生DRQ中断表示buffer中数据已经发送到了主机方,可以往buffer中写数据了。如果端点设置的是OUT,当产生DRQ中断表示主机发送的数据已经在buffer中了,可以将数据移到RAM了。
软件实现过程是不是USB设备这边主动向buffer中写数据,然后等主机发送IN令牌包后将数据接走?我看了下STM32单片机,它好像有单独的IN和OUT中断,我想是不是STM32产生IN中断时,在中断处理函数中将数据发送给主机。但是我们使用的单片机没有这两个中断。
软件实现过程是不是当产生DRQ中断时,在中断函数中将数据从buffer中读出。
|