OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4546|回复: 10

F429的PCM格式调试遇到的问题*(数据混乱)

[复制链接]

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
发表于 2016-8-18 11:54:54 | 显示全部楼层 |阅读模式
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);                     
}

时序.png

最佳答案

查看完整内容[请看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; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-8-18 11:54:55 | 显示全部楼层
这个问题已经解决了,需要修改两个地方。首先是fs同步电平,这里必须是高电平,之前设置的是低电平所以解析的数据都是乱的。第二点是同步方式要设置为fs为同步的起始信号,否则能接到数据但是由于采集错位了,听感变调了。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_STARTFRAME;
    SAI1B_Handler.FrameInit.FSPolarity=SAI_FS_ACTIVE_HIGH;

    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);                     
}
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-8-18 17:21:32 | 显示全部楼层
@正点原子  我想问一下把fs同步信号改成高电平,如附件这个形式应该改哪个寄存器我试验了好几个都没成功。因为我看手册的事例fs同步电平是高电平我这里设置的是低电平。
QQ图片20160818172028.png
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-8-18 21:55:31 | 显示全部楼层
czdspeed 发表于 2016-8-18 17:21
@正点原子  我想问一下把fs同步信号改成高电平,如附件这个形式应该改哪个寄存器我试验了好几个都没成功。 ...

这个你看寄存器描述,应该有的哦。
可以看看寄存器版本代码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-8-19 09:13:17 | 显示全部楼层
正点原子 发表于 2016-8-18 21:55
这个你看寄存器描述,应该有的哦。
可以看看寄存器版本代码。

谢谢了,我自己找一下。我目前定为是fs的同步电平设置的不对。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-11-7
在线时间
2 小时
发表于 2016-11-7 15:38:23 | 显示全部楼层
为什么我的图采集出来的是这样的,慢了半个bck。
file:///C:/Users/yang/Desktop/QQ%E5%9B%BE%E7%89%8720161107153400.png
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-11-7
在线时间
2 小时
发表于 2016-11-7 15:39:12 | 显示全部楼层
为什么我的图采集出来的是这样的,慢了半个bck。
QQ图片20161107153400.png
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-11-9 15:42:01 | 显示全部楼层
Seektruth 发表于 2016-11-7 15:39
为什么我的图采集出来的是这样的,慢了半个bck。

你是直接逻辑分析仪量的吗,我当时量了之后发现有效是高电频,触发是低电平。其他的和pcm描述的一致。http://www.openedv.com/home.php? ... ;op=rule&fid=37
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-11-9 15:43:01 | 显示全部楼层
Seektruth 发表于 2016-11-7 15:39
为什么我的图采集出来的是这样的,慢了半个bck。

我就是初始化代码改了一点其他都好像没怎么动。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-11-7
在线时间
2 小时
发表于 2016-11-10 11:25:13 | 显示全部楼层
我是用高速示波器观察的,波形采出来和datasheet的图一样,你那张图是那个地方的。
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-11-10 16:07:30 | 显示全部楼层
Seektruth 发表于 2016-11-10 11:25
我是用高速示波器观察的,波形采出来和datasheet的图一样,你那张图是那个地方的。

我实在逻辑分析仪上看的,图好像就是数据手册的截图。arm这一侧我觉得问题不是太多,你看看是不是你的音频接口那里有没有设置好。一开始我接的codec芯片设成iis左右声道就完全识别不出来的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 09:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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