调测参考

部分管脚存在复用关系,在使用时需确保当前管脚已经被复用为GPIO。

示例:第7组第2个管脚存在复用关系,配置寄存器IOMUX(基地址为0x400140000,偏移地址为0x30)为3,将此管脚复用为GPIO。

若当前管脚已为GPIO,可通过如下方法进行调测。通过DTB设备树方式配置GPIO为永久生效,其余方式配置GPIO为临时生效。

通过DTB设备树方式

通过在dts文件中配置第7组第2个GPIO管脚,生成DTB文件,具体操作步骤如下,此处以Atlas 200I DK A2 开发者套件为例进行文件配置。

  1. 登录Linux服务器。
  2. 执行如下命令,切换至root用户。

    su - root

  3. 使用WinSCP工具或其他工具,将下载软件包获取的源码包“Ascend310B-source.tar.gz”上传至root用户属组目录下,例如“/opt”。详细操作请参见使用WinSCP传输文件
  4. 执行如下命令,进入源码包所在的“/opt”目录。

    cd /opt

  5. 执行如下命令,解压源码包“Ascend310B-source.tar.gz”。

    tar -xzvf Ascend310B-source.tar.gz

  6. 执行如下命令,进入“Ascend310B-source/dtb/dts/hi1910b/hi1910BL”目录,查看底板的dts文件,如图1所示。

    cd Ascend310B-source/dtb/dts/hi1910b/hi1910BL

    图1 底板dts文件

  7. 执行如下命令,进入“product”目录。

    cd product

  8. 执行如下命令,打开模块的“hi1910B-pinctrl-M100-B51.dtsi”文件。

    vim hi1910B-pinctrl-M100-B51.dtsi

    将基地址为0x400140000,偏移地址为0x30的寄存器配置值修改为0x3,如图2所示。

    图2 修改文件信息示例

    修改完成后保存并退出。

  9. 执行如下命令,进入“Ascend310B-source”目录。

    cd /opt/Ascend310B-source

  10. 执行如下命令,编译OS内核。

    bash build.sh dtb

    出现如下回显,且生成“dt.img”文件表示编译内核userBaseConfig文件成功。

    generate /opt/Ascend310B-source/output/dt.img success! 
    sign /opt/Ascend310B-source/output/dt.img success!

    编译后的“dt.img”文件会自动存放于“Ascend310B-source/output”目录下。

  11. 参考生效DTB文件章节,使配置生效。

通过gpio_operate工具

通过gpio_operate工具进行操作,详细使用方法请参考GPIO工具介绍

通过devmem工具

通过devmem工具进行操作。配置第7组第2个GPIO管脚说明如下。

  1. 查询IOMUX寄存器(基地址为0x400140000,偏移地址为0x30),查询第7组第2个管脚的复用关系。
  2. 配置IOMUX寄存器(基地址为0x400140000,偏移地址为0x30)为3,将第7组第2个管脚复用为GPIO。
  3. 查询GPIO寄存器(基地址为0x400150000,偏移地址为0x4),第2位为第7组第2个GPIO管脚的方向。
  4. 配置GPIO寄存器(基地址为0x400150000,偏移地址为0x4)的第2位为1,可配置第7组第2个GPIO管脚方向为输出方向。
  5. 查询GPIO寄存器(基地址为0x400150000,偏移地址为0x50),查询第7组第2个GPIO管脚值。
  6. 配置GPIO寄存器(基地址为0x400150000,偏移地址为0x0)的第2位为1,可配置第7组第2个GPIO管脚值为1。

通过Sysfs方式

通过Sysfs方式控制GPIO。配置第7组第2个GPIO管脚说明如下。

GPIO_ID = START_ID+M = 224 + 2 = 226

  1. 导出GPIO管脚编号。

    echo GPIO_ID > /sys/class/gpio/export

  2. 查询GPIO管脚方向。

    cat /sys/class/gpio/gpioGPIO_ID/direction

  3. 配置GPIO管脚方向为输出方向。

    echo out > /sys/class/gpio/gpioGPIO_ID/direction

  4. 查询GPIO管脚值。

    cat /sys/class/gpio/gpioGPIO_ID/value

  5. 配置GPIO管脚值为1。

    echo 1 > /sys/class/gpio/gpioGPIO_ID/value