如何区分/dev/input/event

cat /proc/bus/input/devices

Xilinx zynq USB开发

https://blog.csdn.net/Zhu_Zhu_2009/article/details/82954359

参考

U-Boot USB Driver
Zynq Linux USB Device Driver
U-Boot USB Driver
Zynq-7000 AP SoC USB Mass Storage Device Class Design Example Techtip
Zynq-7000 AP SoC USB CDC Device Class Design Example Techtip
Zynq Linux USB Device Driver
Linux USB Gadget Driver
USB Host System Setup
USB Host Controller Driver
AXI USB Device Driver
AXI USB gadget driver
USB boot with Linux 2015.2 build
zynq-7000学习笔记(八)——USB摄像头图像采集
ZYNQ-ZedBoard USB HOST问题初探
ZYNQ-ZedBoard USB HOST问题二探
Zynq usb无法识别
USB Phy/ULPI (2-读写USB Phy寄存器)
USB Mass Storage大容量存储的基本知识
怎么通过 /proc/scsi/usb-storage来确定u盘是/dev/sdb还是sdc
如何实现Linux下的U盘(USB Mass Storage)驱动
Zynq Linux USB Driver Customization
Linux/DRA77P: ULPI USB interface

介绍

zynq上用的是chipidea的ip,ULPI 接口要求输入保持时间为1ns,TI TUSB1210 PHY 的最低 CTO 并未规定,但报告的最低 CTO 为 100 ps,无法满足 Zynq-7000 的要求(AR# 53450)。
When the USB controller is configured in device mode, and Vbus voltage is varied such that it crosses the Vbus valid threshold multiple times, the ULPI interface becomes unresponsive.(AR# 61313)

u-boot

u-boot下操作usb,

zynq-uboot> usb
usb - USB sub-system

Usage:
usb start - start (scan) USB controller
usb reset - reset (rescan) USB controller
usb stop [f] - stop USB [f]=force stop
usb tree - show USB device tree
usb info [dev] - show available USB devices
usb test [dev] [port] [mode] - set USB 2.0 test mode
(specify port 0 to indicate the device’s upstream port)
Available modes: J, K, S[E0_NAK], P[acket], F[orce_Enable]
usb storage - show details of USB storage devices
usb dev [dev] - show or set current USB storage device
usb part [dev] - print partition table of one or all USB storage devices
usb read addr blk# cnt - read </span>cnt' blocks starting at block <span class="token variable">blk#’
to memory address </span>addr' usb <span class="token function">write</span> addr blk# cnt - <span class="token function">write</span> <span class="token variable">cnt’ blocks starting at block </span>blk#' from memory address <span class="token variable">addr’
zynq-uboot> usb start
starting USB….
USB0: USB EHCI 1.00
scanning bus 0 for devices…. 3 USB Device(s) found
USB1: usb1 wrong num MIO: 0, Index 1
lowlevel init failed
scanning usb for storage devices…. 1 Storage Device(s) found
zynq-uboot> usb tree
USB device tree:
1 Hub (480 Mb/s, 0mA)
| u-boot EHCI Host Controller
|
±2 Hub (480 Mb/s, 2mA)
|
±3 Mass Storage (480 Mb/s, 300mA)
Kingston DataTraveler 2.0 001A4D5F1A5CB0419945C2A1

zynq-uboot> usb info
1: Hub, USB Revision 2.0

  • u-boot EHCI Host Controller
  • Class: Hub
  • PacketSize: 64 Configurations: 1
  • Vendor: 0x0000 Product 0x0000 Version 1.0
    Configuration: 1

    • Interfaces: 1 Self Powered 0mA
      Interface: 0

      • Alternate Setting 0, Endpoints: 1
      • Class Hub
      • Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms

2: Hub, USB Revision 2.0

  • Class: Hub
  • PacketSize: 64 Configurations: 1
  • Vendor: 0x0424 Product 0x2514 Version 11.179
    Configuration: 1

    • Interfaces: 1 Self Powered Remote Wakeup 2mA
      Interface: 0

      • Alternate Setting 0, Endpoints: 1
      • Class Hub
      • Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms
      • Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms

3: Mass Storage, USB Revision 2.0

  • Kingston DataTraveler 2.0 001A4D5F1A5CB0419945C2A1
  • Class: (from Interface) Mass Storage
  • PacketSize: 64 Configurations: 1
  • Vendor: 0x0930 Product 0x6545 Version 1.16
    Configuration: 1

    • Interfaces: 1 Bus Powered 300mA
      Interface: 0

      • Alternate Setting 0, Endpoints: 2
      • Class Mass Storage, Transp. SCSI, Bulk only
      • Endpoint 1 In Bulk MaxPacket 512
      • Endpoint 2 Out Bulk MaxPacket 512
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

linux

petalinux 2018.2下的内核与设备树,

Device Drivers
USB support<*> Support for Host-side USB<*> EHCI HCD (USB 2.0) support<*> USB Mass Storage support<*> ChipIdea Highspeed Dual Role Controller<*> ChipIdea host controllerUSB Physical Layer drivers ---><*> Generic ULPI Transceiver Driver

usb_0: usb@e0002000 {
compatible = “xlnx,zynq-usb-2.20.a”, “chipidea,usb2”;
clocks = <&clkc 28>
dr_mode = “host”;
interrupt-parent = <&intc>;
interrupts = <0 21 4>;
reg = <0xe0002000 0x1000>;
usb-phy = <&usb_phy0>;
};

usb_phy0: phy0 { //Z:\program\fdk\bsp\zynqmp\linux-xlnx-v2018.2\drivers\usb\phy\phy-ulpi.c
compatible = “ulpi-phy”;
#phy-cells = <0>;
reg = <0xe0002000 0x1000>;
view-port = <0x170>;
drv-vbus;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

petalinux 2015.2.1也是"xlnx,zynq-usb-2.20.a",参考drivers\usb\chipidea\ci_hdrc_usb2.c,petalinux 2015.2.1下的设备树,

&usb0 {compatible = "xlnx,zynq-usb-2.20.a";dr_mode = "host";phy_type = "ulpi";status = "okay";
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

对内核打补丁,

static int ci_hdrc_create_ulpi_phy(struct device *dev, struct ci_hdrc *ci)
{struct usb_phy *ulpi;int reset_gpio;int ret;
    reset_gpio <span class="token operator">=</span> <span class="token function">of_get_named_gpio</span><span class="token punctuation">(</span>dev<span class="token operator">-&gt;</span>parent<span class="token operator">-&gt;</span>of_node<span class="token punctuation">,</span> <span class="token string">"xlnx,phy-reset-gpio"</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">gpio_is_valid</span><span class="token punctuation">(</span>reset_gpio<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>ret <span class="token operator">=</span> <span class="token function">devm_gpio_request_one</span><span class="token punctuation">(</span>dev<span class="token punctuation">,</span> reset_gpio<span class="token punctuation">,</span> GPIOF_INIT_LOW<span class="token punctuation">,</span> <span class="token string">"ulpi resetb"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">if</span> <span class="token punctuation">(</span>ret<span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token function">dev_err</span><span class="token punctuation">(</span>dev<span class="token punctuation">,</span> <span class="token string">"Failed to request ULPI reset gpio: %d\n"</span><span class="token punctuation">,</span> ret<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> ret<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token function">msleep</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">gpio_set_value_cansleep</span><span class="token punctuation">(</span>reset_gpio<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">msleep</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span>ulpi <span class="token operator">=</span> <span class="token function">otg_ulpi_create</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>ulpi_viewport_access_ops<span class="token punctuation">,</span>ULPI_OTG_DRVVBUS <span class="token operator">|</span> ULPI_OTG_DRVVBUS_EXT<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">if</span> <span class="token punctuation">(</span>ulpi<span class="token punctuation">)</span> <span class="token punctuation">{</span>ulpi<span class="token operator">-&gt;</span>io_priv <span class="token operator">=</span> ci<span class="token operator">-&gt;</span>hw_bank<span class="token punctuation">.</span>abs <span class="token operator">+</span> <span class="token number">0x170</span><span class="token punctuation">;</span>ci<span class="token operator">-&gt;</span>usb_phy <span class="token operator">=</span> ulpi<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

开机打印,

ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
usbcore: registered new interface driver usb-storage
e0002000.usb supply vbus not found, using dummy regulator
ULPI transceiver vendor/product ID 0x0451/0x1507
Found TI TUSB1210 ULPI transceiver.
ULPI integrity check: passed.
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
...
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 4 ports detected
INIT: version 2.88 booting
usb 1-1.3: new high-speed USB device number 3 using ci_hdrc
mount: mounting devtmpfs on /dev failed: Device or resource busy
usb-storage 1-1.3:1.0: USB Mass Storage device detected
scsi host0: usb-storage 1-1.3:1.0
...
login[887]: root login on 'ttyPS0'
scsi 0:0:0:0: Direct-Access     Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 6
sd 0:0:0:0: Attached scsi generic sg0 type 0
sd 0:0:0:0: [sda] 30240768 512-byte logical blocks: (15.4 GB/14.4 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUAsda: sda1
sd 0:0:0:0: [sda] Attached SCSI removable disk
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

TUSB1210 OTG_CTRL寄存器,可控制CPEN管脚,配合硬件完成,OTG电源切换,USB3320也是一样,

zc706 usb原理图,

读写ULPI PHY寄存器

zynq的usb0基地址在0xE0002000,usb1在0xE0003000,通过ULPI Viewport来访问寄存器,zynq芯片不能使用ULPI Viewport读写ULPI PHY的扩展寄存器集(地址 0x40 及更高)。写入操作将地址本身写为数据,读取操作返回不正确的数据。

Viewport寄存器,低8位是写入的寄存器地址,

唤醒,

memtool mw 0xE0002170 0xa0000000
  • 1

读TUSB1210 ID,

root@zynq:~# memtool mw 0xE0002170 0x40000000
root@zynq:~# memtool md 0xE0002170+4
e0002170: 08005100                                           .Q..
root@zynq:~# memtool mw 0xE0002170 0x40010000
root@zynq:~# memtool md 0xE0002170+4
e0002170: 08010400                                           ....
root@zynq:~# memtool mw 0xE0002170 0x40020000
root@zynq:~# memtool md 0xE0002170+4
e0002170: 08020700                                           ....
root@zynq:~# memtool mw 0xE0002170 0x40030000
root@zynq:~# memtool md 0xE0002170+4
e0002170: 08031500

写OTG_CTRL寄存器,

memtool mw 0xE0002170 0x400a0000
memtool md 0xE0002170+4
                                </div>
												

Xilinx zynq USB开发相关推荐

  1. Xilinx zynq的资料获取总结

    Xilinx zynq zc702开发: 一.zynq开发整个生态系统搭建: 1.基础资料获取: https://github.com/Xilinx/           (包括:交叉编译工具,lin ...

  2. Xilinx Zynq开发教程

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 Xilinx Zynq介绍 芯 ...

  3. Xilinx ZYNQ开发板资料共享

    ZYNQ 7010 [ZYNQ]特权老师Xilinx ZYNQ资料 [ZYNQ]黑金AX7010 ZYNQ 7015 [ZYNQ]黑金Xilinx ZYNQ资料(7015) ZYNQ 7020 [ZY ...

  4. ZYNQ LINUX开发笔记——windows下用xilinx SDK编译zynq linux app小程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ LINUX开发笔记--windows下用xilinx SDK编译zynq linux app小程序 前言 操作方法 总结 前 ...

  5. 基于xilinx Zynq UltraScale MPSoC平台的核心板及开发板介绍-米尔科技

    近日,米尔科技推出国内首款基于xilinx Zynq UltraScale+MPSoC 平台的核心板及开发板.其优势主要有:采用16纳米制程,相比Znyq7000系列每瓦性能提升5倍,且单芯片融合4核 ...

  6. Xilinx Zynq FPGA Boards板

    Xilinx Zynq FPGA Boards板 Xilinx Zynq FPGA Boards 介绍 Styx是一个易于使用的Zynq开发模块,具有Xilinx的Zynq ZC7020 SoC和FT ...

  7. 荐读:Xilinx ZYNQ 动手实操演练

    今天给大侠带来Xilinx ZYNQ 动手实操演练,话不多说,上货.当我们一提到 Xilinx ZYNQ,大家脑海大多数就会浮现一个描述的词汇,高端,其实这个词很贴切的形容了Zynq系列产品,Xili ...

  8. Xilinx ZYNQ MPSOC 多核高性能计算平台

    Xilinx ZYNQ MPSOC 多核高性能计算平台 转自:微信公众号 FPGA渠道及方案一站式服务商 本平台搭载16nm工艺的ZYNQ UltraScale XCZU15EG-2FFVB1156 ...

  9. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

最新文章

  1. python 命令行参数-Python3之命令行参数处理
  2. 2019“编程的夏天”完美收官!这些00后点燃了这个盛夏
  3. ES6函数第一篇:参数篇
  4. git 怎么跟踪空目录
  5. Ubuntu 18.04换国内源
  6. 年轻人应该做的和不该做的
  7. 2017-03-10Git撤销修改
  8. 嵌入式成长轨迹1 【嵌入式环境及基础】【嵌入式Linux软件开发入门】【linux基础命令】...
  9. 恋爱APP软件开发基本功能
  10. php 时间转换时间戳_PHP日期格式转时间戳
  11. SqlDataReader的用法(重点:访问字段的值)
  12. Matlab GUI设计——文件读取和保存uigetfile,uiputfile
  13. java web实现第三方在线支付
  14. ps aux指令詳解 http://blog.csdn.net/hanner_cheung/article/details/6081440
  15. python爬虫 京东关键词搜索商品及具体参数和评论
  16. 计算机李宁,李宁的个人主页-西北工业大学教师个人主页
  17. 2017新媒体运营升职加薪指南:从内容到数据,如何走好新媒体的进阶之路?
  18. 张朝阳:饮下这杯烈酒 待吾再战江湖
  19. #容斥,组合计数#洛谷 3214 卡农
  20. css设置height无效,CSS中设置height:100%无效的解决方案

热门文章

  1. 汇编语言DEBUG命令详解||汇编命令||DEBUG的常用命令:A,U,R,T,D,E,Q 等等
  2. FC SAN交换机许可申请--Brocade光纤交换机端口许可申请
  3. 【100个 Unity实用技能】| Unity将本地图片文件显示到Image组件中 通用方法整理
  4. 使用Icon图标的几种方式
  5. 【PTA题目解答】7-7 调查电视节目受欢迎程度
  6. MySQL报错“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
  7. django jinjia
  8. JavaScript网页编程_API和WebAPI
  9. 三、 mysqlbinlog使用简介
  10. Cuda与cudnn对应关系