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 |