请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM625 主题中讨论的其他器件:PCM3168A
工具/软件:
作为编解码器、使用 pcm3168a 并与 DOUT1/2端口连接。
编解码器配置:
格式:左对齐模式
采样率:96kHz
SCKI 速率: 256
McASP 通过两个 Rx 串行器配置为4时隙 TDM 模式。
我希望从编解码器接收所有6个 ADC 通道。
不过、我只能通过第一个串行器接收四个通道。
$ arecord -f s24_3le -r 96000 -c 6 -D hw:0,0 a.wav arecord: set_params:1398: Channels count non available
所用的设备树:
simple-audio-card,dai-link { format = "left_j"; mclk-fs = <256>; cpu { bitclock-master; frame-master; dai-tdm-slot-num = <6>; dai-tdm-slot-width = <32>; dai-tdm-slot-tx-mask = <0 0 0 0 0 0>; dai-tdm-slot-rx-mask = <1 1 1 1 1 1>; sound-dai = <&mcasp1>; }; codec { clocks = <&audio_refclk0>; sound-dai = <&pcm3168a 1>; }; }; &mcasp1 { pinctrl-names = "default"; pinctrl-0 = <&mcasp1_pins>; op-mode = <0>; serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */ 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >; tdm-slots = <4>; #sound-dai-cells = <0>; /* * assign mcasp0 clocks because pcm3168a uses audio_refclk0 */ clocks = <&k3_clks 190 0>; clock-names = "fck"; assigned-clocks = <&k3_clks 190 0>; assigned-clock-parents = <&k3_clks 190 2>; assigned-clock-rates = <24576000>; status = "okay"; };
在挖掘`davinci-McASP.c`驱动程序后、我发现必须设置 Rx/TX 掩码、但这使驱动程序抱怨 tdm_slot 大小和掩码大小不匹配。
davinci-mcasp 2b10000.audio-controller: Bad tdm mask tx: 0x00000000 rx: 0x0000003f slots 4
我`d` ai-tdm-slot `属性将覆盖 McASP` tdm-slot 属性。 这似乎导致无法按我想要的方式配置驱动器、因此我删除了覆盖。
我将`dai-tdm-slot`属性读作每个串行器所需 tdm-slot 的总数、并将`tdm-slot`属性读作 tdm-slot 的总数。
davinci-mcasp.c - mcasp->tdm_slots = slots; + // mcasp->tdm_slots = slots;
应用此补丁后,我能够从第6个频道录制音频,但样本分散在3个频道上。
这是通过一个连接到编解码器上 ADC 通道6的信号发生器进行记录的。