lrw
1
芯片型号:SF32LB58 板子:sf32lb58-lcd_a128r32n1_a1_dsi
SDK版本:main分支最新版
I2S1连接的I2S麦克风,型号:ICS43434
基于example\multimedia\audio\4pdm例程修改
修改main.c中的pinmux把PDM修改为I2S
修改proj.conf文件如下(其他没有修改):
编译会报rt_device_set_i2s_dma_rx_callback未找到实现:
看源码应该是没用到的,先注释掉:
编译成功,下载,发送录音命令发现录音回调函数只进了一次,不正常:
尝试SDK V2.4.5可以稳定进录音回调但录音数据全是0(V2.4.5没用4pdm示例所有用的record):
此外使用rt-device API操作I2S1是可以正确读到数据的(手机播放音乐靠近麦克风数据有相应变化):
整了好几天了实在找不到问题在哪,特来求助
可以先基于驱动实现,把i2s调通, example\rt_device\i2s\src。
如果基于audio_server.c接口使用i2s, 需要配置这个。
不使用I2S_MIC那个宏
lrw
4
取消I2S_MIC宏还是不行,基于rt_device驱动已经测试通过了可以正常读录音数据
这是测试代码麻烦看看有没有问题:
见这里,
https://docs.sifli.com/projects/sdk/latest/sf32lb52x/middleware/multimedia.html
audio_server.c里AUDIO_RX_USING_I2S宏使用的地方,里面的i2s主从模式设置改了和用驱动接口的模式一样了吗?
还有你用的哪个版本,旧的版本可能还没适配对AUDIO_RX_USING_I2S, 对比主分支上audio_server.c里AUDIO_RX_USING_I2S宏的地方改一下, 还有单声道还是双声道,里面只适配了单声道情况, AUDIO_DATA_SIZE应为640.
这里caps.udata.value为主从模式选择,1为slave模式
static void i2s_config(audio_device_speaker_t *my, bool is_tx)
{
。。。。。
caps.main_type = AUDIO_TYPE_INPUT;
caps.sub_type = AUDIO_DSP_MODE;
if (is_tx)
caps.udata.value = 0; /*set 0, because i2s speaker use master mode */
else
caps.udata.value = 1; //0 master mode, 1 slave mode
if (RT_EOK != rt_device_control(my->i2s, AUDIO_CTL_CONFIGURE, &caps))
{
LOG_E("Fail to control i2s mode");
}
int inter = 0; // 0:dma 1:audprc
rt_device_control(my->i2s, AUDIO_CTL_SETINPUT, (void *)inter);
inter = 0;