ShellAlbert / deploy-tx2

1 stars 0 forks source link

i2s0 play / i2s1 record #17

Open ShellAlbert opened 4 years ago

ShellAlbert commented 4 years ago

QQ截图20191024085828

ShellAlbert commented 4 years ago

QQ截图20191024085059 QQ截图20191024085138

ShellAlbert commented 4 years ago

i2s播放okay. 先设置为32bit,再使用aplay播放32khz,S32_LE的pcm数据即可。 i2s1 codec bit format 只支持16bit和32bit. QQ截图20191024165208 QQ截图20191024165221

ShellAlbert commented 4 years ago

QQ截图20191028094130 QQ截图20191028094138

cbm: clock bit master cbs: clock bit slave cfm: clock frame master cfs: clock frame slave

QQ截图20191029164810

ShellAlbert commented 4 years ago

jetson tx2 pcb上的j21上的为i2s1,连接PCM1754用于播放。 jetson tx2 pcb上的j26上的为i2s2,连接FPGA I2S用于录入。 下面测试i2s2的录入功能,使用amixer只可以设置为以下2种模式: #1 cbm-cfm,这种模式下示波器测试LRCK/BCLK无波形,且arecord命令出现read error. QQ截图20191028095141 QQ截图20191028095150

#4 cbs-cfs,这种模式下示波器测试LRCK/BCLK引脚上有波形. QQ截图20191028094840 QQ截图20191028094850

ShellAlbert commented 4 years ago

J21 J26 mclk(7)---- bclk(12)---- clk(23) lrclk(35)---- lrck(26) din(38)----- dout(40)--- din(25)

              3V3(2)
              gnd(28)

red:44.1khz lrck black:2.82mHz bclk white: data

ShellAlbert commented 4 years ago

测试情况一 在J24上使用i2s0播放,在J26上使用i2s1录入。 amixer -c tegrasndt186ref sset "ADMAIF1 Mux" "I2S1" amixer -c tegrasndt186ref sset "ADMAIF2 Mux" "I2S2" 将模式都设置为i2s格式。 amixer -c tegrasndt186ref cset name='I2S1 codec frame mode' 1 amixer -c tegrasndt186ref cset name='I2S2 codec frame mode' 1 将帧长都设置为16bit. amixer -c tegrasndt186ref cset name='I2S1 codec bit format' 1 amixer -c tegrasndt186ref cset name='I2S2 codec bit format' 1 将模式都设置为cbm-cfm和cbs-cfs. amixer -c tegrasndt186ref cset name='I2S1 codec master mode' 1 amixer -c tegrasndt186ref cset name='I2S2 codec master mode' 4 从i2s0插放 aplay -D hw:tegrasndt186ref,0 dream.wav 在i2s1录制 arecord -D hw:tegrasndt186ref,1 -r 44100 -f S16_LE -t raw -c 2 -d 10 i2s2.cap.raw

ShellAlbert commented 4 years ago

2019/10/29 1.使用amixer -c tegrasndt186ref cset name='I2S2 codec master mode' 4 设置为cbs-cfs,再使用sudo cat /sys/kernel/debug/regmap/tegra210-i2s.1/registers 发现a0:00000403 这里bit[10]=1 ,根据数据手册TRM中的I2S_CTRL_0寄存器的bit10说明这里设置了MASTER=ENABLE. 这样i2s1就会驱动bclk和lrclk引脚产生波形。

2.而我们需要i2s1作为输入,bclk/lrclk来源外部。所以我们要设置为slave mode. amixer -c tegrasndt186ref cset name='I2S2 codec master mode' 1 这里设置为了cbm-cfm. 再使用sudo cat /sys/kernel/debug/regmap/tegra210-i2s.1/registers 发现a0:00000003 这里bit[10]=0,根据数据手册TRM.pdf的描述,的确设置成了slave mode.

3.而此时使用 arecord -D hw:tegrasndt186ref,1 -r 44100 -f S16_LE -c 2 -d 60 -t raw i2s2.cap.raw 录音的时候,由于没有外部的时钟会报错。 arecord:pcm_read:2103:read error: input/output error. 使用dmesg查看则是 tegra210-i2s tegra210-i2s .1:failed at I2S1_RX sw reset. tegra210-i2s tegra210-i2s .1:ASoC:PRE_PMU:I2S2 DAP RX event failed: -22

4.此时我们先使用i2s0作为输出,将板子上的J24跳线跳到1.8V上,这样j21上的i2s0输出的电平就是1.8V,就可以直接跟j26上的i2s1连接。 然后aplay -D hw:tegrasndt186ref,0 dream.wav 这样示波器上可以看到BCLK和LRCK,一切正常。 现在在i2s1上录音: arecord -D hw:tegrasndt186ref,1 -r 44100 -f S16_LE -c 2 -d 60 -t raw i2s2.cap.raw arecord:pcm_read:2103:read error: input/output error. 这是i2s1没有接收到BCLK/LRCLK的信号。 为什么呢???? 哪里设置的不对吗?

ShellAlbert commented 4 years ago

QQ截图20191030093426 QQ截图20191030093529 QQ截图20191030093629 QQ截图20191030102146

ShellAlbert commented 4 years ago

QQ截图20191030103238 QQ截图20191029144640 QQ截图20191030091756

ShellAlbert commented 4 years ago

!/bin/bash

map ADMAIF1->I2S1 for record, I2S1 ---> ADMAIF1.

map ADMAIF2->I2S2 for play, ADMAIF2 -> I2S2.

amixer -c tegrasndt186ref sset "I2S1 Mux" "ADMAIF1" amixer -c tegrasndt186ref sset "ADMAIF1 Mux" "I2S1"

amixer -c tegrasndt186ref sset "ADMAIF2 Mux" "I2S2" amixer -c tegrasndt186ref sset "I2S2 Mux" "ADMAIF2"

i2s format.

amixer -c tegrasndt186ref cset name='I2S1 codec frame mode' 1 amixer -c tegrasndt186ref cset name='I2S2 codec frame mode' 1

16bit or 32bit.

amixer -c tegrasndt186ref cset name='I2S1 codec bit format' 1 amixer -c tegrasndt186ref cset name='I2S2 codec bit format' 1

i2s1:cbs-cfs(codec bit slave,codec frame slave),output signals.

i2s2:cbm-cfm(codec bit master,codec frame master),input signals.

i2s ---> audio codec = here codec is slave,so labled cbs-cfs.

audio codec ----> i2s = here codec is master,so labled cbm-cfm.

amixer -c tegrasndt186ref cset name='I2S1 codec master mode' 'cbm-cfm' amixer -c tegrasndt186ref cset name='I2S2 codec master mode' 'cbs-cfs'

check pinmux i2s1 input.

grep dap1 /sys/kernel/debug/tegra_pinctrl_reg

Bank: 0 Reg: 0x02431028 Val: 0x00000400 -> dap1_fs_pj3

Bank: 0 Reg: 0x02431030 Val: 0x00000458 -> dap1_din_pj2

Bank: 0 Reg: 0x02431038 Val: 0x00000400 -> dap1_dout_pj1

Bank: 0 Reg: 0x02431040 Val: 0x00000400 -> dap1_sclk_pj0

busybox devmem 0x02431028 32 0x00000440 busybox devmem 0x02431030 32 0x00000448 busybox devmem 0x02431038 32 0x00000400 busybox devmem 0x02431040 32 0x00000440

check pinmux i2s2 output.

grep dap2 /sys/kernel/debug/tegra_pinctrl_reg

Bank: 0 Reg: 0x02434000 Val: 0x00000458 -> dap2_din_pc3

Bank: 0 Reg: 0x02434008 Val: 0x00000400 -> dap2_dout_pc2

Bank: 0 Reg: 0x02434010 Val: 0x00000400 -> dap2_fs_pc4

Bank: 0 Reg: 0x02434018 Val: 0x00000400 -> dap2_sclk_pc1

busybox devmem 0x02434000 32 0x00000400 busybox devmem 0x02434008 32 0x00000400 busybox devmem 0x02434010 32 0x00000400 busybox devmem 0x02434018 32 0x00000400 grep dap2 /sys/kernel/debug/tegra_pinctrl_reg

play on i2s1.

aplay -D hw:tegrasndt186ref,1 dream.wav & sleep 3

record on i2s0.

arecord -D hw:tegrasndt186ref,0 -r 44100 -f S16_LE -c 2 -d 60 -t raw i2s2.cap.raw Recording raw data 'i2s2.cap.raw' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo arecord: pcm_read:2103: read error: Input/output error

yntp16@yntp16:/home/zhangshaoyan$ sudo ./i2s0_in_i2s1_out.sh Simple mixer control 'I2S1 Mux',0 Capabilities: enum Items: 'None' 'ADMAIF1' 'ADMAIF2' 'ADMAIF3' 'ADMAIF4' 'ADMAIF5' 'ADMAIF6' 'ADMAIF7' 'ADMAIF8' 'ADMAIF9' 'ADMAIF10' 'ADMAIF11' 'ADMAIF12' 'ADMAIF13' 'ADMAIF14' 'ADMAIF15' 'ADMAIF16' 'I2S1' 'I2S2' 'I2S3' 'I2S4' 'I2S5' 'I2S6' 'SFC1' 'SFC2' 'SFC3' 'SFC4' 'MIXER1-1' 'MIXER1-2' 'MIXER1-3' 'MIXER1-4' 'MIXER1-5' 'AMX1' 'AMX2' 'AMX3' 'AMX4' 'ARAD1' 'AFC1' 'AFC2' 'AFC3' 'AFC4' 'AFC5' 'AFC6' 'OPE1' 'SPKPROT1' 'MVC1' 'MVC2' 'IQC1-1' 'IQC1-2' 'IQC2-1' 'IQC2-2' 'DMIC1' 'DMIC2' 'DMIC3' 'DMIC4' 'ADX1-1' 'ADX1-2' 'ADX1-3' 'ADX1-4' 'ADX2-1' 'ADX2-2' 'ADX2-3' 'ADX2-4' 'ADX3-1' 'ADX3-2' 'ADX3-3' 'ADX3-4' 'ADX4-1' 'ADX4-2' 'ADX4-3' 'ADX4-4' 'ADMAIF17' 'ADMAIF18' 'ADMAIF19' 'ADMAIF20' 'ASRC1-1' 'ASRC1-2' 'ASRC1-3' 'ASRC1-4' 'ASRC1-5' 'ASRC1-6' Item0: 'ADMAIF1' Simple mixer control 'ADMAIF1 Mux',0 Capabilities: enum Items: 'None' 'ADMAIF1' 'ADMAIF2' 'ADMAIF3' 'ADMAIF4' 'ADMAIF5' 'ADMAIF6' 'ADMAIF7' 'ADMAIF8' 'ADMAIF9' 'ADMAIF10' 'ADMAIF11' 'ADMAIF12' 'ADMAIF13' 'ADMAIF14' 'ADMAIF15' 'ADMAIF16' 'I2S1' 'I2S2' 'I2S3' 'I2S4' 'I2S5' 'I2S6' 'SFC1' 'SFC2' 'SFC3' 'SFC4' 'MIXER1-1' 'MIXER1-2' 'MIXER1-3' 'MIXER1-4' 'MIXER1-5' 'AMX1' 'AMX2' 'AMX3' 'AMX4' 'ARAD1' 'AFC1' 'AFC2' 'AFC3' 'AFC4' 'AFC5' 'AFC6' 'OPE1' 'SPKPROT1' 'MVC1' 'MVC2' 'IQC1-1' 'IQC1-2' 'IQC2-1' 'IQC2-2' 'DMIC1' 'DMIC2' 'DMIC3' 'DMIC4' 'ADX1-1' 'ADX1-2' 'ADX1-3' 'ADX1-4' 'ADX2-1' 'ADX2-2' 'ADX2-3' 'ADX2-4' 'ADX3-1' 'ADX3-2' 'ADX3-3' 'ADX3-4' 'ADX4-1' 'ADX4-2' 'ADX4-3' 'ADX4-4' 'ADMAIF17' 'ADMAIF18' 'ADMAIF19' 'ADMAIF20' 'ASRC1-1' 'ASRC1-2' 'ASRC1-3' 'ASRC1-4' 'ASRC1-5' 'ASRC1-6' Item0: 'I2S1' Simple mixer control 'ADMAIF2 Mux',0 Capabilities: enum Items: 'None' 'ADMAIF1' 'ADMAIF2' 'ADMAIF3' 'ADMAIF4' 'ADMAIF5' 'ADMAIF6' 'ADMAIF7' 'ADMAIF8' 'ADMAIF9' 'ADMAIF10' 'ADMAIF11' 'ADMAIF12' 'ADMAIF13' 'ADMAIF14' 'ADMAIF15' 'ADMAIF16' 'I2S1' 'I2S2' 'I2S3' 'I2S4' 'I2S5' 'I2S6' 'SFC1' 'SFC2' 'SFC3' 'SFC4' 'MIXER1-1' 'MIXER1-2' 'MIXER1-3' 'MIXER1-4' 'MIXER1-5' 'AMX1' 'AMX2' 'AMX3' 'AMX4' 'ARAD1' 'AFC1' 'AFC2' 'AFC3' 'AFC4' 'AFC5' 'AFC6' 'OPE1' 'SPKPROT1' 'MVC1' 'MVC2' 'IQC1-1' 'IQC1-2' 'IQC2-1' 'IQC2-2' 'DMIC1' 'DMIC2' 'DMIC3' 'DMIC4' 'ADX1-1' 'ADX1-2' 'ADX1-3' 'ADX1-4' 'ADX2-1' 'ADX2-2' 'ADX2-3' 'ADX2-4' 'ADX3-1' 'ADX3-2' 'ADX3-3' 'ADX3-4' 'ADX4-1' 'ADX4-2' 'ADX4-3' 'ADX4-4' 'ADMAIF17' 'ADMAIF18' 'ADMAIF19' 'ADMAIF20' 'ASRC1-1' 'ASRC1-2' 'ASRC1-3' 'ASRC1-4' 'ASRC1-5' 'ASRC1-6' Item0: 'I2S2' Simple mixer control 'I2S2 Mux',0 Capabilities: enum Items: 'None' 'ADMAIF1' 'ADMAIF2' 'ADMAIF3' 'ADMAIF4' 'ADMAIF5' 'ADMAIF6' 'ADMAIF7' 'ADMAIF8' 'ADMAIF9' 'ADMAIF10' 'ADMAIF11' 'ADMAIF12' 'ADMAIF13' 'ADMAIF14' 'ADMAIF15' 'ADMAIF16' 'I2S1' 'I2S2' 'I2S3' 'I2S4' 'I2S5' 'I2S6' 'SFC1' 'SFC2' 'SFC3' 'SFC4' 'MIXER1-1' 'MIXER1-2' 'MIXER1-3' 'MIXER1-4' 'MIXER1-5' 'AMX1' 'AMX2' 'AMX3' 'AMX4' 'ARAD1' 'AFC1' 'AFC2' 'AFC3' 'AFC4' 'AFC5' 'AFC6' 'OPE1' 'SPKPROT1' 'MVC1' 'MVC2' 'IQC1-1' 'IQC1-2' 'IQC2-1' 'IQC2-2' 'DMIC1' 'DMIC2' 'DMIC3' 'DMIC4' 'ADX1-1' 'ADX1-2' 'ADX1-3' 'ADX1-4' 'ADX2-1' 'ADX2-2' 'ADX2-3' 'ADX2-4' 'ADX3-1' 'ADX3-2' 'ADX3-3' 'ADX3-4' 'ADX4-1' 'ADX4-2' 'ADX4-3' 'ADX4-4' 'ADMAIF17' 'ADMAIF18' 'ADMAIF19' 'ADMAIF20' 'ASRC1-1' 'ASRC1-2' 'ASRC1-3' 'ASRC1-4' 'ASRC1-5' 'ASRC1-6' Item0: 'ADMAIF2' numid=1081,iface=MIXER,name='I2S1 codec frame mode' ; type=ENUMERATED,access=rw------,values=1,items=6 ; Item #0 'None' ; Item #1 'i2s' ; Item #2 'right-j' ; Item #3 'left-j' ; Item #4 'dsp-a' ; Item #5 'dsp-b' : values=1 numid=1083,iface=MIXER,name='I2S2 codec frame mode' ; type=ENUMERATED,access=rw------,values=1,items=6 ; Item #0 'None' ; Item #1 'i2s' ; Item #2 'right-j' ; Item #3 'left-j' ; Item #4 'dsp-a' ; Item #5 'dsp-b' : values=1 numid=853,iface=MIXER,name='I2S1 codec bit format' ; type=ENUMERATED,access=rw------,values=1,items=3 ; Item #0 'None' ; Item #1 '16' ; Item #2 '32' : values=1 numid=864,iface=MIXER,name='I2S2 codec bit format' ; type=ENUMERATED,access=rw------,values=1,items=3 ; Item #0 'None' ; Item #1 '16' ; Item #2 '32' : values=1 numid=1082,iface=MIXER,name='I2S1 codec master mode' ; type=ENUMERATED,access=rw------,values=1,items=5 ; Item #0 'None' ; Item #1 'cbm-cfm' ; Item #2 'cbs-cfm' ; Item #3 'cbm-cfs' ; Item #4 'cbs-cfs' : values=1 numid=1084,iface=MIXER,name='I2S2 codec master mode' ; type=ENUMERATED,access=rw------,values=1,items=5 ; Item #0 'None' ; Item #1 'cbm-cfm' ; Item #2 'cbs-cfm' ; Item #3 'cbm-cfs' ; Item #4 'cbs-cfs' : values=4 Bank: 0 Reg: 0x02431028 Val: 0x00000400 -> dap1_fs_pj3 Bank: 0 Reg: 0x02431030 Val: 0x00000458 -> dap1_din_pj2 Bank: 0 Reg: 0x02431038 Val: 0x00000400 -> dap1_dout_pj1 Bank: 0 Reg: 0x02431040 Val: 0x00000400 -> dap1_sclk_pj0 Bank: 0 Reg: 0x02434000 Val: 0x00000458 -> dap2_din_pc3 Bank: 0 Reg: 0x02434008 Val: 0x00000400 -> dap2_dout_pc2 Bank: 0 Reg: 0x02434010 Val: 0x00000400 -> dap2_fs_pc4 Bank: 0 Reg: 0x02434018 Val: 0x00000400 -> dap2_sclk_pc1 Bank: 0 Reg: 0x02434000 Val: 0x00000400 -> dap2_din_pc3 Bank: 0 Reg: 0x02434008 Val: 0x00000400 -> dap2_dout_pc2 Bank: 0 Reg: 0x02434010 Val: 0x00000400 -> dap2_fs_pc4 Bank: 0 Reg: 0x02434018 Val: 0x00000400 -> dap2_sclk_pc1

ShellAlbert commented 4 years ago

QQ截图20191030155257

ShellAlbert commented 4 years ago

QQ截图20191031101919 QQ截图20191031101919

### audio routing path ADMAIF1 RX --> ADMAIF1 --> I2S1 Mux --> I2S1 TX --> I2S1 Transmit --> I2S1 Transmit-I2S1 CIF Receive --> I2S1 CIF Receive --> I2S1 CIF RX --> I2S1 DAP TX --> I2S1 DAP Transmit --> I2S1 DAP Transmit-x Playback --> x Playback --> x OUT --> x Headphone

ShellAlbert commented 4 years ago

QQ截图20191031102221919

ShellAlbert commented 4 years ago

LRCK=44.1khz BCLK=LRCKBitsChannels=44.1KHz162=1.4112MHz MCLK=BCLK256 or BCLK384=44.1KHz*256=11.2896MHz