Всем привет!
Пробую поладить с
WM8904, но вот чего-то не выходит. Конфигурится она по i2c и с этим всё в порядке. У меня к ней подключен электретный микрофон по дифференциальной схеме на левый канал, а на правый я просто завёл линейку с компа - для тестов.
Внутри можно тупо пробросить сигналы от входов на аналоговые выходы практически без преобразований. Это получается на ура. Т.Е. я ТОЧНО правильно подключил входные сигналы и могу ими манипулировать. Так же точно работают аналоговые выходы.
Теперь пробую оцифровать её же средствами этот сигнал. В качестве мастера выступает STM32F103 с её I2S2 на 72MHz. WM8904 в качестве подчинённого
Частота выборки должна составить 8kHz, Stereo, 16bit на канал в формате i2s.
Реально с 8MHz кварцем получилось 8032 Hz. На логическом анализаторе видно, что Проц на отлично справляется с поставленной ему задачей, он генерит клоки и переключает каналы, но вот данных ему не присылают. Точнее всегда 0x0000. Попробовал "оторвать" дорожку A_DATA между процом и WM8904 и стало видно, что со стороны проца ножка PullUP, а вот кодек её прижимает к нолю. Опять же видно, что на канал 16 клоков.
Может кто поможет разобраться что я не так делаю? Может откровенно туплю?
Вот так я инициализирую WM8904:
Код
audioWrite(0x04,0x0019); //POBCTRL=1, ISEL=10, STARTUP_BIAS_ENA=0, BIAS_ENA=1
audioWrite(0x05,0x0043); //VMID_BUF_ENA=1, VMID_RES=01, VMID_ENA=1
audioWrite(0x07,0x0001); //MICDET_THR=000, MICSHORT_THR=00, MICDET_ENA=0, MICBIAS_SEL=001
audioWrite(0x06,0x0001); //MICBIAS_ENA=1
audioWrite(0x0C,0x0003); //INL_ENA=1, INR_ENA=1
audioWrite(0x12,0x0003); //DACL_ENA=0, DACR_ENA=0, ADCL_ENA=1, ADCR_ENA=1
audioWrite(0x14,0x845E); //TOCLK_RATE_DIV16=0, TOCLK_RATE_X4=0, SR_MODE=0, MCLK_DIV=0 (Required for MMCs: SGY, KRT see erratum CE000546)
audioWrite(0x15,0x0C00); //CLK_SYS_RAT=0011, SAMPLE_RATE=000
audioWrite(0x19,0x0003); //AIF_WL=00, AIF_FMT=10
audioWrite(0x26,0x0050); //ADC_HPF_C=10, ADC_HPF=1
audioWrite(0x2C,0x001F); //LINMUTE=0, LIN_VOL=11111
audioWrite(0x2D,0x001F); //RINMUTE=0, RIN_VOL=11111
audioWrite(0x2E,0x0052); //INL_CM_ENA=1, L_IP_SEL_N=01, L_IP_SEL_P=00, L_MODE=10
audioWrite(0x2F,0x0010); //INL_CM_ENA=1, R_IP_SEL_N=01, R_IP_SEL_P=00, R_MODE=00
audioWrite(0x7E,0x0020); //MCLK_PU=0, MCLK_PD=0, DACDAT_PU=1, DACDAT_PD=0, LRCLK_PU=1, LRCLK_PD=0, BCLK_PU=0, BCLK_PD=0
audioWrite(0x16,0x0004); //CLK_SYS_ENA=1
Хелп