Android设备通过usb控制zedboard产生pwm波实验

一、实验目的

安卓设备如安卓平板,通过usb与zedboard通信,在安卓设备端控制zedboard端产生的pwm波的频率和占空比。

示意图如下图所示:

图1. 实验示意图

二、实验方案

安卓设备作为usbhost,在安卓端开发一个简单的app,带有简单的UI,如pwm波频率、占空比设置按钮。该app检测usb设备是否插入,若有设备插入,获取端点号,通过收发信息。

Zedboard作为usb device。Zedboard官方给出的资料比较散和少(相对其他嵌入式学习套件),故通过修改ZedBoard_Standalone_USB_Device_Tutorial_14_6_01(zedboard设计案例,在zedboard.org可以下)来实现。在ZedBoard_Standalone_USB_Device_Tutorial_14_6_01中,zedboard模拟一个usb massstorage类设备(U盘)。故本实验安卓设备和zedboard的通信过程模拟读写U盘的过程。

在Zedboard的zynq芯片PS部分实现pwm波比较简单,为了了解zynq芯片软硬件的协同开发流程,决定在PL(FPGA)部分实现PWM。

实验方案框图如下图所示:

图2.方案框图

三、实验过程

1.    zedboard端

1.1  用户IP核设计

该部分主要参考陆佳华的《嵌入式系统软硬件协同设计实战指南》一书和网上的一些blog。但是在做的过程中还是有很多需要注意的地方。

1.1.1         AXI PWM设计

在vivado2014.2中建立RTLproject,目标板选择zedboard.

在Tools->Create and Package创建用户ip.

创建完在IP Catalog中打开IP管理器,可以看到添加的AXI PWM。编辑用户IP。

编辑完用户IP记得要Review and Package。

1.1.2         添加用户IP

回到系统工程界面,单击Create Block Design创建新的Block Design。

添加IP,如下图所示。

这里要注意了。

图3. Block diagram

添加完ZYNQ _Process IP,双击该IP进入设置。

在设置界面的Presets设置项选择zedboard。

连线。

选取工程中.bd文件单击Generate Output Products和Create HDL Wrapper。

添加约束文件Add or Create Constraints。

Generate Bitstream.

Export->Export hardware, lauch SDK.要Include bitstream文件哦。

新建一个hello world工程。

导入pwm driver,选择XilinxTools->Repositories,浏览到axi_pwm目录下。

右键xxx_bsp,选择Board Support PackageSetting。找到axi_pwm_0,选择axi_pwm。

正常情况下SDK工程目录下:

 

然后可以在hello.c中写点pwm测试代码了。

1.2  usb Tutorial移植和修改

在ZedBoard_Standalone_USB_Device_Tutorial_14_6_01包doc目录下有该案例的参考文档,参照文档描述的步骤即可成功地在zedboard上运行该程序。将运行了该程序的zedboard通过usb连接到电脑(一般电脑都会有U盘驱动的吧),会被电脑识别成一个USB Mass Storage设备,可以读写。如果电脑所做的事情安卓平板也能做,那不就可以实现USB通信了?

USB方面的基础知识可通过阅读《USB2.0与OTG规范及开发指南》了解。

ZedBoard_Standalone_USB_Device_Tutorial_14_6_01案例程序流程图如下图所示:

在ZedBoard_Standalone_USB_Device_Tutorial_14_6_01案例中,zedboard作为usb device初始化了两个端点,端点0和1,端点0用作控制传输,端点1用作批传输。端点0或1收到package会产生事件(Event),使用回调函数处理事件。在端点0事件的处理函数中,需要处理setup包。Setup过程是USB通信建立连接的过程,setup不成功,通信就进行不下去了。标准设备(STD DEV)setup host端大概过程如下图所示:

在端点1事件的处理函数中,主要根据USBmass storage device协议处理CBW包。协议可参考:http://blog.csdn.net/leo_wonty/article/details/7418261

因为大多数设备像PC基本都安装了USB标准设备的驱动,故我们利用标准设备协议建立连接,数据传输阶段可以根据需要自定义传输协议。在此例中我们在建立连接的过程中模拟一个存储设备,但在数据传输过程中自定义了传输命令等。

1.3  制作裸机boot.bin

在Export->Export hardware过的SDK工程中新建一个新工程,这次新建的是fsbl(First Stage Boot Loader)工程,编译产生一个fsbl.elf。新建的这个fsbl工程必须关联整个系统的hw_platform。

Fsbl主要作用:PS端初始化;使用bit文件对PL进行配置;加载SSBL或者裸跑程序;跳转执行SSBL或者裸跑程序。

右键fsbl工程,Create Boot Image,生成一个BOOT.BIN文件,这里需要fsbl产生的elf文件,pl的文件.bit,helloworld.elf(裸跑程序,如果不是裸跑就是boot.elf)。

如下图,制作boot.bin添加需要的文件的顺序不能乱。先fsbl.elf,.bit,后helloworld.elf或者boot.elf。三者的Partition type依次选择bootloader,datafile, datafile。

Creat Image后将boot.bin拷至SD卡插到zedboard设置SD卡启动即可。

2.    Android平板端

Android设备通过usb控制zedboard产生pwm波实验相关推荐

  1. Android设备的USB通讯

    摘 要: AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议.该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和 ...

  2. Android设备与USB设备的连接通讯

    关于Android与USB设备的连接,所能搜索到的资料特别的少,但恰恰接到了一个这样的需求,使用android平板通过USB与一个外接设备进行通讯,这个设备是一个压力感应器,在压力发生变化时可以测到相 ...

  3. Android设备支持USB转RJ45有线网卡( 沐阳网卡JP1081B/9700)

    Android设备支持USB转RJ45有线网卡( 沐阳网卡JP1081B9700) 网卡设备: 沐阳网卡JP1081B/9700 系统平台: HISI3798MV100  Android : 4.2 ...

  4. android 网络re,Gnirehtet让Android设备通过USB连接电脑上网

    Gnirehtet让Android设备通过USB连接电脑上网 2020年08月02日 | 萬仟网移动技术 | 我要评论 目录Gnirehtet简介Gnirehtet教程Gnirehtet下载地址功能快 ...

  5. Android设备通过USB共享网络给OpenWrt路由器

    1️⃣前言 如果随身WiFi自带的热点不稳定的话,可以考虑插到有USB口的OpenWrt路由器上,减少随身WiFi的负荷,使网络更为稳定. 但有的路由器虽然有USB口,也是OpenWrt系统,连接设备 ...

  6. Android设备通过USB线连接PC进行Socket通信

    Android设备分别作为客户端和服务端与PC通讯 背景简介 核心原理 整体思路 代码讲解 1.创建广播监听类ConnectStateReceiver 2.建立Socket连接 3.Socket连接成 ...

  7. Android设备获取USB扫码枪扫描的内容与可能遇到的问题解决

    这篇文章主要给大家介绍了关于Android设备获取扫码枪扫描内容的方法,以及在开发中可能会遇到的问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们 ...

  8. android 有线网卡 驱动程序,让Android 设备通过USB 转RJ45有线网卡上网

    一.下载驱动 网卡采用USB 2.0转以太网控制芯片AX88772B, android 2.3 和4.0下的通用网卡驱动不支持这款芯片, 需要从网上下载最新的linux 下AX88772B驱动 二.将 ...

  9. android连接usb外设通讯_Android设备使用USB的硬件接口

    最近业界的发展显示,智能手机/便携系统与自动化系统或机械系统之间存在巨大的市场潜力.2011年春季谷歌引入的Android开放访问架构,开启了基于Android操作系统的设备的巨大可能--允许智能手机 ...

最新文章

  1. 30岁学python编程_朋友问我,你都30岁了学编程来得及吗
  2. VTK:Kochanek样条用法实战
  3. 服务拆分-案例Demo
  4. 查看docker容器日志
  5. 草稿selenium显示等待
  6. leetcode - 1025. 除数博弈
  7. 再谈拍照,OPPO这次拿什么和iPhone7拼?
  8. 轻量化网络MobileNet解析
  9. 2017.10.22 最多的方案 失败总结
  10. muduo网络图书馆评测
  11. hdu 1166 树状数组解
  12. Typed DataSet的批量操作优化
  13. endnote layout can not be formatted because it is no longer open
  14. Linux架设DNS服务器(ChinaITLab.com 搜集整理)
  15. 女神节快乐 | 用编程语言解密京东云程序媛!
  16. tcpdump的常用方法
  17. PLASTIGAUGE塑料间隙规的正确使用步骤你知道多少?
  18. 离开,是为了新的开始
  19. mysql - user/privileges/用户与权限/用户权限/管理用户权限
  20. pytorch embedding层详解(从原理到实战)

热门文章

  1. 织梦安装后提示Function ereg_replace() is deprecated的解决方法
  2. 一个强大的js日历控件 FullCalendar 外加一堆可以直接运行的测试代码拿走不谢
  3. linux 安装supervise服务
  4. 292Nim 游戏(智力题)
  5. 银行保险业信息科技外包信息安全风险监控
  6. 微信小程序数据缓存API整理
  7. 大数据可视化案例:360骗子地图
  8. 如何区分高频低频信号
  9. linux下.xz文件的解压方式
  10. 粤嵌GEC6818板子TCP网络编程发送命令控制音视频