Re: T5 3.12.25 i2s使用问题
但是我这边给dmic供电后,dmic的clk脚并没有频率出来,是不是不能做主机呢
但是我这边给dmic供电后,dmic的clk脚并没有频率出来,是不是不能做主机呢
有可能,那你就改master&rx,你们的引脚是怎么接的?
t5做主机也试过,看clk有输出,din也有输入,但就是没数据
目前接线如下:
dmic t5
sck <==> P6(i2s0 SCLK)
ws <==> P7(i2s0 LRCK)
L/R <==> gnd
sd <==> P8(i2s0 DIN)
vdd <==> 3.3v
gnd <==> gnd
接线没问题,你这个是单声道数据,默认配置是双声道,配置改一下,另外这个数字麦数据是单声道24bit按32bit读,T5的数据存储模式只支持LRLR和16L16R,有可能不支持
#define DEFAULT_I2S_CONFIG() { \
.role = I2S_ROLE_MASTER, \
.work_mode = I2S_WORK_MODE_I2S, \
.lrck_invert = I2S_LRCK_INVERT_DISABLE, \
.sck_invert = I2S_SCK_INVERT_DISABLE, \
.lsb_first_en = I2S_LSB_FIRST_DISABLE, \
.sync_length = 0, \
.data_length = 32, \
.pcm_dlength = 0, \
.store_mode = I2S_LRCOM_STORE_LRLR, \
.samp_rate = I2S_SAMP_RATE_16000, \
.pcm_chl_num = 1, \
}
方便给出下,你们使用的dmic型号,以及t5的配置吗
heixia.wang@tuya.com 2025年 Dec 22日 15:26接线没问题,你这个是单声道数据,默认配置是双声道,配置改一下,另外这个数字麦数据是单声道24bit按32bit读,T5的数据存储模式只支持LRLR和16L16R,有可能不支持
#define DEFAULT_I2S_CONFIG() { \
.role = I2S_ROLE_MASTER, \
.work_mode = I2S_WORK_MODE_I2S, \
.lrck_invert = I2S_LRCK_INVERT_DISABLE, \
.sck_invert = I2S_SCK_INVERT_DISABLE, \
.lsb_first_en = I2S_LSB_FIRST_DISABLE, \
.sync_length = 0, \
.data_length = 32, \
.pcm_dlength = 0, \
.store_mode = I2S_LRCOM_STORE_LRLR, \
.samp_rate = I2S_SAMP_RATE_16000, \
.pcm_chl_num = 1, \
}
按照这个修改,依然是不行
我刚确认了一下,我们用的数字麦不是i2s接口的,型号是敏芯微的MSM261DHP006,直接接在T5上;用了一款语音芯片使用了i2s,型号是国芯的GX8008C,调用tkl接口,配置如下:
TUYA_I2S_BASE_CFG_T i2s_cfg;
int ret = 0;
Code: Select all
i2s_cfg.mode = TUYA_I2S_MODE_SLAVE | TUYA_I2S_MODE_RX;
i2s_cfg.communication_format = I2S_COMM_FORMAT_STAND_I2S;
i2s_cfg.channel_format = TUYA_I2S_CHANNEL_FMT_RIGHT_LEFT;
i2s_cfg.bits_per_sample = TUYA_I2S_BITS_PER_SAMPLE_16BIT;
i2s_cfg.mclk = 0;
i2s_cfg.sample_rate = 4;//16k
i2s_cfg.i2s_dma_flags = 1;
ret = tkl_i2s_init(port, &i2s_cfg);heixia.wang@tuya.com 2025年 Dec 22日 18:16我刚确认了一下,我们用的数字麦不是i2s接口的,型号是敏芯微的MSM261DHP006,直接接在T5上;用了一款语音芯片使用了i2s,型号是国芯的GX8008C,调用tkl接口,配置如下:
TUYA_I2S_BASE_CFG_T i2s_cfg;
int ret = 0;Code: Select all
i2s_cfg.mode = TUYA_I2S_MODE_SLAVE | TUYA_I2S_MODE_RX; i2s_cfg.communication_format = I2S_COMM_FORMAT_STAND_I2S; i2s_cfg.channel_format = TUYA_I2S_CHANNEL_FMT_RIGHT_LEFT; i2s_cfg.bits_per_sample = TUYA_I2S_BITS_PER_SAMPLE_16BIT; i2s_cfg.mclk = 0; i2s_cfg.sample_rate = 4;//16k i2s_cfg.i2s_dma_flags = 1; ret = tkl_i2s_init(port, &i2s_cfg);
我使用这个tkl的接口并且接了一个max98357a模块,代码如下:
Code: Select all
#define TEST_AUDIO_SAMPLE_RATE 16000
#define TEST_AUDIO_SAMPLE_BITS 16
#define TEST_AUDIO_DATA_LEN_PER_SECOND (TEST_AUDIO_SAMPLE_RATE * TEST_AUDIO_SAMPLE_BITS * 4 / 8 / 50)
static void __test_media_i2s_play(void *arg)
{
TUYA_I2S_BASE_CFG_T i2s_cfg;
int ret = 0;
i2s_cfg.mode = TUYA_I2S_MODE_MASTER | TUYA_I2S_MODE_TX;
i2s_cfg.communication_format = I2S_COMM_FORMAT_STAND_I2S;
i2s_cfg.channel_format = TUYA_I2S_CHANNEL_FMT_RIGHT_LEFT;
i2s_cfg.bits_per_sample = TUYA_I2S_BITS_PER_SAMPLE_16BIT;
i2s_cfg.mclk = 0;
i2s_cfg.sample_rate = 4;
i2s_cfg.i2s_dma_flags = 1;
ret = tkl_i2s_init(SEND_I2S_NUM, &i2s_cfg);
if(OPRT_OK != ret) {
bk_printf("i2s_init fail %d\r\n", __LINE__);
return;
}
bk_printf("*********************i2s_init SEND_I2S_NUM sucess %d\r\n", __LINE__);
while (1)
{
ret = tkl_i2s_send(SEND_I2S_NUM, PCM_SPK16000, TEST_AUDIO_DATA_LEN_PER_SECOND);
if( ret < 0) {
bk_printf("*********************SEND_I2S_NUM fail ret = %d %d\r\n",ret, __LINE__);
return;
}
bk_printf("*********************SEND_I2S_NUM continue %d\r\n", __LINE__);
tal_system_sleep(2000);
}
}其中PCM_SPK16000就是一个pcm数据格式的数据,但是执行后log如下:
$[01-01 08:00:02 ty D][7010][tal_thread.c:224] Thread:i2s_tx Exec Start. Set to Running Stat 0x607010d0
apll_clk: 98304000, sample_rate: 16000, smp_ratio: 15
bit_ratio: 96, bit_ratio_b: 0
*********************i2s_init SEND_I2S_NUM sucess 3000
*********************SEND_I2S_NUM fail ret = -14 3006
看起来发送失败了,请问tkl接口需要打什么patch才能正常使用吗,还是需要修改一下其他什么配置才能正常使用
最新版本代码核对一下,看看是否有差异?
有差异,替换为你这边的代码后,还是有异常,log如下:
$[01-01 08:00:25 ty D][7010][tal_thread.c:224] Thread:i2s_tx Exec Start. Set to Running Stat 0x607010d0
apll_clk: 98304000, sample_rate: 16000, smp_ratio: 15
bit_ratio: 96, bit_ratio_b: 0
*********************i2s_init SEND_I2S_NUM sucess 3000
*********************SEND_I2S_NUM continue 3009
*********************SEND_I2S_NUM continue 3009
dma tx sem fail -26114
dma tx sem fail -26114
*********************SEND_I2S_NUM continue 3009
dma tx sem fail -26114
dma tx sem fail -26114
*********************SEND_I2S_NUM continue 3009
dma tx sem fail -26114
dma tx sem fail -26114
*********************SEND_I2S_NUM continue 3009
dma tx sem fail -26114
dma tx sem fail -26114