PYNQ是赛灵思开发的一个面向创客的板子,其实仔细查下官方的文档操作还是很方便的,但是东西太杂了,,,实在不好找到,下面这篇博客将解决关于PYNQ是uart的使用的部分问题,欢迎大家补充

学习内容

PYNQ的串口使用

开发环境

PYNQ 这里我用的是2.3的官方镜像,jupyter-Notebook

官方文档参考

[https://pynq.readthedocs.io/en/latest/pynq_libraries.html#pynqmicroblaze]
在官方文档中可以看到是这样说的:
PYNQ库
典型的嵌入式系统支持的外围设备的固定组合(例如SPI,IIC,UART,视频,USB)。也可能有一些GPIO(通用输入/输出引脚)可用。GPIO的可用的在CPU基于嵌入式系统的数量通常是有限的,且GPIO也由主CPU控制。作为被管理系统的其余部分的主CPU,GPIO性能通常是有限的。
ZYNQ平台通常比一个典型的嵌入式系统提供更多的IO引脚。专用的硬件控制器和附加软处理器可以在PL中实现,并连接到外部接口。这意味着,这些接口性能比其他嵌入式系统高得多。

PYNQ在Linux上运行它默认使用以下ZYNQ PS外设:SD卡引导系统和宿主Linux文件系统,以太网连接到笔记本Jupyter,UART的Linux终端的接入和USB。

USB端口等标准接口可以用来关断的,现成的USB和其他外围设备连接到该PS ZYNQ在那里他们可以在Python / Linux的控制。该PYNQ图像目前包括最常用的USB摄像头驱动程序,无线外设等标准的USB设备。

其他外围设备可以连接到并从ZYNQ PL访问。例如HDMI,音频,按钮,开关,LED,以及通用接口,包括Pmods,和Arduino的。由于PL是可编程的,可以使用之前,其提供了一种用于这些外设或接口控制器的覆盖必须被加载。

硬件IP的库包含在Vivado其可用于连接到广泛的接口标准和协议。PYNQ提供一个Python API对一些普通外设,包括视频(HDMI IN和OUT),GPIO装置(按钮,开关,指示灯)和传感器和致动器。该PYNQ API还可以扩展到支持额外的IP。

ZYNQ平台通常具有一个或多个报头或接口,其允许外部外围设备的连接,或直接连接到所述ZYNQ PL引脚。关的,现成的外围设备的范围可以连接到PMOD和Arduino的接口。其他外设可以通过适配器连接到这些端口,或用面包板。请注意,虽然外围可以物理地连接到ZYNQ PL销,控制器必须构建覆盖和软件驱动程序提供的,可用于外围之前。

该PYNQ库提供支持,为PynqMicroBlaze子系统,使预编译的应用程序被加载,并且新的应用程序进行创建和编译Jupyter。

PYNQ还提供了一种覆盖的低电平控制包括存储器映射的IO读取/写入,存储器分配(例如,用于使用由PL主)覆盖的,控制和管理(下载的覆盖,在覆盖读取IP支持),以及PL的低电平控制(下载的比特流)。

可以发现在官方的PYNQ Microblaze的库中我们可以找到想要的UART,那么就去这里找找吧

在这个库我们发现了嵌入式的常用的一些驱动协议接口的设置函数

emmm虽然官方库给出来了,但是由于PYNQ的国内的使用者还算少,所以咱们对于他们官方函数的使用还是不清晰,经过本人的不断的试错和朋友的帮助,现在可以完成在PYNQ进行发和收

首先,还是看下官方的说明吧:

UART Devices
This device driver controls a UART master(此设备驱动器控制一个UART主设备)

uart type
Handle to a UART master device.(处理UART主设备)

头文件查到的是这样的
/* * UART API*/
typedef int uart;

uart uart_open(unsigned int tx, unsigned int rx)
Open a UART device on the specified pins(打开特定管脚的uart设备)

uart uart_open_device(unsigned int device)
Open a UART device by base address or index(由基地址或索引打开UART设备)

void uart_read(uart dev_id, char* read_data, unsigned int length)
Read a fixed length of data from the UART(读取数据的固定长度从UART)

void uart_write(uart dev_id, char* write_data, unsigned int length)
Write a block of data to the UART(写数据到UART块)

void uart_close(uart dev_id)
Close the handle.(关闭串口)

函数讲解

这里我们需要用到的是uart uart_open(unsigned int tx, unsigned int rx),void uart_read(uart dev_id, char* read_data, unsigned int length),void uart_write(uart dev_id, char* write_data, unsigned int length)

打开串口函数:uart uart_open(unsigned int tx, unsigned int rx)

根据自己的需要设置引脚,这里我们随便设置两个引脚:这个引脚的数字具体参考官方的原理图:我这里设置的是14 15
是RPIO_14 RPIO_15也就是这里的8和10

串口的接收函数:void uart_read(uart dev_id, char* read_data, unsigned int length)

dev_id:这里是之前uart type,也就是uart_open()函数的返回值

char* read_data:这里是串口接收的数据存储的地址

unsigned int length: 接收的数据是固定长度的,这里是定义接收的字符串长度的

串口的发送函数:void uart_write(uart dev_id, char* write_data, unsigned int length)

dev_id:这里是之前uart type,也就是uart_open()函数的返回值,这里返回值的具体定义还在扒代码。。

char* read_data:这里是串口发送的数据存储的地址

unsigned int length: 发送的数据是固定长度的,这里是定义发送的字符串长度的

代码解读

首先加载官方的overlays,并且把mb.lib包含下:

from pynq.overlays.base import BaseOverlay
from pynq.lib import MicroblazeLibrary
base = BaseOverlay('base.bit')
print('finish')

打开串口

lib = MicroblazeLibrary(base.RPI, ['uart'])
device = lib.uart_open(14,15)

串口发送测试:

list2 = [101]
for num in range(10,20):lib.uart_write(device,list2, len(list2))
number=[101,110]

这里是我测试的代码,写的可能比较乱,当时只是为测试来着

number=[101,110]
flag=0
flag1=0
while(1):if(base.buttons[3].read()==1):if(flag==0):print(number)flag=1#lib.uart_read(device,number,len(number))lib.uart_write(device,number,len(number))lib.uart_read(device,number,len(number))if(base.buttons[1].read()==1&flag1==0):flag1==1lib.uart_read(device,number,len(number))print(number)elif(base.buttons[0].read()==1):break
base.rgbleds[5].write(2)

给出一段只接收的代码:

number=[101,110]
while(1):lib.uart_read(device,number,len(number))

理论上这样就可以读取长度为2的数据了,
注意:这里读取到的数据都是数字,如果要对字符串进行操作的话,还需要对存数据的列表进行转换操作,后面给出字符串的转换操作

字符串的转换操作

可能比较笨,欢迎py大佬指教

nit_dat=['0','0','.','0','0','c','m','0','0','.','0','C','0','0','0']#初始化传感器数据
rxd_dat=[ord(i) for i in init_dat]#接收数据缓冲区
show_dat=[chr(i) for i in rxd_dat] #使用列表推导式把列表中的单个元素全部转化为str类型
print(show_dat)
finalshow_dat= "".join(show_dat)
print(finalshow_dat)

暂时先分享这样一个uart使用,后面发掘到别的再继续发文。

PYNQ-关于PYNQ的UART的使用(RPI接口)相关推荐

  1. 【PYNQ】PYNQ的视频资料介绍

    <这个是之前B站的粉丝说想看> 板卡购买: Digilent(迪芝伦)PYNQ 目录 微信公众号:PYNQ开源社区 百度/CSDN博客 Bilibili GitHub/ Gitee(开源项 ...

  2. USB/UART/I2C/SPI等接口传输速率

    目录 USB总线 UART I2C总线 SPI总线 GPIO(RK3399) FMC 参考 USB总线 USB1.1: ---低速模式(low speed):1.5Mbps ---全速模式(full ...

  3. uart口图片_uart接口有什么特点与功能

    认识UART接口 嵌入式里面说的串口,一般是指UART口, 但是我们经常搞不清楚它和COM口的区别, 以及RS232, TTL等关系, 实际上UART,COM指的物理接口形式(硬件), 而TTL.RS ...

  4. PYNQ例程一:1.3 PYNQ Overlays

    Xilinx®Zynq®All Programmable device是基于ARM®Cortex®-A9双核处理器(简称处理系统或PS)集成FPGA fabric(简称可编程逻辑或PL)的SOC.PS ...

  5. PYNQ官方镜像配置

    目录 一.软件资源 1.镜像文件 2.SD烧录镜像文件 二.网络环境配置 三.Jupyter在线编程 四.Samba 文件共享 五.测试 使用环境:PYNQ - Z2一张 microSD卡,一个 mi ...

  6. ultra96搭建支持PYNQ框架的SDSoC Platform

    前言 用过的ZYNQ开发板有PYNQ-Z1,PYNQ-Z2,ZC702,MiniZed,ZCU102,ZCU104还有本篇文章的主角--Ultra96,在这些开发板里我最喜欢的就是这块Ultra96. ...

  7. ZCU106的PYNQ移植

    ZCU106的PYNQ移植 PYNQ官方给出SD img 文件的开发板目前有三块:PYNQ-Z1,PYNQ-Z2以及ZCU104.笔者这次将进行ZCU106的PYNQ移植. 一:准备工作 移植的准备工 ...

  8. 玩转PYNQ系列:一、板卡简介与资源整理

    本帖最后由 枫雪天 于 2018-12-31 10:53 编辑 非常幸运能够获得这次的试用机会,对Xilinx的Zynq系列FPGA心仪已久,正准备趁年关学习一下,与电子发烧友本次发布的PYNQ-Z2 ...

  9. 创建 Pynq Overlay

    本文使用环境: Xilinx Design Tools Vitis Unified Software Platform 2021.1 (version 2021.1.1) Pynq 2.6.1 Art ...

最新文章

  1. 【OpenCV】正确创建用于保存YUV420P格式的cv::Mat
  2. 理解分布式id生成算法--雪花算法(SnowFlake)
  3. 电脑编程教学_东莞沙田mastercam编程学习怎么收费
  4. 实现算法2.11、2.12的程序
  5. Visio图片加全边框
  6. springboot 配置 P6spy
  7. php抓取关键词排名,如何 用php抓取google关键词排名?
  8. 【OpenGL】用GLFW和glad创建窗口
  9. java项目 无法重命名_重命名项不起作用
  10. 【实时语音转文本】PC端实时语音转文本(麦克风外音系统内部音源)
  11. windows7、10磁盘分区以及磁盘扩展(详细教程以及注意事项)
  12. DOS批处理简明高级教程
  13. Java - 加号(+)的作用
  14. FastDFS构成、特性、Linux下安装以及Java如何访问
  15. 2022图灵奖出炉!以太网之父鲍勃·梅特卡夫获奖,76岁进入新领域再出发
  16. Python列表去重顺序不变
  17. ios -静默方式发送邮件
  18. Charles设置代理后无法上网问题
  19. javascript中sessionStorage 、localStorage 和 Cookie
  20. 教你winscp使用教程

热门文章

  1. 嵌入式行业是个坑吗?
  2. 一个优秀的前端工程师年薪会有多少?
  3. Praat脚本-010 | 提取时长和共振峰
  4. 115846-45-2、二肽标记肽Suc-GP-对硝基苯胺、 Suc-Gly-Pro-pNA
  5. 中值滤波(python实现)
  6. C/C++实例goto语句实现“关机代码”
  7. python xlwt
  8. 实现百度下拉菜单实例(利用jsonp跨域请求百度数据接口)
  9. android x86怎么装驱动,mt65xx android phone驱动怎么安装【图文教程】
  10. 安卓虚拟键盘_0202年了,苹果IOS和安卓系统的差距还大吗?