ZYNQ_SDK EMIO

简介: ZYNQ_SDK EMIO

ZYNQ_SDK EMIO

PS 和外部设备之间的通信主要是通过复用的输入/输出(Multiplexed Input/Output,MIO)实现的。除此之外,PS 还可以通过扩展的 MIO(Extended MIO,EMIO)来实现与外部设备的连接。

EMIO 使用了 PL 的I/O 资源,可以用来扩展PS引脚,也可以用来连接PL中实现的IP模块。

简介

ZYNQ GPIO 接口信号被分成四组,分别是从 BANK0 到 BANK3。

  • 其中 BANK0 和 BANK1 中共计 54个信号通过 MIO 连接到 ZYNQ 器件的引脚上,这些引脚属于 PS 端
  • BANK2 和 BANK3 中共计 64 个信号则通过 EMIO 连接到了 ZYNQ 器件的 PL 端

PS 端经由 EMIO 引出的接口会直接连接到 PL 端的器件引脚上,通过 IO 管脚约束来指定所连接 PL 引脚的位置。( MIO 不需要手动指定引脚约束 )

通过这种方式,EMIO 可以为 PS 端实现额外的 64 个输入引脚64 个带有输出使能的输出引脚

输入引脚 和 带输出使能的输出引脚

EMIO 还有一种使用方式,就是用于连接 PL 内实现的功能模块(IP 核),此时 PL 端的 IP 作为 PS 端的一个外部设备

硬件设计

框图

因为 EMIO 使用了 PL 端的 IO 资源,所以增加了 PL 部分PL 端与按键 KEY和LED相连的引脚直接通过 EMIO 连接到 PS 端。

步骤
step1: 配置EMIO

MIO Configuration -> GPIO -> 勾选EMIO GPIO -> 位宽 2

将 EMIO 扩展一个 2 位的 GPIO 接口信号,此信号将用于连接 PL 端的引脚

在 Diagram 窗口中可以看到 ZYNQ7 Processing System多了一个 GPIO_0 端口

点击选中该端口,然后点击鼠标右键,在弹出的列表中选择"Make External"( 引出 ),可以看到ZYNQ7 Processing System 引出了一个名为GPIO_0_0的接口

点击选中该接口,在左侧 External Interface Properties一栏中将该接口的名称修改

step2: 生成顶层HDL

在 Sources 窗口中展开 Design Sources,然后右键点击 sysetm_wrapper 下的 system.bd,在弹出的菜

单中选择 Generate Output Products

step3: 创建顶层HDL Wrapper

step4: 生成Bitstream文件导出到SDK

Flow Navigator 导航栏中找到 RTL ANALYSIS,点击该选项中的"Open Elaborated Design"

I/O Planning:在 I/O Ports 窗口中对 PL 部分的接口进行管脚分配

如果是MIO的输入/输出接口不需要手动进行管脚分配,选择"Generate Output Products"之后,Vivado 工具会自动创建 PS 端的管

脚约束文件。

自行扩展的GPIO的接口信号,需要手动将其分配引脚,要与原理图对应。

按键SW :

LED:

引脚绑定:

step5: 导出硬件

File -> Export -> Export Hardware

在弹出的对话框中,勾选“Include bitstream”

如果设计使用了 PL 的资源,比如使用了 PL 的引脚,或者在 PL 内实现了部分功能模块,那么就需要生成 Bitstream 文件,并在导出硬件的时候包含该文件。

资源消耗

在 IMPLEMENTED DESIGN 界面可以查看设计对 PL 资源的使用情况。

在左侧 Flow Navigator 导航栏中找到 IMPLEMENTATION,点击该选项中的"Report Utilization"

软件设计

导出的为硬件设计文件

步骤
step1: 在SDK中创建应用工程

File > New > Application Project,新建一个 SDK 应用工程

  • Project name : 指定项目名称
  • Hardware Platform 指定硬件设计文件
  • Board Support Package : BSP 板级支持包,可以指定名称
step2: 应用程序编写
/**
 * Create by wkk 2023.3.20
 * read sw state to control led
 */
#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"
#define GPIOPS_ID XPAR_XGPIOPS_0_DEVICE_ID //PS 端 GPIO 器件 ID
#define EMIO_LED 54 //PL_LED 连接到 EMIO0
#define EMIO_KEY 55 //PL_KEY 连接到 EMIO1
int main()
{
  XGpioPs gpiops_inst; //PS 端 GPIO 驱动实例
  XGpioPs_Config *gpiops_cfg_ptr; //PS 端 GPIO 配置信息
  //根据器件 ID 查找配置信息
  gpiops_cfg_ptr = XGpioPs_LookupConfig(GPIOPS_ID);
  //初始化器件驱动
  XGpioPs_CfgInitialize(&gpiops_inst, gpiops_cfg_ptr, gpiops_cfg_ptr->BaseAddr);
  //设置 LED 为输出
  XGpioPs_SetDirectionPin(&gpiops_inst, EMIO_LED, 1);
  //使能 LED 输出
  XGpioPs_SetOutputEnablePin(&gpiops_inst, EMIO_LED, 1);
  //设置 KEY 为输入
  XGpioPs_SetDirectionPin(&gpiops_inst, EMIO_KEY, 0);
  //读取按键状态,用于控制 LED 亮灭
  while(1){ // 按键按下与抬起是不同的状态
    XGpioPs_WritePin(&gpiops_inst, EMIO_LED,~XGpioPs_ReadPin(&gpiops_inst, EMIO_KEY));
  }
  return 0;
}

说明:

  1. 引脚编号
#define EMIO_LED 54 //PL_LED 连接到 EMIO0
#define EMIO_KEY 55 //PL_KEY 连接到 EMIO1
  1. 引脚编号可以在xgpiops.h头文件中查找, 0-53为MIO, 后面为EMIO,依次编号
  2. 下载说明
    使用了PL内的资源,在下载软件编译生成的elf文件之前,需要先下载硬件设计生成的bitstream文件,对PL部分进行配置。


也可以在Run Configuration 中配置,先进行系统复位,然后Program FPGA, 然后再Run as

点击Run 后,SDK软件首先会复位整个系统,清除FPGA逻辑,重新下载bitstream 和 elf 文件。

总结

通过 EMIO 扩展的 GPIO 接口的使用方法和 MIO 没有任何区别。

头文件说明:

  • xparameters.h 定义了 设备地址、参数等等信息
  • xgpiops.h 包含了 ps操作gpio相关的操作

基本操作流程:

  • 根据器件 ID 查找配置信息
XGpioPs_Config *gpiops_cfg_ptr; //PS 端 GPIO 配置信息
//根据器件 ID 查找配置信息
gpiops_cfg_ptr = XGpioPs_LookupConfig(GPIOPS_ID);
  • 初始化器件驱动
XGpioPs gpiops_inst; //PS 端 GPIO 驱动实例
//初始化器件驱动
XGpioPs_CfgInitialize(&gpiops_inst, gpiops_cfg_ptr, gpiops_cfg_ptr->BaseAddr);
  • 设置输入输出模式
// 0 for Input Direction, 1 for Output Direction.
XGpioPs_SetDirectionPin(&gpiops_inst, EMIO_LED, 1);
  • 读写操作
XGpioPs_WritePin(&gpiops_inst, EMIO_LED,0x01)
XGpioPs_ReadPin(&gpiops_inst, EMIO_KEY));
相关文章
|
算法 开发工具 芯片
5.0 芯片SDK开发:芯片SDK概念|学习笔记
快速学习5.0 芯片SDK开发:芯片SDK概念
5.0 芯片SDK开发:芯片SDK概念|学习笔记
|
物联网 芯片
[基础篇]ESP8266-SDK教程(零)之认识并了解
从今天开始就要开始在博客园灌水了,因为本人从事物联网相关的行业,所以对物联网还算有一定的了解和认识,目前主要做LoRa这一块的应用,不过这个系列文章不是关于LoRa的,主要是关于ESP8266开发的,这也算是个人业余的一点小爱好吧,最近也用这款芯片做了不少好玩的东西,比如对接天猫精灵控制LED灯、ESP8266内置网页控制LED灯、微信小程序控制LED灯等等,纳尼?怎么全是跟灯有关?感兴趣的可以去往我的想法列表看一下相关视频,后面文章也会给大家讲解。
3979 0
|
网络安全 开发工具
MCU + 模组 使用C LINK SDK
我在使用C LINK SDK时,跑MQTT DEMO在handshake期间会卡死,如果不用SSL就能连接到阿里云,请问这是什么原因呢
|
9月前
|
开发工具 C语言 内存技术
ZYNQ_SDK HelloWorld实验
ZYNQ_SDK HelloWorld实验
|
算法 开发工具 芯片
5.7:芯片SDK开发:发布SDK工程|学习笔记
快速学习5.7:芯片SDK开发:发布SDK工程
5.7:芯片SDK开发:发布SDK工程|学习笔记
|
9月前
|
开发工具 芯片 Perl
ZYNQ_SDK MIO控制LED
ZYNQ_SDK MIO控制LED
|
物联网 Linux 开发工具
[基础篇]ESP8266-SDK教程(一)之开发环境搭建
上篇文章我们了解了ESP8266到底是个什么“东西”,了解了ESP8266在这个万物互联时代有哪些优势,那我们不能光是了解,我们还需要去深入的学习一下,争做物联网时代的弄潮儿~继往开来第二篇,本篇文章主要介绍一下几种常见的ESP8266开发方式,感觉现在不管是学习硬件开发还是软件开发,第一节课都是先学习一下开发环境搭建,毕竟这个开发环境不单单是有台电脑就足够了,交叉编译工具链才是最重要的,我们需要将写的代码编译成可以在ESP8266上运行的代码,这一步就需要交叉编译工具。
5845 0
|
开发工具
为 NokiaQt SDK增加新的Symbian SDK开发平台
  概述 在Nokia Qt SDK中,用户能很方便地为Symbian创建Qt应用。但是开发者希望使用某些Symbian代码或者利用Symbian带的一些开发库时,Nokia Qt SDK的标准安装包中并没有提供这种支持。
973 0
|
移动开发 JSON 网络协议
[网络篇]ESP8266-SDK教程(五)之SmartConfig、Airkiss等多种配网方式
在前面网络篇TCP通信中,我们用到了Wi-Fi功能,但是没有细讲,今天我们在这篇文章中仔细探讨一下ESP8266的Wi-Fi联网过程,以及各种方式的配网过程是如何实现的。文章中难免有疏漏或不正确的地方,如遇不正确的表述还请指出,本系列文章现在在知乎和简书同步更新。
4621 0
|
开发工具 图形学
Pico SDK在Unity中如何控制移动
Unity导入Pico SDK后如何进行实际开发呢?想必大家都很好奇。从去年的省赛到今年的国赛, 本人研究Pico有快一年了,刚开始学习的时候自己翻过很多的博主文章,都没有找到自己想要的知识,从那时起,我便下定决心,等国赛过后 自己要写写虚拟设备的使用了,那就以我的视角来为大家讲解Pico SDK的正确使用。
794 1
Pico SDK在Unity中如何控制移动

热门文章

最新文章