Linux驱动PCIE转USB 3.0调试经验
PCIE转USB 3.0芯片
μPD720202K8-701-BAA-A芯片,一个PCIE口转2个USB 3.0,主要用于USB口的扩展;
硬件电路
电路图
电路设计注意事项
RXD需要改为0欧电阻,不要ESD器件,OCI1B需要拉高;
驱动代码
request_firmware内核配置,固件需要拷贝到文件系统的/lib/firmware/;
Device Drivers --->Generic Driver Options ---> [*] Select only drivers that don't need compile-time external firmware [*] Prevent firmware from being built {*} Userspace firmware loading support [*] Include in-kernel firmware blobs in kernel binary () External firmware blobs to build into the kernel binary [*] Fallback user-helper invocation for firmware loading
三个驱动模块:insmod xhci-hcd.ko,xhci-plat-hcd.ko ,xhci-pci.ko;
驱动移植:需要移植xhci-fwdload.c驱动文件;
leds {compatible = "gpio-leds";pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpio_led>;pcie_pwon {label = "PCIE_PWON";gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;default-state = "off";};};&iomuxc {pinctrl-names = "default";pinctrl_pcie0: pcie0grp {fsl,pins = <MX8MM_IOMUXC_SD2_DATA1_GPIO2_IO16 0xc1MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12 0x61MX8MM_IOMUXC_SD2_RESET_B_GPIO2_IO19 0x41>;};&pcie0{pinctrl-names = "default";pinctrl-0 = <&pinctrl_pcie0>;reset-gpio = <&gpio2 19 GPIO_ACTIVE_LOW>;clkreq-gpio = <&gpio2 12 GPIO_ACTIVE_LOW>;power-on-gpio = <&gpio2 16 GPIO_ACTIVE_LOW>;ext_osc = <0>;status = "okay";
};
启动打印
关键打印信息
[ 2.317283] imx6q-pcie 33800000.pcie: 33800000.pcie supply epdev_on not found, using dummy regulator
[ 2.326803] OF: PCI: host bridge /pcie@0x33800000 ranges:
[ 2.332227] OF: PCI: No bus range found for /pcie@0x33800000, using [bus 00-ff]
[ 2.339720] OF: PCI: IO 0x1ff80000..0x1ff8ffff -> 0x00000000
[ 2.345651] OF: PCI: MEM 0x18000000..0x1fefffff -> 0x18000000
[ 2.352028] imx6q-pcie 33800000.pcie: Initialize PHY with EXT REfCLK!.
[ 2.358871] imx6q-pcie 33800000.pcie: PHY Initialization End!.
[ 2.365030] imx6q-pcie 33800000.pcie: pcie phy pll is locked.
[ 2.423573] imx6q-pcie 33800000.pcie: Link up, Gen2
[ 2.429246] imx6q-pcie 33800000.pcie: PCI host bridge to bus 0000:00
[ 2.435627] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 2.441124] pci_bus 0000:00: root bus resource [io 0x0000-0xffff]
[ 2.447311] pci_bus 0000:00: root bus resource [mem 0x18000000-0x1fefffff]
[ 2.466200] pci 0000:00:00.0: BAR 0: assigned [mem 0x18000000-0x180fffff 64bit]
[ 2.473532] pci 0000:00:00.0: BAR 14: assigned [mem 0x18100000-0x181fffff]
[ 2.480425] pci 0000:00:00.0: BAR 6: assigned [mem 0x18200000-0x1820ffff pref]
[ 2.487668] pci 0000:01:00.0: BAR 0: assigned [mem 0x18100000-0x18101fff 64bit]
[ 2.495033] pci 0000:00:00.0: PCI bridge to [bus 01-ff]
[ 2.500274] pci 0000:00:00.0: bridge window [mem 0x18100000-0x181fffff]
[ 2.507499] pcieport 0000:00:00.0: Signaling PME with IRQ 230
[ 2.513361] pcieport 0000:00:00.0: AER enabled with IRQ 230
[ 2.519025] pci 0000:01:00.0: enabling device (0000 -> 0002)
[ 2.525182] xhci_hcd 0000:01:00.0: xHCI Host Controller
[ 2.530435] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 3
usb信息
[ 169.878429] xhci_hcd 0000:01:00.0: xHCI Host Controller
[ 169.883949] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 3
[ 170.006893] Can't support > 32 bit dma.
[ 170.050672] xhci_hcd 0000:01:00.0: hcc params 0x014051cf hci version 0x100 quirks 0x0000000000000090
[ 170.067938] hub 3-0:1.0: USB hub found
[ 170.072939] hub 3-0:1.0: 2 ports detected
[ 170.079747] xhci_hcd 0000:01:00.0: xHCI Host Controller
[ 170.085315] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 4
[ 170.092922] xhci_hcd 0000:01:00.0: Host supports USB 3.0 SuperSpeed
[ 170.099627] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[ 170.110073] hub 4-0:1.0: USB hub found
[ 170.114140] hub 4-0:1.0: 2 ports detected
插入3.0 U盘打印信息
[ 142.761704] usb 4-1: new SuperSpeed USB device number 2 using xhci_hcd
[ 142.821223] usb-storage 4-1:1.0: USB Mass Storage device detected
[ 142.840700] scsi host0: usb-storage 4-1:1.0
[ 143.877959] scsi 0:0:0:0: Direct-Access Generic STORAGE DEVICE 1532 PQ: 0 ANSI: 6
[ 144.216203] sd 0:0:0:0: [sda] 249737216 512-byte logical blocks: (128 GB/119 GiB)
[ 144.225368] sd 0:0:0:0: [sda] Write Protect is off
[ 144.231410] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 144.256347] sda: sda1
[ 144.266457] sd 0:0:0:0: [sda] Attached SCSI removable disk
问题调试
USB2.0能识别,USB3.0提示bad cable问题
[ 112.208013] usb usb1-port2: Cannot enable. Maybe the USB cable is bad?
[ 113.180033] usb usb1-port2: Cannot enable. Maybe the USB cable is bad?
[ 113.186621] usb usb1-port2: attempt power cycle
[ 114.472025] usb usb1-port2: Cannot enable. Maybe the USB cable is bad?
[ 115.444016] usb usb1-port2: Cannot enable. Maybe the USB cable is bad?
[ 115.450602] usb usb1-port2: unable to enumerate USB device
去掉ESD器件解决上面问题;
去掉flash后固件存放位置和启动失败问题
[ 1.946229] pci 0000:00:00.0: bridge window [mem 0x18100000-0x181fffff]
[ 1.956527] pcieport 0000:00:00.0: Signaling PME with IRQ 230
[ 1.962369] pcieport 0000:00:00.0: AER enabled with IRQ 230
[ 1.968016] pci 0000:01:00.0: enabling device (0000 -> 0002)
[ 1.974075] xhci_hcd 0000:01:00.0: xHCI Host Controller
[ 1.979322] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 3
[ 1.986769] pci_bus 0000:01: Falling back to user helper
[ 62.538056] pci_bus 0000:01: Falling back to user helper
驱动做成KO模式加载,固件存放对应目录位置解决上面问题;
另外一个USB口不能使用问题,OCI1B需要拉高;
Linux驱动PCIE转USB 3.0调试经验相关推荐
- 10 怎么写USB驱动,Cadence USB 2.0 Controller和PHY IP驱动移植
怎么写USB驱动,Cadence USB 2.0 Controller和PHY IP驱动移植 作者 将狼才鲸 日期 2022-03-26 本子文档所属的上级文档(Gitee仓库): 才鲸 / 嵌入式知 ...
- linux驱动PCIE开发
Linux内核用主设备号来定位对应的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备: 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 ...
- linux驱动 pcie 框架_Linux PCI 设备驱动基本框架(二)
针对相应设备定义描述该PCI设备的数据结构: structdevice_private {/*注册字符驱动和发现PCI设备的时候使用*/ struct pci_dev *my_pdev;// stru ...
- ez-usb fx3 linux,Mouser带来最新USB 3.0技术:赛普拉斯EZ-USB FX3和恩智浦USB 3.0超高速转接驱动器...
2012年7月2日– 半导体与电子元器件业顶尖设计工程资源与全球分销商Mouser Electronics宣布对赛普拉斯半导体的EZ-USB® FX3超高速USB控制器和恩智浦半导体的USB 3.0转 ...
- 从零开始之驱动发开、linux驱动(六十七、内核调试篇--printk使用)
printk的使用我们在内核,驱动调试的时候使用的非常多 比如前面在调试usb驱动的时候 #include <linux/init.h> #include <linux/usb/in ...
- Linux驱动开发之USB驱动深入学习(三)——USB2.0ECHI驱动注册
一.前言 本篇博客仅对ECHI主机控制器驱动的注册部分进行简要叙述,后面再对一些重要的接口进行分析讲解. 二.USB 1.概述 USB(Universal Serial Bus)即"通用外部 ...
- gpio驱动广播Android,[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示. Recovery中升级完成后控 ...
- fast无线网卡linux驱动,fast FW150US USB无线网卡Linux驱动安装
由于笔记本没有自带无线网卡,所以买了一块fast FW150US USB无线网卡.该网卡只自带了window下的驱动,经过一番折腾,终于安装好了Linux下的驱动,在此记录以便以后遇到同样问题能够快速 ...
- linux驱动编写(usb host驱动入门)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] usb协议是一个复杂的协议,目前涉及到的版本就有usb1.0, usb2.0, usb3.0.大 ...
最新文章
- VI连接esx主机时报错“client.xml”错误
- “365算法每日学计划”:05打卡-图解冒泡排序(多解法)
- del rd命令行下删除文件不需要确认
- android对话框字体大小,Android Dialog 设置字体大小的具体方法
- html ace编辑器,Tiny-editor
- 深入掌握JMS(七):DeliveryMode例子
- cxgrid中纵横单元格合并_逆向查询合并单元格中的数据,这两种方法你值得拥有...
- STM32工作笔记0070---图片显示实验
- 通用Shell脚本,可以优雅的启动/关闭/重启/JAVA服务
- 基于BERT进行商品标题实体识别,很详细~
- 网页精美动效/动画制作 按钮鼠标悬浮动效基础 01《炫彩网页 iVX 无代码动效/动画制作》
- java 分词获取词性_Ansj中文分词Java开发词性分类
- Websphere应用部署发布
- day11_rabbitmq和redis
- itk读取.img格式的医学图像
- python中的ascii码是啥_python ascii码到u
- Vue3 _ 11. Vue 生命周期 生命周期狗子
- Java虚拟机学习笔记(一)--运行时数据区域
- 加密网络空间安全厂商“观成科技”获数千万A轮融资,方广资本领投
- 强烈推荐免费在线图片转文字的工具