Files
ascend_community_projects/A200DK_UART_SPI
2022-12-07 12:40:23 +08:00
..
2022-12-07 12:36:42 +08:00
2022-12-07 12:40:23 +08:00
.g
2022-12-05 15:44:16 +08:00
2022-12-07 12:19:59 +08:00
2022-12-05 15:24:27 +08:00

基于昇腾A200DK适配UART/SPI操作库pyserial/spidev

1 概述

1.1 概要描述

基于昇腾A200DK适配UART/SPI操作库pyserial/spidevUART接口与树莓派的GPIO操作模块pyserial保持一致SPI操作接口与python的spidev模块保持一致。

1.2 实现流程

1、环境搭建Atlask 200 DK
2、用C实现pyserial/spidev接口
3、绑定到python接口
4、用外设或示波器测试

2 方案介绍

2.1 Atlas 200 DK UART/SPI介绍

2.1.1UART

UART0是8脚和10脚用于Ascend 310的默认调试串口console波特率115200。

UART1是16和18脚可以用于扩展及与其他模块通信。

UART-Hi3559是38和40脚用于MIPI-CSI接口接入芯片Hi3559调试波特率115200。

表2-1-1 UART相关参数

名称 管脚编号
UART0_TX 8
UART0_RX 10
UART1_TX 16
UART1_RX 18

2.1.2SPI

SPI-CS0、SPI-CLK、SPI-MISO、SPI-MOSI四线SPI接口可以外接各种传感器只支持master模式。

表2-1-2 SPI相关参数

名称 管脚编号
SPI-MOSI 19
SPI-MISO 21
SPI-CLK 23
SPI-CS 24

2.2 pyserial模块介绍

操作

(1)open、serial_open_advanced设置串口参数并打开。
(2)close关闭串口
(3)fileno读取串口的文件描述符
(4)read、readline读取字符串
(5)write向串口写字符串
(6)flush刷新缓存
(7)input_waiting、output_waiting
(8)poll:延迟轮询查询串口

属性

baudrate波特率
bytesize字节大小
parity校验位
stopbits停止位
timeout读超时设置
writeTimeout写超时
xonxoff软件流控
rtscts硬件流控
dsrdtr硬件流控 

2.3 spidev模块介绍

操作

(1)spi_open、spi_open_advanced设置SPI参数并打开。
(2)spi_xfer、spi_xfer2、spi_xfer3传输
(3)spi_read读n个字节
(4)spi_write写n个字节

属性

mode
max_speed
bit_order
bits_per_word
extra_flags: SPI_LOOP等

2.4 代码目录结构与说明

├── serial
│   ├── a200dkserial.egg-info
│   │   ├── dependency_links.txt
│   │   ├── PKG-INFO
│   │   ├── SOURCES.txt
│   │   └── top_level.txt
│   ├── setup.py
│   ├── src
│   │   ├── 200dk_serial.h
│   │   ├── c_serial.c
│   │   └── py_serial.c
│   └── test
│       ├── Makefile
│       ├── test_read.c
│       ├── test_readline.c
│       ├── test_readline.py
│       ├── test_read.py
│       ├── test_set.c
│       └── test_set.py
├── spi
│   ├── setup.py
│   ├── spidev.egg-info
│   │   ├── dependency_links.txt
│   │   ├── PKG-INFO
│   │   ├── SOURCES.txt
│   │   └── top_level.txt
│   ├── src
│   │   ├── a200dkspi.h
│   │   ├── c_spidev.c
│   │   └── py_spidev.c
│   └── test
│       ├── Makefile
│       ├── test01.c
│       ├── test01.py
│       ├── test02.c
│       └── test02.py
├── README.md
└── 操作文档.md

3 开发准备

3.1 环境依赖说明

软件名称 版本
Ubuntu 18.04.1 LTS
GCC 7.5.0
Python 3.7.13
CANN 5.0.5alpha001
固件与驱动 1.0.12

3.2 环境搭建

见Atlas200dk-MindXSDK 开发环境搭建一站式导航: https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/ascend_community_projects/tutorials/200dk%E5%BC%80%E5%8F%91%E6%9D%BF%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA.md

3.3 获取UART/SPI操作权限

1.见 操作文档.docx。/dev/下出现spidev0.0和ttyAMA1即可。

2.su root然后输入密码切换成root用户。

3.vim /etc/rc.local 在exit0前增加如下指令

chown -R HwHiAiUser /dev/spidev0.0
chown -R HwHiAiUser /dev/ttyAMA1
usermod -aG HwHiAiUser HwHiAiUser

4.重启运行环境。

4 编译与运行

4.1 Serial C示例步骤

步骤1 执行如下命令进入到Serial 代码资源目录下。

cd serial/src

步骤2 执行如下命令将c_serial.c编译成.so文件。

gcc c_serial.c -fPIC -shared -o libserial.so

步骤3 执行如下命令在动态库配置文件ld.so.conf文件中添加路径/usr/local/lib

vi /etc/ld.so.conf

步骤4 执行如下命令将libserial.so复制到路径/usr/local/lib下。

cp libserial.so /usr/local/lib

步骤5 执行如下命令,让动态链接库为系统所共享。

ldconfig

步骤6 执行如下命令将200dk_serial.h复制到路径/usr/include下。

cp 200dk_serial.h /usr/include

步骤7 执行如下命令,进入测试文件。

cd ../test

步骤8 执行如下命令,编译测试代码。

gcc c_test.c -L. -lserial -o test

步骤9 执行如下命令,运行测试代码。

./test

4.2 Serial Python示例步骤

步骤1 执行如下命令创建一个python版本为3.7的conda环境py37。

conda create -n py37 python=3.7

步骤2 执行如下命令激活环境py37。

conda activate py37

步骤3 执行如下命令进入到GPIO项目目录下。

cd serial

步骤4 执行如下命令运行setup.py生成whl包。

python setup.py bdist_wheel

步骤5 执行如下命令进入到dist目录下。

cd dist

步骤6 执行如下命令安装whl包。

pip install a200dkserial-0.0.1-cp37-cp37m-linux_aarch64.whl

步骤7 执行如下命令,进入测试文件。

cd ../test

步骤8 执行如下命令,编译并运行测试代码。

python py_test.py

4.3 SPI C示例步骤

步骤1 执行如下命令进入到SPI代码资源目录下。

cd spi/src

步骤2 执行如下命令将c_spidev.c编译成.so文件。

gcc c_spidev.c -fPIC -shared -o libspidev.so

步骤3 执行如下命令在动态库配置文件ld.so.conf文件中添加路径/usr/local/lib

vi /etc/ld.so.conf

步骤4 执行如下命令将libspidev.so复制到路径/usr/local/lib下。

cp libspidev.so /usr/local/lib

步骤5 执行如下命令,让动态链接库为系统所共享。

ldconfig

步骤6 执行如下命令将a200dkspi.h复制到路径/usr/include下。。

cp a200dkspi.h /usr/include

步骤7 执行如下命令,进入测试文件。

cd ../test

步骤8 执行如下命令,编译测试代码。

gcc c_test.c -L. -lspidev -o test

步骤9 执行如下命令,运行测试代码。

./test

4.4 SPI Python示例步骤

步骤1 执行如下命令创建一个python版本为3.7的conda环境py37。

conda create -n py37 python=3.7

步骤2 执行如下命令激活环境py37。

conda activate py37

步骤3 执行如下命令进入到SPI项目目录下。

cd spi

步骤4 执行如下命令运行setup.py生成whl包。

python setup.py bdist_wheel

步骤5 执行如下命令进入到dist目录下。

cd dist

步骤6 执行如下命令安装whl包。

pip install a200dkspidev-0.0.1-cp37-cp37m-linux_aarch64.whl

步骤7 执行如下命令,进入测试文件。

cd ../test

步骤8 执行如下命令,编译并运行测试代码。

python py_test.py

5 参考链接

Atlas200dk-MindXSDK 开发环境搭建一站式导航: https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/ascend_community_projects/tutorials/200dk%E5%BC%80%E5%8F%91%E6%9D%BF%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA.md

Atlas 200 DK开发者套件 1.0.13 外围设备驱动接口操作指南: https://www.hiascend.com/document/detail/zh/Atlas200DKDeveloperKit/1013/peripheralref/atlaspd_07_0001.html

树莓派的pyserialhttps://pypi.org/project/pyserial/#files

python的SPI操作模块spidevhttps://pypi.org/project/spidev/#files

Atlas200DK各硬件接口的使用样例 https://gitee.com/ascend/samples/tree/master/cplusplus/level1_single_api/5_200dk_peripheral