DAC and ADC on same SAI

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

DAC and ADC on same SAI

跳至解决方案
1,343 次查看
valentinlageard
Contributor I

Hi,
I'm trying to setup a device tree so we can use a AK4458 DAC and a AK5558 ADC using the same SAI (SAI1). I've successfully setup a simple-audio-card device tree node for the AK4458 but I am now trying to also integrate the AK5558. I'm just wondering if it's something that is possible with simple-audio-card. Note that they should be using the same format. They're both using TDM256, 32bits, MSB. Here is an extract from my current test device tree. On this current configuration, I don't seem to have any RX frame sync while starting to record on the corresponding card.

 

 

/ {
        custom-audio-card {
                compatible = "simple-audio-card";
                #address-cells = <1>;
                #size-cells = <0>;
                simple-audio-card,name = "Custom Audio";
                system-clock-fixed;
                system-clock-direction-out;

                simple-audio-card,dai-link@0 {
                        format = "left_j";
                        bitclock-master = <&sai1cpu0_master>;
                        frame-master = <&sai1cpu0_master>;
                        sai1cpu0_master: cpu {
                                sound-dai = <&sai1>;
                                dai-tdm-slot-num = <8>;
                                dai-tdm-slot-width = <32>;
                                dai-tdm-slot-tx-mask = <1 1 1 1 1 1 1 1>;
                                dai-tdm-slot-rx-mask = <1 1 1 1 1 1 1 1>;
                        };
                        codec {
                                sound-dai = <&ak4458>;
                                prefix = "ak4458";
                                dai-tdm-slot-num = <8>;
                                dai-tdm-slot-width = <32>;
                                dai-tdm-slot-tx-mask = <1 1 1 1 1 1 1 1>;
                                dai-tdm-slot-rx-mask = <0 0 0 0 0 0 0 0>;
                        };
                };

                simple-audio-card,dai-link@1 {
                        format = "left_j";
                        bitclock-master = <&sai1cpu1_slave>;
                        frame-master = <&sai1cpu1_slave>;
                        sai1cpu1_slave: cpu {
                                sound-dai = <&sai1>;
                                dai-tdm-slot-num = <8>;
                                dai-tdm-slot-width = <32>;
                                dai-tdm-slot-tx-mask = <1 1 1 1 1 1 1 1>;
                                dai-tdm-slot-rx-mask = <1 1 1 1 1 1 1 1>;
                        };
                        codec {
                                sound-dai = <&ak5558>;
                                prefix = "ak5558";
                                dai-tdm-slot-num = <8>;
                                dai-tdm-slot-width = <32>;
                                dai-tdm-slot-tx-mask = <0 0 0 0 0 0 0 0>;
                                dai-tdm-slot-rx-mask = <1 1 1 1 1 1 1 1>;
                        };
                };
        };
};

&sai1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_sai1>; // TODO !
        clocks = <&clk IMX8MM_CLK_SAI1_IPG>, <&clk IMX8MM_CLK_DUMMY>,
                 <&clk IMX8MM_CLK_SAI1_ROOT>, <&clk IMX8MM_CLK_DUMMY>,
                 <&clk IMX8MM_CLK_DUMMY>, <&clk IMX8MM_AUDIO_PLL1_OUT>,
                 <&clk IMX8MM_AUDIO_PLL2_OUT>;
        clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
        assigned-clocks = <&clk IMX8MM_CLK_SAI1>;
        assigned-clock-parents = <&clk IMX8MM_AUDIO_PLL1_OUT>;
        assigned-clock-rates = <24576000>;
        fsl,sai-asynchronous;
        fsl,sai-mclk-direction-output; // SAI will output the MCLK
        fsl,dataline = <1 0x01 0x01>;
        status = "okay";
};

 

0 项奖励
回复
1 解答
1,285 次查看
valentinlageard
Contributor I
I actually had a misconfigured pin ! Also, I now use the sai in RX synchronous mode. Everything works as expected as far as I can tell !

在原帖中查看解决方案

0 项奖励
回复
2 回复数
1,316 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

Researching internally, it seems that it is possible, there is an example about how to do a similar application, here how to do it with i.MX8MM and AK4458 that could help you as a reference:

On 8MM EVK board, when comment I2C access to AK4458, AK4458 sound card device will be registered, without connecting to audio board. Attached is the patch; after applying it, you can find below sound card devices.

root@imx8mmevk:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: imxspdif [imx-spdif], device 0: S/PDIF PCM snd-soc-dummy-dai-0 [S/PDIF PCM snd-soc-dummy-dai-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: btscoaudio [bt-sco-audio], device 0: 30020000.sai-bt-sco-pcm bt-sco-pcm-0 [30020000.sai-bt-sco-pcm bt-sco-pcm-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: btscoaudio [bt-sco-audio], device 1: 30020000.sai-bt-sco-pcm-wb bt-sco-pcm-wb-1 [30020000.sai-bt-sco-pcm-wb bt-sco-pcm-wb-1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 3: wm8524audio [wm8524-audio], device 0: 30030000.sai-wm8524-hifi wm8524-hifi-0 [30030000.sai-wm8524-hifi wm8524-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 4: ak4458audio [ak4458-audio], device 0: Audio multicodec-0 [Audio multicodec-0]
Subdevices: 1/1
Subdevice #0: subdevice #0

In imx-ak4458.c, imx_aif_hw_params, if you don't enable tdm and dsd, slots of each lane is set to 2.

So when play stereo music, only TXD0 has signal.

When play 4 channels music, you can observe signal on TXD0 and TXD1. Channel 0 and 1 are sent to TXD0, channel 2 and 3 are sent to TXD1

I hope this information helps you.

Best regards.

1,286 次查看
valentinlageard
Contributor I
I actually had a misconfigured pin ! Also, I now use the sai in RX synchronous mode. Everything works as expected as far as I can tell !
0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2036504%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EDAC%20%E5%92%8C%20ADC%20%E4%BD%8D%E4%BA%8E%E5%90%8C%E4%B8%80%20SAI%20%E4%B8%8A%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2036504%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%3CBR%20%2F%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E5%B0%9D%E8%AF%95%E8%AE%BE%E7%BD%AE%E4%B8%80%E4%B8%AA%E8%AE%BE%E5%A4%87%E6%A0%91%EF%BC%8C%E4%BB%A5%E4%BE%BF%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%20SAI%EF%BC%88SAI1%EF%BC%89%E6%9D%A5%E4%BD%BF%E7%94%A8%20AK4458%20DAC%20%E5%92%8C%20AK5558%20ADC%E3%80%82%E6%88%91%E5%B7%B2%E7%BB%8F%E6%88%90%E5%8A%9F%E4%B8%BA%20AK4458%20%E8%AE%BE%E7%BD%AE%E4%BA%86%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E9%9F%B3%E9%A2%91%E5%8D%A1%E8%AE%BE%E5%A4%87%E6%A0%91%E8%8A%82%E7%82%B9%EF%BC%8C%E4%BD%86%E7%8E%B0%E5%9C%A8%E6%88%91%E6%AD%A3%E5%B0%9D%E8%AF%95%E9%9B%86%E6%88%90%20AK5558%E3%80%82%E6%88%91%E5%8F%AA%E6%98%AF%E6%83%B3%E7%9F%A5%E9%81%93%E8%BF%99%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E7%AE%80%E5%8D%95%E7%9A%84%E9%9F%B3%E9%A2%91%E5%8D%A1%E5%AE%9E%E7%8E%B0%E3%80%82%E8%AF%B7%E6%B3%A8%E6%84%8F%EF%BC%8C%E5%AE%83%E4%BB%AC%E5%BA%94%E8%AF%A5%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E6%A0%BC%E5%BC%8F%E3%80%82%E5%AE%83%E4%BB%AC%E9%83%BD%E4%BD%BF%E7%94%A8%20TDM256%E3%80%8132%20%E4%BD%8D%E3%80%81MSB%E3%80%82%E8%BF%99%E6%98%AF%E6%88%91%E5%BD%93%E5%89%8D%E6%B5%8B%E8%AF%95%E8%AE%BE%E5%A4%87%E6%A0%91%E7%9A%84%E6%91%98%E5%BD%95%E3%80%82%E5%9C%A8%E5%BD%93%E5%89%8D%E9%85%8D%E7%BD%AE%E4%B8%8B%EF%BC%8C%E5%9C%A8%E7%9B%B8%E5%BA%94%E5%8D%A1%E4%B8%8A%E5%BC%80%E5%A7%8B%E5%BD%95%E5%88%B6%E6%97%B6%E4%BC%BC%E4%B9%8E%E6%B2%A1%E6%9C%89%E4%BB%BB%E4%BD%95%20RX%20%E5%B8%A7%E5%90%8C%E6%AD%A5%E3%80%82%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%2F%20%7B%0A%20%20%20%20%20%20%20%20custom-audio-card%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20compatible%20%3D%20%22simple-audio-card%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23address-cells%20%3D%20%26lt%3B1%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23size-cells%20%3D%20%26lt%3B0%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20simple-audio-card%2Cname%20%3D%20%22Custom%20Audio%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20system-clock-fixed%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20system-clock-direction-out%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20simple-audio-card%2Cdai-link%400%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20format%20%3D%20%22left_j%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bitclock-master%20%3D%20%26lt%3B%26amp%3Bsai1cpu0_master%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20frame-master%20%3D%20%26lt%3B%26amp%3Bsai1cpu0_master%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sai1cpu0_master%3A%20cpu%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sound-dai%20%3D%20%26lt%3B%26amp%3Bsai1%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-num%20%3D%20%26lt%3B8%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-width%20%3D%20%26lt%3B32%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-tx-mask%20%3D%20%26lt%3B1%201%201%201%201%201%201%201%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-rx-mask%20%3D%20%26lt%3B1%201%201%201%201%201%201%201%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20codec%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sound-dai%20%3D%20%26lt%3B%26amp%3Bak4458%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefix%20%3D%20%22ak4458%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-num%20%3D%20%26lt%3B8%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-width%20%3D%20%26lt%3B32%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-tx-mask%20%3D%20%26lt%3B1%201%201%201%201%201%201%201%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-rx-mask%20%3D%20%26lt%3B0%200%200%200%200%200%200%200%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20simple-audio-card%2Cdai-link%401%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20format%20%3D%20%22left_j%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bitclock-master%20%3D%20%26lt%3B%26amp%3Bsai1cpu1_slave%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20frame-master%20%3D%20%26lt%3B%26amp%3Bsai1cpu1_slave%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sai1cpu1_slave%3A%20cpu%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sound-dai%20%3D%20%26lt%3B%26amp%3Bsai1%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-num%20%3D%20%26lt%3B8%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-width%20%3D%20%26lt%3B32%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-tx-mask%20%3D%20%26lt%3B1%201%201%201%201%201%201%201%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-rx-mask%20%3D%20%26lt%3B1%201%201%201%201%201%201%201%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20codec%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sound-dai%20%3D%20%26lt%3B%26amp%3Bak5558%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefix%20%3D%20%22ak5558%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-num%20%3D%20%26lt%3B8%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-width%20%3D%20%26lt%3B32%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-tx-mask%20%3D%20%26lt%3B0%200%200%200%200%200%200%200%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dai-tdm-slot-rx-mask%20%3D%20%26lt%3B1%201%201%201%201%201%201%201%26gt%3B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%7D%3B%0A%0A%26amp%3Bsai1%20%7B%0A%20%20%20%20%20%20%20%20pinctrl-names%20%3D%20%22default%22%3B%0A%20%20%20%20%20%20%20%20pinctrl-0%20%3D%20%26lt%3B%26amp%3Bpinctrl_sai1%26gt%3B%3B%20%2F%2F%20TODO%20!%0A%20%20%20%20%20%20%20%20clocks%20%3D%20%26lt%3B%26amp%3Bclk%20IMX8MM_CLK_SAI1_IPG%26gt%3B%2C%20%26lt%3B%26amp%3Bclk%20IMX8MM_CLK_DUMMY%26gt%3B%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%26amp%3Bclk%20IMX8MM_CLK_SAI1_ROOT%26gt%3B%2C%20%26lt%3B%26amp%3Bclk%20IMX8MM_CLK_DUMMY%26gt%3B%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%26amp%3Bclk%20IMX8MM_CLK_DUMMY%26gt%3B%2C%20%26lt%3B%26amp%3Bclk%20IMX8MM_AUDIO_PLL1_OUT%26gt%3B%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%26amp%3Bclk%20IMX8MM_AUDIO_PLL2_OUT%26gt%3B%3B%0A%20%20%20%20%20%20%20%20clock-names%20%3D%20%22bus%22%2C%20%22mclk0%22%2C%20%22mclk1%22%2C%20%22mclk2%22%2C%20%22mclk3%22%2C%20%22pll8k%22%2C%20%22pll11k%22%3B%0A%20%20%20%20%20%20%20%20assigned-clocks%20%3D%20%26lt%3B%26amp%3Bclk%20IMX8MM_CLK_SAI1%26gt%3B%3B%0A%20%20%20%20%20%20%20%20assigned-clock-parents%20%3D%20%26lt%3B%26amp%3Bclk%20IMX8MM_AUDIO_PLL1_OUT%26gt%3B%3B%0A%20%20%20%20%20%20%20%20assigned-clock-rates%20%3D%20%26lt%3B24576000%26gt%3B%3B%0A%20%20%20%20%20%20%20%20fsl%2Csai-asynchronous%3B%0A%20%20%20%20%20%20%20%20fsl%2Csai-mclk-direction-output%3B%20%2F%2F%20SAI%20will%20output%20the%20MCLK%0A%20%20%20%20%20%20%20%20fsl%2Cdataline%20%3D%20%26lt%3B1%200x01%200x01%26gt%3B%3B%0A%20%20%20%20%20%20%20%20status%20%3D%20%22okay%22%3B%0A%7D%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2037617%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9ADAC%20%E5%92%8C%20ADC%20%E4%BD%8D%E4%BA%8E%E5%90%8C%E4%B8%80%20SAI%20%E4%B8%8A%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2037617%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E6%88%91%E7%9A%84%E5%AF%86%E7%A0%81%E9%85%8D%E7%BD%AE%E7%A1%AE%E5%AE%9E%E9%94%99%E8%AF%AF%EF%BC%81%E5%8F%A6%E5%A4%96%EF%BC%8C%E6%88%91%E7%8E%B0%E5%9C%A8%E5%9C%A8%20RX%20%E5%90%8C%E6%AD%A5%E6%A8%A1%E5%BC%8F%E4%B8%8B%E4%BD%BF%E7%94%A8%20sai%E3%80%82%E6%8D%AE%E6%88%91%E6%89%80%E7%9F%A5%EF%BC%8C%E4%B8%80%E5%88%87%E9%83%BD%E6%8C%89%E9%A2%84%E6%9C%9F%E8%BF%9B%E8%A1%8C%EF%BC%81%3C%2FLINGO-BODY%3E