一. Atlas 200I DK A2 管脚复用功能说明
- 需求背景
1. Atlas 200I DK A2的40pin管脚的复用配置修改后,需要重新生成dt.img,然后重新打包到run包中进行升级,操作复杂;
2. 需要内核态提供管脚复用的模块(dk_40pin_mux.ko);
3. 提供管脚复用关系方案,支持DK在线配置40pin并且掉电不丢失.
内核模块(dk_40pin_mux.ko)
1. 对每个pin提供读写的接口,针对读写接口,读接口用来对外展示当前管脚复用的功能以及可以支持的复用功能;写接口用来配置管脚复用的功能。
> cat /proc/dk_40pin_mux/3
pin [3] current fuction : UART2_CTS
pin [3] can reconfig function as follow:
I2C7_SDA
GPIO2_12
UART2_CTS
2. 允许向复用的管脚文件写入的信息,例如:I2C7_SDA/GPIO2_12
此时,该内核模块将复用的功能对应的值写入到3管脚对应的寄存器中。
3. 提供当前配置保存功能,将当前的管脚复用配置保存为dk_40pin_mux_config.bin,在单板启动过程中如果此文件存在,解析此文件中的信息进行配置。
当向 /proc/dk_40pin_mux/operation,写入save时, 生成 dk_40pin_mux_config.bin,放在 /etc 下, 属主和属组均为root,权限为400。
如果保存时已经存在 dk_40pin_mux_config.bin, 会将 dk_40pin_mux_config.bin 拷贝为备份 dk_40pin_mux_config.bin.bak。
4. 提供恢复当前配置的功能,将当前的管脚复用配置进行解析配置。
当向/proc/dk_40pin_mux/operation,写入restore时,对保存的配置文件进行解析然后配置寄存器.
5. 提供退出按钮
用户态提供管脚复用配置脚本(dk_menu.py)
1. 提供当前管脚复用功能的展示界面,展示管脚当前默认功能
@^^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^^^^^^@
[ ]
[ ]
[ 3.3V ( 1) ( 2) 5.0V ]
[ UART2_CTS ( 3) ( 4) 5.0V ]
[ UART2_RTS ( 5) ( 6) GND ]
[ UART7_TX ( 7) ( 8) GPIO0_14 ]
[ GND ( 9) (10) GPIO0_15 ]
[ UART2_RX (11) (12) SPI8_CSN ]
[ GPIO1_06 (13) (14) GND ]
[ GPIO2_15 (15) (16) GPIO2_16 ]
[ 3.3V (17) (18) PWM1-DET ]
[ UART3_CTS (19) (20) GND ]
[ UART3_RX (21) (22) GPIO0_02 ]
[ UART3_RTS (23) (24) UART3_TX ]
[ GND (25) (26) CAN2_RX ]
[ I2C6_SDA (27) (28) I2C6_SCL ]
[ UART7_RX (29) (30) GND ]
[ CAN2_TX (31) (32) PWM3 ]
[ GPIO4_00 (33) (34) GND ]
[ SPI8_SDI (35) (36) UART2_TX ]
[ GPIO0_03 (37) (38) SPI8_SDO ]
[ GND (39) (40) SPI8_SCLK ]
[ ]
[ ]
[ ]
[ Configure 40-pin combined functions ]
[ Configure 40-pin for GPIO functions ]
[ Save and exit without rebooting ]
[ Discard pin changes ]
[ Exit ]
2. 提供管脚复用功能复用界面
· 上下箭头选择复用关系
· 空格选择/取消复用关系
· 如果某个管脚已经被其他功能占用,则给出提示
· 如果某个管脚已经被复用为GPIO,需要在下个页面取消复用
@^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^^^^^^^@
[ ]
[ Select desired functions (for pins): ]
[ ]
[ ]
[ [ ] I2C6 (8, 10) ]
[ [ ] I2C7 (3, 5) ]
[ [ ] I2C11 (21, 24) ]
[ [ ] I2C12 (19, 23) ]
[ [ ] I2S0 (7, 12, 35, 38, 40) ]
[ [ ] UART0 (8, 10) ]
[ [ ] UART1 (15, 16) ]
[ [ * ] UART2_with_RTS_CTS (3, 5, 11, 36) ]
[ [ ] UART2 (11, 36) ]
[ [ * ] UART3_with_RTS_CTS (19, 21, 23, 24) ]
[ [ ] UART3 (21, 24) ]
[ [ * ] UART7 (7, 29) ]
[ [ * ] PWM3 (32,) ]
[ [ * ] PWM1 (18,) ]
[ [ ] SPI0 (19, 21, 23, 24) ]
[ [ * ] SPI8 (12, 35, 38, 40) ]
[ [ * ] CAN2 (26, 31) ]
[ [ ] CAN3 (11, 36) ]
[ ]
[ ]
[ back ]
[ ]
[ ]
[ ]
[ The pins has been used. Please check and reconfigure it! ]
3. 单独提供GPIO功能复用界面
· 如果某个管脚已经被复用其他功能,需要在上一个页面取消复用
@^^^^^^^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^@
[ ]
[ ]
[ ]
[ Configure the pins for GPIO: ]
[ ]
[ [ ] GPIO2_12 (3) ]
[ [ ] GPIO2_11 (5) ]
[ [ ] GPIO7_02 (7) ]
[ [ * ] GPIO0_14 (8) ]
[ [ * ] GPIO0_15 (10) ]
[ [ ] GPIO2_18 (11) ]
[ [ ] GPIO7_03 (12) ]
[ [ * ] GPIO2_15 (15) ]
[ [ * ] GPIO2_16 (16) ]
[ [ ] GPIO0_25 (18) ]
[ [ ] GPIO2_27 (19) ]
[ [ ] GPIO2_28 (21) ]
[ [ ] GPIO2_25 (23) ]
[ [ ] GPIO2_26 (24) ]
[ [ ] GPIO2_19 (26) ]
[ [ ] GPIO7_07 (29) ]
[ [ ] GPIO2_20 (31) ]
[ [ ] GPIO1_01 (32) ]
[ [ ] GPIO7_04 (35) ]
[ [ ] GPIO2_17 (36) ]
[ [ ] GPIO7_06 (38) ]
[ [ ] GPIO7_05 (40) ]
[ ]
[ ]
[ back ]
[ ]
4. 提供脚本退出的功能
退出并保存当前复用功能:Save and exit without rebooting
恢复当前功能:Discard pin changes
退出程序:Exit
@^^^^^^^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^@
[ ]
[ ]
[ ]
[ Save and exit without rebooting ]
[ Discard pin changes ]
[ Exit ]
[ ]
[ ]
```
- 编译内核模块(dk_40pin_mux.ko)
1. 下载 Ascend-hdk-310X-sdk-soc_24.1.rc2.zip,解压后上传 交叉编译工具链(toolchain.tar.gz) 和 源码包(Ascend310X-source.tar.gz)
https://www.hiascend.com/hardware/firmware-drivers/community?product=1&model=30&cann=8.0.0.beta1&driver=1.0.28.alpha
2. 配置交叉编译工具
> mkdir /opt/compiler
> tar -xvf toolchain.tar.gz -C /opt/compiler
> echo "export PATH=/opt/compiler/toolchain/bin:\$PATH: " >> /etc/profile
> source /etc/profile
> aarch64-target-linux-gnu-gcc -v (有 gcc version .. 输出表示配置正常)
3. 编译内核模块
> tar -xzvf Ascend310X-source.tar.gz -C /opt
> cd Ascend310X-source
> bash build.sh kernelSource (最后会输出:kernel_directory is [/opt/Ascend310X-source/driver/kernel/linux-4.19])
> mkdir /opt/dk_40_pin_mux && cd /opt/dk_40_pin_mux, 将 dk_40pin_mux.c 和 Makefile 拷贝到当前目录
> make -C /opt/Ascend310X-source/driver/kernel/linux-4.19 ARCH=arm64 M=`pwd` modules CROSS_COMPILE=aarch64-target-linux-gnu-
> 将编译好的 dk_40pin_mux.ko 上传到DK, insmod dk_40pin_mux.ko 加载
一. Atlas 200I DK A2 管脚复用功能说明
- 需求背景
1. Atlas 200I DK A2的40pin管脚的复用配置修改后,需要重新生成dt.img,然后重新打包到run包中进行升级,操作复杂;
2. 需要内核态提供管脚复用的模块(dk_40pin_mux.ko);
3. 提供管脚复用关系方案,支持DK在线配置40pin并且掉电不丢失.
内核模块(dk_40pin_mux.ko)
1. 对每个pin提供读写的接口,针对读写接口,读接口用来对外展示当前管脚复用的功能以及可以支持的复用功能;写接口用来配置管脚复用的功能。
> cat /proc/dk_40pin_mux/3
pin [3] current fuction : UART2_CTS
pin [3] can reconfig function as follow:
I2C7_SDA
GPIO2_12
UART2_CTS
2. 允许向复用的管脚文件写入的信息,例如:I2C7_SDA/GPIO2_12
此时,该内核模块将复用的功能对应的值写入到3管脚对应的寄存器中。
3. 提供当前配置保存功能,将当前的管脚复用配置保存为dk_40pin_mux_config.bin,在单板启动过程中如果此文件存在,解析此文件中的信息进行配置。
当向 /proc/dk_40pin_mux/operation,写入save时, 生成 dk_40pin_mux_config.bin,放在 /etc 下, 属主和属组均为root,权限为400。
如果保存时已经存在 dk_40pin_mux_config.bin, 会将 dk_40pin_mux_config.bin 拷贝为备份 dk_40pin_mux_config.bin.bak。
4. 提供恢复当前配置的功能,将当前的管脚复用配置进行解析配置。
当向/proc/dk_40pin_mux/operation,写入restore时,对保存的配置文件进行解析然后配置寄存器.
5. 提供退出按钮
用户态提供管脚复用配置脚本(dk_menu.py)
1. 提供当前管脚复用功能的展示界面,展示管脚当前默认功能
@^^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^^^^^^@
[ ]
[ ]
[ 3.3V ( 1) ( 2) 5.0V ]
[ UART2_CTS ( 3) ( 4) 5.0V ]
[ UART2_RTS ( 5) ( 6) GND ]
[ UART7_TX ( 7) ( 8) GPIO0_14 ]
[ GND ( 9) (10) GPIO0_15 ]
[ UART2_RX (11) (12) SPI8_CSN ]
[ GPIO1_06 (13) (14) GND ]
[ GPIO2_15 (15) (16) GPIO2_16 ]
[ 3.3V (17) (18) PWM1-DET ]
[ UART3_CTS (19) (20) GND ]
[ UART3_RX (21) (22) GPIO0_02 ]
[ UART3_RTS (23) (24) UART3_TX ]
[ GND (25) (26) CAN2_RX ]
[ I2C6_SDA (27) (28) I2C6_SCL ]
[ UART7_RX (29) (30) GND ]
[ CAN2_TX (31) (32) PWM3 ]
[ GPIO4_00 (33) (34) GND ]
[ SPI8_SDI (35) (36) UART2_TX ]
[ GPIO0_03 (37) (38) SPI8_SDO ]
[ GND (39) (40) SPI8_SCLK ]
[ ]
[ ]
[ ]
[ Configure 40-pin combined functions ]
[ Configure 40-pin for GPIO functions ]
[ Save and exit without rebooting ]
[ Discard pin changes ]
[ Exit ]
2. 提供管脚复用功能复用界面
· 上下箭头选择复用关系
· 空格选择/取消复用关系
· 如果某个管脚已经被其他功能占用,则给出提示
· 如果某个管脚已经被复用为GPIO,需要在下个页面取消复用
@^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^^^^^^^@
[ ]
[ Select desired functions (for pins): ]
[ ]
[ ]
[ [ ] I2C6 (8, 10) ]
[ [ ] I2C7 (3, 5) ]
[ [ ] I2C11 (21, 24) ]
[ [ ] I2C12 (19, 23) ]
[ [ ] I2S0 (7, 12, 35, 38, 40) ]
[ [ ] UART0 (8, 10) ]
[ [ ] UART1 (15, 16) ]
[ [ * ] UART2_with_RTS_CTS (3, 5, 11, 36) ]
[ [ ] UART2 (11, 36) ]
[ [ * ] UART3_with_RTS_CTS (19, 21, 23, 24) ]
[ [ ] UART3 (21, 24) ]
[ [ * ] UART7 (7, 29) ]
[ [ * ] PWM3 (32,) ]
[ [ * ] PWM1 (18,) ]
[ [ ] SPI0 (19, 21, 23, 24) ]
[ [ * ] SPI8 (12, 35, 38, 40) ]
[ [ * ] CAN2 (26, 31) ]
[ [ ] CAN3 (11, 36) ]
[ ]
[ ]
[ back ]
[ ]
[ ]
[ ]
[ The pins has been used. Please check and reconfigure it! ]
3. 单独提供GPIO功能复用界面
· 如果某个管脚已经被复用其他功能,需要在上一个页面取消复用
@^^^^^^^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^@
[ ]
[ ]
[ ]
[ Configure the pins for GPIO: ]
[ ]
[ [ ] GPIO2_12 (3) ]
[ [ ] GPIO2_11 (5) ]
[ [ ] GPIO7_02 (7) ]
[ [ * ] GPIO0_14 (8) ]
[ [ * ] GPIO0_15 (10) ]
[ [ ] GPIO2_18 (11) ]
[ [ ] GPIO7_03 (12) ]
[ [ * ] GPIO2_15 (15) ]
[ [ * ] GPIO2_16 (16) ]
[ [ ] GPIO0_25 (18) ]
[ [ ] GPIO2_27 (19) ]
[ [ ] GPIO2_28 (21) ]
[ [ ] GPIO2_25 (23) ]
[ [ ] GPIO2_26 (24) ]
[ [ ] GPIO2_19 (26) ]
[ [ ] GPIO7_07 (29) ]
[ [ ] GPIO2_20 (31) ]
[ [ ] GPIO1_01 (32) ]
[ [ ] GPIO7_04 (35) ]
[ [ ] GPIO2_17 (36) ]
[ [ ] GPIO7_06 (38) ]
[ [ ] GPIO7_05 (40) ]
[ ]
[ ]
[ back ]
[ ]
4. 提供脚本退出的功能
退出并保存当前复用功能:Save and exit without rebooting
恢复当前功能:Discard pin changes
退出程序:Exit
@^^^^^^^^^^^^^^^^^ Atlas 200I DK A2 40pin configure Tool ^^^^^^^^@
[ ]
[ ]
[ ]
[ Save and exit without rebooting ]
[ Discard pin changes ]
[ Exit ]
[ ]
[ ]
```
- 编译内核模块(dk_40pin_mux.ko)
1. 下载 Ascend-hdk-310X-sdk-soc_24.1.rc2.zip,解压后上传 交叉编译工具链(toolchain.tar.gz) 和 源码包(Ascend310X-source.tar.gz)
https://www.hiascend.com/hardware/firmware-drivers/community?product=1&model=30&cann=8.0.0.beta1&driver=1.0.28.alpha
2. 配置交叉编译工具
> mkdir /opt/compiler
> tar -xvf toolchain.tar.gz -C /opt/compiler
> echo "export PATH=/opt/compiler/toolchain/bin:\$PATH: " >> /etc/profile
> source /etc/profile
> aarch64-target-linux-gnu-gcc -v (有 gcc version .. 输出表示配置正常)
3. 编译内核模块
> tar -xzvf Ascend310X-source.tar.gz -C /opt
> cd Ascend310X-source
> bash build.sh kernelSource (最后会输出:kernel_directory is [/opt/Ascend310X-source/driver/kernel/linux-4.19])
> mkdir /opt/dk_40_pin_mux && cd /opt/dk_40_pin_mux, 将 dk_40pin_mux.c 和 Makefile 拷贝到当前目录
> make -C /opt/Ascend310X-source/driver/kernel/linux-4.19 ARCH=arm64 M=`pwd` modules CROSS_COMPILE=aarch64-target-linux-gnu-
> 将编译好的 dk_40pin_mux.ko 上传到DK, insmod dk_40pin_mux.ko 加载