STM32的I2S slave模式问题

[复制链接]
14432|8
 楼主| chineser 发表于 2009-7-16 15:09 | 显示全部楼层 |阅读模式
我们在使用STM32的I2S slave模式发送时,发现一下现象,请帮忙分析:

下图1为STM32 I2S Slave TX的波形,master为WM8753(一款音频codec),采样率为8kHz,16bit。波形从上到下分别为IIS_CK、IIS_WS和IIS_SD。测试的方法是STM32轮询SPI_I2S_FLAG_TXE状态,如其置位则发送0x5555(或0xAAAA),具体配置和测试程序请参见附件中的源代码。目前的问题是STM32似乎不受WS信号的约束,随着CK信号不停的发送数据。而我们采用Samsung的44B0X作为Slave,master采用同样配置,其波形如图2所示,工作正常。请陈工帮忙分析原因,并给出解决方法,谢谢!
 楼主| chineser 发表于 2009-7-16 15:10 | 显示全部楼层

图1 STM32 I2S Slave Tx波形

 楼主| chineser 发表于 2009-7-16 15:10 | 显示全部楼层

图2 Samsung 44B0X I2S Slave Tx波形

 楼主| chineser 发表于 2009-7-16 15:12 | 显示全部楼层

程序

 /* I2S peripheral configuration */
  I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
  I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b/*extended*/;
  I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
  I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_8k;
  I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;

  /* I2S2 Master Transmitter to I2S3 Slave Receiver communication -----------*/
  /* I2S2 configuration */
  I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveTx;//I2S_Mode_SlaveTx;
  I2S_Init(SPI3, &I2S_InitStructure);

  //I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveRx;
  //I2S_Init(SPI2, &I2S_InitStructure);

  /* Enable the I2S3 */
  I2S_Cmd(SPI3, ENABLE);
  //I2S_Cmd(SPI2, ENABLE);

  wm8753_config(MIC_1, 24, SIDETONE_DISABLE, 8000, DAC_MUSIC_ONLY);

  while (1) {
    int len = 36494/2, i = 0, cflag;
    unsigned short *p = (unsigned short *)&testdata[0];
    while (i < len) {
        /* Wait the Tx buffer to be empty */        
        while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET)
        {}
        
        /* Send a data from I2S3 */        
        SPI_I2S_SendData(SPI3, 0xAAAA/*p[i++]*/);
        
        while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET)
        {}
        
        /* Send a data from I2S3 */        
        SPI_I2S_SendData(SPI3, 0x5555/*p[i++]*/);
        
        //i += 2;        
    }
    //i = 0;
    while (1);
  }
  I2S_Cmd(SPI3, DISABLE);
  //I2S_Cmd(SPI2, DISABLE);

  while (1)
  {
  }
}
 楼主| chineser 发表于 2009-7-17 11:23 | 显示全部楼层
rocket432 发表于 2011-5-28 20:46 | 显示全部楼层
我初始化的wm978,跟楼主一样的代码,就不见波形呢,一直高电平
e21 发表于 2014-7-8 14:21 | 显示全部楼层
遇到同样问题,楼主解决了吗?
xiao王 发表于 2016-12-31 21:40 | 显示全部楼层
chineser 发表于 2009-7-16 15:12
&nbsp;/*&nbsp;I2S&nbsp;peripheral&nbsp;configuration&nbsp;*/&nbsp;&nbsp;I2S_InitStructure.I2S_Standa ...

后来问题怎么解决的呢?
hzwit 发表于 2019-12-3 20:36 | 显示全部楼层
我也碰到同样问题,不管ws是高电平还是低电平,I2S 只要sck有信号,马上发送数据,和勘误手册处理的情况不一致呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

261

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部