[玩转Atlas 200 DK之案例开发系列]外设GPIO使用

[玩转Atlas 200 DK之案例开发系列]外设GPIO使用

[玩转Atlas 200 DK之案例开发系列]外设GPIO使用

一、开发板对外输出脚说明

l 开发板输出管脚

Atlas 200 DK开发板共有40个管脚输出,其中有7个GPIO脚供用户控制使用。

GPIO0 GPIO1 GPIO3 GPIO4 GPIO5 GPIO6 GPIO7

开发板管脚数字对应可以看开发板40PIN 的两边板子标记,有标记哪个是1脚,哪个是40脚,然后和下图对应接IO口使用。

 

l GPIO管脚说明

        直接从昇腾AI处理器引出的GPIO有:GPIO0、GPIO1。

        由PCA6416引出的GPIO有:GPIO3、GPIO4、GPIO5、GPIO6、GPIO7。

 

 

 

 

由于GPIO3,4,5,6,7是通过IO口扩展芯片扩展的IO口,控制是使用I2C方式控制PCA6416.读取控制速度不如GPIO0,GPIO1,如果程序中有使用输入口作为检测使用(while(1)中一直监控IO口输入状态,例如按键检测)请优先使用GPIO0,GPIO1.

二、GPIO软件代码控制使用

1. 获取GPIO操作权限。

首先让开发板默认用户 HwHiAiUser 获得开发板硬件软件控制权限,这个可以登录开发板在开发板/etc/rc.local 中修改,增加如下语句

echo 504 >/sys/class/gpio/export

echo 444 >/sys/class/gpio/export

chown -R HwHiAiUser /sys/class/gpio/gpio444

chown -R HwHiAiUser /sys/class/gpio/gpio504

chown -R HwHiAiUser /sys/class/gpio/gpio444/direction

chown -R HwHiAiUser /sys/class/gpio/gpio504/direction

chown -R HwHiAiUser /sys/class/gpio/gpio444/value

chown -R HwHiAiUser /sys/class/gpio/gpio504/value

chown -R HwHiAiUser /dev/i2c-1

chown -R HwHiAiUser /dev/i2c-2

chown -R HwHiAiUser /dev/ttyAMA0

chown -R HwHiAiUser /dev/ttyAMA1

usermod -aG HwHiAiUser HwHiAiUser

 

以上指令总体上目的就是引出GPIO0,GPIO1,并且让HwHiAiUser获取GPIO0 ,GPIO1,I2C等硬件的软件控制权限,如果rc.local已经加上了这些指令,就不需要重新添加了。

 

 

2. 开发板GPIO样例代码下载。

   到码云上下载GPIO demo源码,https://gitee.com/Atlas200DK 用MindStudio打开使用。

   代码中包含2个模块,其中

GPIO文件夹封装了一个GPIO类,封装了3个接口函数。

 

3. GPIO模块接口函数说明。

GPIO 3个接口函数如下。

int gpio_set_direction(int pin,int direction);  

int gpio_set_value(int pin,int val);      

int gpio_get_value(int pin,int *val); 

 

int gpio_set_direction(int pin,int direction); 

这个函数是设置IO口的状态,输入还是输出。

参数 pin 只能设置为(0,1,3,4,5,6,7),控制对应的IO口。

参数 direction 设置输入还是输出  0代表输入,1代表输出。

 

int gpio_set_value(int pin,int val); 

这个函数是设置IO口的输出高电平还是低电平,前提是已经用gpio_set_direction设置这个口为输出口,否则无效。

参数 pin 只能设置为(0,1,3,4,5,6,7),控制对应的IO口。

参数 val设置输出高电平还是低电平  0代表低电平,1代表高电平。

 

int gpio_get_value(int pin,int *val); 

这个函数是获取IO口的输入高电平还是低电平,前提是已经用gpio_set_direction设置这个口为输入口,否则读取数值不对。

参数 pin 只能设置为(0,1,3,4,5,6,7),控制对应的IO口。

参数 val , int value ,将&value放入到函数中,获取value值。Value 0代表低电平,1代表高电平。



 

4.Custom文件夹里面包含了如何调用这3个接口函数的样例代码。

 在Custom.cpp中。

 

以上就可以对Atlas 200 DK 的7个gpio口进行软件控制了。有其他疑问可以到论坛咨询。

其他接口

Atlas 200 AI加速模块提供UART,I2C,SPI等其他接口,功能描述如下:

表3-9 Atlas 200 AI加速模块连接器功能描述

模块划分 管脚名称 主功能 功能描述
UART0 UART0_RXD RXD UART0接收数据。调试、系统打印、外设扩展等。
UART0_TXD TXD UART0发送数据。调试、系统打印、外设扩展等。
I2C0 I2C0_SCL SCL I2C0总线时钟。Atlas 200 AI加速模块带外管理接口。
用户可以读取Atlas 200 AI加速模块的硬件ID、EEPROM信息。
Atlas  200 AI加速模块内有4.7K上拉电阻,Atlas 200 AI加速模块内已串33Ω电阻。
I2C0_SDA SDA I2C0总线数据,Atlas 200 AI加速模块带外管理接口。
用户可以读取Atlas 200 AI加速模块的硬件ID、EEPROM信息。
Atlas  200 AI加速模块内有4.7K上拉电阻,Atlas 200 AI加速模块内已串33Ω电阻。
I2C1 I2C1_SCL SCL I2C1总线时钟。Atlas 200 AI加速模块内已串33Ω电阻,用户板做外部上拉,使用用户接口电源上拉。
I2C1_SDA SDA I2C1总线数据。Atlas 200 AI加速模块内已串33Ω电阻,用户板做外部上拉,使用用户接口电源上拉。
SPI1 SPI1_CS0_N CS0 SPI1片选0。SPI接口只支持MASTER mode。
SPI1_CS1_N GPIO65 SPI1片选1。
SPI1_CLK CLK SPI1时钟。Atlas 200 AI加速模块内已串33Ω电阻。
SPI1_MOSI MOSI SPI 1 Master OUT/Slave IN,Atlas 200  AI加速模块内已串33Ω电阻。
复用上电strap功能,不使用要悬空,外部不能有上拉。
SPI1_MISO MISO SPI 1 Master IN/Slave Out。
SPI2 SPI2_CS_N CS SPI2片选0,SPI接口只支持MASTER mode。
SPI2_CLK CLK SPI2时钟。Atlas 200 AI加速模块内已串33Ω电阻。
SPI2_MOSI/EMMC_SD_SEL MOSI SPI 2 Master OUT/Slave IN。Atlas 200  AI加速模块内已串33Ω电阻。
上电阶段做strap功能:
EMMC与SD卡模式选择信号,由Atlas 200 AI加速模块外部高低电平配置。0:EMMC,1:SD。
用户板做外部上下拉,上拉电阻使用VBUCK8_1V8,不用MMC接口时可悬空。
SPI2_MISO MISO SPI 2 Master IN/Slave Out。
SPI3& I2C2 SDA SDA I2C2 SDA(复用功能:SPI3片选1-/SPI3_CS)Atlas 200 AI加速模块内已串33Ω电阻。
I2C/UART 用户板做外部上拉;使用用户接口电源上拉。
  I2C2  SCL SCL I2C2 SCL(复用功能:SPI3时钟-SPI3_CLK)Atlas 200 AI加速模块内已串33Ω电阻。
  用户板做外部上拉,使用用户接口电源上拉。
  UART1_TXD TXD UART1 TXD(复用功能:SPI 3 Master OUT/Slave IN)
  UART1_RXD RXD UART1 RXD(复用功能:SPI 3 Master In/Slave Out)
上电 HOST_POWER_EN - Atlas 200 AI加速模块上电控制,Atlas 200  AI加速模块的电源使能信号,高有效。拉高后5ms Atlas 200 AI加速模块上电(内部BOARD  ID与EEPROM电路为独立供电,主电源上电后即工作)。
内部有上拉电阻,不用可悬空,用户不用做上拉。
信号要严格保证时序,建议使用OD接口控制。
HOST_RST_N HOST_RST_N - Atlas 200 AI加速模块热复位接口,1.8V,接到Ascend  310的复位管脚,复位时间大于150us。
信号需要用OD接口或用二极管隔离,防止倒灌。
信号要严格保证时序,默认状态要为高电平。内部有上拉电阻,不用可悬空。作为Atlas 200  AI加速模块的复位接口,必须预留该接口。
中断输出 INT_OUT GPIO69 发送给host的alert信号,低有效。用户板做外部上拉,上拉电阻使用VBUCK8_1V8。
中断输入 INT_IN GPIO1 host发送给Ascend 310中断信号,非下电接口,可用来唤醒Atlas 200  AI加速模块。
用户板做外部上拉,上拉电阻使用VBUCK8_1V8。
风扇控制 PWM0 GPIO12 风扇PWM控制信号1,可做普通GPIO使用。
PWM1 GPIO13 风扇PWM控制信号2,可做普通GPIO使用,可做风扇转速检测(中断模式)。
GPIO GPIO73 GPIO73 通用GPIO,可做中断输入,不使用可以悬空。
GPIO2 GPIO2 通用GPIO模式:可做中断输入,不使用可以悬空。
低功耗模式:使用Atlas 200  AI加速模块低功耗模式时,需预留该管脚作为休眠状态标志位,GPIO2输出高电平表示休眠状态,输出低电平表示唤醒状态。
GPIO6 GPIO6 通用GPIO模式:不使用可以悬空。
低功耗模式:使用Atlas 200  AI加速模块低功耗模式时,需预留该管脚作为使能信号,用于控制模块进行休眠与唤醒,当GPIO6输入高电平,使能Atlas 200  AI加速模块深度休眠,低电平使能唤醒。默认需配置为低电平。
GPIO_RST_OUT GPIO_RST_OUT GPIO_RST_OUT 输出给单板的复位信号。在SoC系统复位时输出为低,直到软件配置输出为高,用于复位单板相关器件。
BOOT_MODE BOOT_MD0 GPIO95 上电过程做为strap功能,配置Atlas 200 AI加速模块的BOOT模式。
用户板做外部上下拉;上拉电阻使用VBUCK8_1V8。
000 on-chip-rom + SFC(xloader) + PCIe(UEFI, EP mode only)。
BOOT_MD1 GPIO96 001 on-chip-rom  + USB加载。
BOOT_MD2 GPIO97 010 on-chip-rom  + SFC(SPI Nor)加载(xloader+UEFI),缺省。
在位检测 P_DETECT_IN - Atlas 200  AI加速模块在位检测信号。2个pin脚分布在连接器两端,并在Atlas 200 AI加速模块内部PCB连接在一起。
P_DETECT_OUT 其一接到host接口并做上拉,另外一个信号接到板外的下地电阻。上拉电源无特殊要求。
  多个Atlas 200  AI加速模块场景可以把在位检测串联使用。
槽位ID SLOT_SEL1 ADC8 Atlas 200  AI加速模块 ADC8信号,多个Atlas 200 AI加速模块场景下,区分Atlas 200 AI加速模块槽位号。
单个ADC可支持10个档位,2个SLOT可支持多Atlas 200 AI加速模块。
Atlas  200 AI加速模块内部上拉100K电阻到ADC电源。用户板接电阻分压下地。电阻参考ID分压表。如果只有一个Atlas 200  AI加速模块使用,就统一都下拉,默认为00。
SLOT_SEL0 ADC7 Atlas 200  AI加速模块 ADC7信号,多个Atlas 200 AI加速模块场景下,区分Atlas 200 AI加速模块槽位号。
单个ADC可支持10个档位,2个SLOT可支持多Atlas 200 AI加速模块。
Atlas  200 AI加速模块内部上拉100K电阻到ADC电源。用户板接电阻分压下地。电阻参考ID分压表。
I2C地址选择 ADD_SEL GPIO74 Atlas 200 AI加速模块 I2C0地址选择信号,可支持2个Atlas 200 AI加速模块共用I2C地址。
Atlas  200 AI加速模块内部采用1K上拉,默认拉高。用户板可用100Ω下拉电阻改变地址。
Ascend  310的I2C0地址通过槽位ID做区分。
Atlas  200 AI加速模块内部2个器件I2C地址(7bit):
EEPROM:ADD_SEL=1,1010001;ADD_SEL=0,1010000。
I2C扩展IC:ADD_SEL=1,0100001;ADD_SEL=0,0100000。
预留接口 RSVD - 预留接口,悬空不接。
电源输入 VSYS - 3.5-4.5V供电,典型值推荐3.8V,电流8A以上。
GND GND - 电源回流地。

 

GPIO接口电平特性

表3-10 GPIO电平参数表(VDDIO电压范围:+1.62 ~ +1.98V)

 

参数 符号 最小值 典型值 最大值 单位
输入低电平 Vil -0.3 - 0.35*VDDIO V
输入高电平 Vih 0.65*VDDIO - 1.98 V
门限值 Vt 0.87 0.97 1.07 V
内部上拉电阻 Rpu 19k 26k 39k ohm
内部下拉电阻 Rpd 18k 24k 34k ohm
输出低电平 Vol - - 0.45 V
输出高电平 Voh VDDIO-0.45 - - V

 

I2C接口电平特性

表3-11 I2C电平参数表(VDDIO电压范围:+1.62 ~ +1.98V)

 

参数 符号 最小值 典型值 最大值 单位
输入低电平 Vil -0.3 - 0.35*VDDIO V
输入高电平 Vih 0.65*VDDIO - 1.98 V
门限值 Vt 0.91 1.01 1.13 V
内部上拉电阻 Rpu 32k 48k 79k ohm
内部下拉电阻 Rpd 30k 44k 68k ohm
输出低电平 Vol - - 0.45 V
输出高电平 Voh VDDIO-0.45 - - V

 

订阅快讯

通过快讯订阅,您将及时收到我们的信息更新通知。