920G GPIO复用SPI设置和调试
1. 概述¶
920G的GPIO复用为SPI需要参考硬件的tmux表格,并修改相应的padmux.dtsi 文件设置复用关系,参考SPI使用参考
这里以PAD_PM_GPIO0-3复用为SPI2 mode1为例,详细说明如何配置,并介绍调试/测试工具-逻辑分析仪。
2. 软件配置¶
920G使用demo的config(以spinand为例):
Kernel: mercury6_ssc016a_s01a_demo_spinand_defconfig
Project config可以使用:
xvr_m6_spinand.glibc-9.1.0-squashfs.016a.512x512.bga2.demo_defconfig
Kernel: mercury6_ssc016a_s01a_demo_spinand_defconfig对应的dtsi文件是mercury6-ssc016a-s01a-demo-padmux.dtsi
-
确定tmux表格支持复用,并确定各个pin脚作用:

-
打开mercury6-ssc016a-s01a-demo-padmux.dtsi,做如下设置:


Pin脚的CZ,CK,DI,DO一定要与tmux表对应,并且拿掉其他不需要的复用设置。
-
build kernel 时候注意打开SPI配置:
make mercury6_ssc016a_s01a_demo_spinand_defconfig; make menuconfig
打开如下kernel配置:



其他步骤按照正常情况操作。
3. 调试和验证¶
按照上述操作后,升级软件,再读一下寄存器可以大概验证是否设定成功:

读出寄存器bk103c_68(16bit address)的值是0x1100,与tmux表格(8bit address)对照,说明有复用为spi2mode1了。
接下来可以用逻辑分析仪来测波形,验证SPI波形符合预期。
-
安装逻辑分析仪的配套软件Kingst VIS(可以去产品官网下载安装)
-
参考当前使用板型的电路图,将逻辑分析仪测量通道连接到板子对应的pin脚,用4个不同通道分别测SPI的CZ,CK,DI,DO。
Demo板:


-
打开软件开始测量波形

点开始按钮后,串口立即跑SPI的demo:
/tmp # ./spidev_test -D /dev/spidev2.0 spi mode: 0x0 bits per word: 8 max speed: 500000 Hz (500 KHz) RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................................
从抓到的波形看到看到clk和数据是有了,但是不能确定是否是按照demo的设定输出对应值——下一步设置可以帮助我们看到输出值。
-
设置解析器


之后我们看到:

和我们demo code里面设置的值一致:

PAD_PM_GPIO3是输入通道,默认是input上拉(pull-up)的,所以值是0xFF。
4. 补充¶
通常当只有一个maser、一个slave时,将master与slave上名字相同的4对接口两两互联,即可完成了接口的互联。如下图所示:

有遇到连错MOSI和MISO,导致PAD_PM_GPIO2和PAD_PM_GPIO3一直异常的情况:

920G的DI即是MOSI,DO即是MISO。(硬件的连接或者不同chip是否有差异可向HW同事先确定好)