总结一些关于在硬件选型和设计过程中 GPIO 相关的应用经验,避免踩坑。

  1. 注意原理图上引脚号与 GPIO 号之间的对应关系

    原理图上的引脚号和GPIO号不一定是一一对应的,比如 pin 53 对应的是GPIO1,软件上操作这个引脚的时候是操作 53 还是 1呢,应留意这个软硬件对应关系。

  2. 注意引脚的电压域

    有些引脚的io电平是1.8v,也有些引脚的io电平是3.0v,还有些引脚的io电平可以配置。接外部器件的时候,应注意引脚的io电平是否匹配。

    此外还要留意引脚所属的电压域,比如,软件上将一个可调电压域的电压从1.8v改为3.3v,通过属于这个电压域的所有引脚io电平都会被修改,应注意这个改动的影响。

    另外,设备在不同的开机运行阶段、比如在bootloader,在kernel、在app,在某些阶段有些电压域的电源并非都是打开的,如果出现io无法控制、外接器件无法通信,也可以从电压域的方向排查一下是否电源没有使能供电。

  3. 注意引脚的复位电平

    有些引脚在上电复位的电平是高、有些是低、还有一些是出于不稳定状态,这可能在软件上是无法修改的,所以,在评估使用引脚做什么功能的时候,也需要留意引脚的复位电平。比如选取某个引脚用来控制指示灯,要求开机启动过程指示灯是保持灭的,但如果不小心选择了一个复位是高电平的引脚(假设高电平控制灯亮),那么就会出现开机指示灯闪烁一下的问题,要解决一般也就只能硬件改版了。

  4. 注意引脚的复用功能

    以GPIO功能为例,假设 pin 11 可以复用为GPIO1,pin 44 也可以复用为GPIO1,那么如果二者都设置为GPIO1功能,则会出现复用功能冲突,导致功能失效,应将另一个引脚复用为其他功能。相同的,复用成其他功能(i2c 、 spi、sdio 等)时,也应考虑引脚功能复用冲突的情况。

  5. 注意引脚在系统休眠唤醒过程的行为

    在某些平台上为了待机降低功耗,在系统休眠的时候会关闭某些电压域电源,唤醒之后再恢复,或者在休眠的时候会强制拉低某些引脚,唤醒之后再恢复,在评估选取引脚做某些功能的时候,比如按键、指示灯,应注意这个特性是否会对功能造成影响。

  6. 注意引脚的驱动能力

    某些平台引脚的输出驱动能力是可调节的,比如遇到spi 或者其他功能输出的信号电平波形变形、或者有干扰、可以尝试通过软件修改一下引脚的驱动能力来改善类似问题。

  7. 注意唤醒脚

    有些平台只有特定的引脚具备唤醒能力,如果需要外部唤醒正处于deep sleep状态,或者是处于psm关机状态的设备,需要留意是否只有特定的引脚才支持次功能。

在硬件原理图设计完成之后,建议输出一个 GPIO list,内容可以参考下面的表格:

引脚编号引脚名称电压域GPIO 号复位电平复用功能号功能描述
1MAIN_RXDVDDIO_18GPIO20L1主串口RX,接 wifi 模组TX
52SPI_CSV_LCD_18_33GPIO13H3spi CS 片选,接外部flash CS