Atlas 200 DK开发板共有40个管脚输出,其中有7个GPIO脚供用户控制使用。
GPIO0 GPIO1 GPIO3 GPIO4 GPIO5 GPIO6 GPIO7
开发板管脚数字对应可以看开发板40PIN 的两边板子标记,有标记哪个是1脚,哪个是40脚,然后和下图对应接IO口使用。
直接从昇腾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.
首先让开发板默认用户 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已经加上了这些指令,就不需要重新添加了。
到码云上下载GPIO demo源码,https://gitee.com/Atlas200DK 用MindStudio打开使用。
代码中包含2个模块,其中
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代表高电平。
在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 |
表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 |