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

  1. 确定tmux表格支持复用,并确定各个pin脚作用:

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

    Pin脚的CZ,CK,DI,DO一定要与tmux表对应,并且拿掉其他不需要的复用设置。

  3. build kernel 时候注意打开SPI配置:

    make mercury6_ssc016a_s01a_demo_spinand_defconfig;
    
    make menuconfig
    

    打开如下kernel配置:

    其他步骤按照正常情况操作。

3. 调试和验证

按照上述操作后,升级软件,再读一下寄存器可以大概验证是否设定成功:

读出寄存器bk103c_68(16bit address)的值是0x1100,与tmux表格(8bit address)对照,说明有复用为spi2mode1了。

接下来可以用逻辑分析仪来测波形,验证SPI波形符合预期。

  1. 安装逻辑分析仪的配套软件Kingst VIS(可以去产品官网下载安装)

  2. 参考当前使用板型的电路图,将逻辑分析仪测量通道连接到板子对应的pin脚,用4个不同通道分别测SPI的CZ,CK,DI,DO。

    Demo板:

  3. 打开软件开始测量波形

    点开始按钮后,串口立即跑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的设定输出对应值——下一步设置可以帮助我们看到输出值。

  4. 设置解析器

    之后我们看到:

    和我们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同事先确定好)