高级会员

- 积分
- 921
- 金钱
- 921
- 注册时间
- 2016-4-20
- 在线时间
- 169 小时
|
10金钱
我在用F429进行一个1拖4数字mic的项目,基本流程4个mic采集现场的声音,arm选择音量最大的一组做处理然后通过usb传输到电脑上。现在发现录得声音全是乱的。所以用逻辑分析仪抓了一组数据。参考附件
我的SAIA发送帧时钟和位时钟,模式为主,位长时16bit,16K采样。SAIB接收mic数据,位长时16bit,16K采样。其他的配置只是把framelenth和slot的长度做了变化,帧同步有效按照手册改成了1位。其他的没变。现在看逻辑分析仪的波形看不出来什么问题,想问下论坛的朋友对这个现象有什么建议。之前用pcm格式进行放音没有问题,所以觉得其实这里的问题应该也不大但是目前没有思路。
下面是SAIB的初始化代码,我把我修改的标注出来:
void SAIB_Init(u32 mode,u32 cpol,u32 datalen)
{
HAL_SAI_DeInit(&SAI1B_Handler);
SAI1B_Handler.Instance=SAI1_Block_B;
SAI1B_Handler.Init.AudioMode=mode;
SAI1B_Handler.Init.Synchro=SAI_SYNCHRONOUS;
SAI1B_Handler.Init.OutputDrive=SAI_OUTPUTDRIVE_ENABLE;
SAI1B_Handler.Init.NoDivider=SAI_MASTERDIVIDER_ENABLE;
SAI1B_Handler.Init.FIFOThreshold=SAI_FIFOTHRESHOLD_1QF;
SAI1B_Handler.Init.ClockSource=SAI_CLKSOURCE_PLLI2S;
SAI1B_Handler.Init.MonoStereoMode=SAI_STEREOMODE;
SAI1B_Handler.Init.Protocol=SAI_FREE_PROTOCOL;
SAI1B_Handler.Init.DataSize=datalen;
SAI1B_Handler.Init.FirstBit=SAI_FIRSTBIT_MSB;
SAI1B_Handler.Init.ClockStrobing=cpol;
//è
SAI1B_Handler.FrameInit.FrameLength=64;
SAI1B_Handler.FrameInit.ActiveFrameLength=1;
SAI1B_Handler.FrameInit.FSDefinition=SAI_FS_CHANNEL_IDENTIFICATION;
SAI1B_Handler.FrameInit.FSPolarity=SAI_FS_ACTIVE_LOW;
SAI1B_Handler.FrameInit.FSOffset=SAI_FS_BEFOREFIRSTBIT;
//SLOTè
SAI1B_Handler.SlotInit.FirstBitOffset=0;
SAI1B_Handler.SlotInit.SlotSize=SAI_SLOTSIZE_16B;
SAI1B_Handler.SlotInit.SlotNumber=4;
SAI1B_Handler.SlotInit.SlotActive=SAI_SLOTACTIVE_0|SAI_SLOTACTIVE_1|SAI_SLOTACTIVE_2|SAI_SLOTACTIVE_3;
HAL_SAI_Init(&SAI1B_Handler);
SAIB_DMA_Enable();
__HAL_SAI_ENABLE(&SAI1B_Handler);
}
|
-
最佳答案
查看完整内容[请看2#楼]
这个问题已经解决了,需要修改两个地方。首先是fs同步电平,这里必须是高电平,之前设置的是低电平所以解析的数据都是乱的。第二点是同步方式要设置为fs为同步的起始信号,否则能接到数据但是由于采集错位了,听感变调了。void SAIB_Init(u32 mode,u32 cpol,u32 datalen)[/backcolor]
{[/backcolor]
HAL_SAI_DeInit(&SAI1B_Handler); [/backcolor]
SAI1B_Handler.Instance=SAI1_Block_B; ...
|