基于Smart Zynq与Lemon Zynq 的Petalinux开发 章节九 USB HOST实验

本文介绍在Petalinux 下调用我们的USB 资源实现USB HOST的功能,并最终实现U盘的识别和读取

  • 此章节内容适用于下列主板
    • Lemon ZYNQ (CLG400封装的7020)
    • Smart ZYNQ SP / SP2 (CLG484封装的7020)
    • Smart ZYNQ 标准版(停产) (CLG400封装7010/7020 )
  • 本文在 vivado2018.3 以及 Petalinux2018.3 版本上进行演示

关于USB 部分,设备树和内核驱动部分xilinx 官方在wiki上也有资料 详细可以看下面链接http://www.wiki.xilinx.com/Zynq+Linux+USB+Device+Driver

一、VIVADO工程部分 (之前章节制作的镜像已经带USB的部分,这里只做介绍)

我们之前制作的镜像中已经包含了USB部分的内容了,所以本次实验不需要重新制作VIVADO工程以及Petalinux 系统的重新编译操作

这里我们也可以简单回顾下:

1)在Block Design的ZYNQ设置页面里使能USB 0资源

因为我们的USB Phy的复位部分是接在MIO46管脚上的,所以这里还需要使能ZYNQ的MIO功能,并且在下方的USB 0 RESET选项里勾选 MIO46 复位方式选择低电平复位。 (因为我们没有用到I2C功能,所以I2C复位的选项去除)

这里要注意,USB 资源挂载在BANK501上,Lemon Zynq 和Smart Zynq 的BANK501是不同的,所以这里设置不同(会影响SD,USB,和网络功能):

  • Lemon ZYNQ 的主板 (BANK501电压是1.8V),这里电压成1.8V
  • Smart ZYNQ 的主板 (BANK501电压是1.8V),这里电压成3.3V
  • 下图以Smart ZYNQ为例

上面是和USB相关部分的添加重点, 当然要想让PETALINUX 正常跑起来,我们还是需要按工程一那样,将DDR型号,DDR位宽,UART,SD等资源添加起来的。

二、PETALINUX的编译和烧录(之前章节制作的镜像已经带USB的部分,这里只做回顾)

如果要回顾内容可以参考下面部分:

编译过程中与USB相关的部分如下:

1) 在Kernel中增加 USB驱动部分

(我们和WIKI网站上的内容作对比,Kernel的配置页默认已经包含了USB HOST的所有必须的内容,所以不需要额外再单独配置了)(如果需要修改Kernel配置页,在命令行中输入下列指令 petalinux-config -c kernel)

根据刚才wiki 网站上的介绍,如果需要配置成USB HOST模式则需要 将kernel按照下图这样设置

2) 设备树的修改

为了让USB功能正常使用,我们需要在设备树上增加USB的相关内容,路径在 我们创建的工程PetalinuxSystem路径下的 /project-spec/meta-user/recipes-bsp/device-tree/files 内的 system-user.dtsi文件。

双击打开这个文件,并按下图所示,在原先的代码后面增加如下内容,之后再保存与退出

/include/ "system-conf.dtsi"
/ {
};

/{
usb_phy0: usb_phy@0 {
compatible = "ulpi-phy";
#phy-cells = <0>;
reg = <0xe0002000 0x1000>;
view-port = <0x0170>;
drv-vbus;
};
};
&usb0 {
dr_mode = "host";
usb-phy = <&usb_phy0>;
};

上述内容中包含了USB 的设备树内容。之后保存并关闭即可。

备注:网上部分教程在设备树里需要手动添加网络部分的设备树,但是经过实际调试,2018.3的petalinux不需要自己手动创建网络的设备树,系统会自动帮我们在设备树里添加网络,而不需要手动添加(在没有编译前看不到设备树,整个工程编译后系统会自动在 /components/plnx_workspace/device-tree/device-tree下的pcw.dtsi文件和和zynq-7000.dtsi文件中自动添加上网络部分的中为我们添加网络部分的设备树内容)。

三、启动主板并进入PETALINUX系统

将板子的启动方式调整成SD启动,如下图所示(图片以Smart ZYNQ为例)

接下来可以对主板进行上电(已经上电的就按下电脑的POR复位键)。 上电之后板子上的POWER灯以及DONE灯将会亮起,如果我们的UART和电脑连接了,此时用putty等专业软件查看串口信息(波特率115200),可以看到系统已经启动,串口正在发送启动的日志信息。(当然这里也可以用 SSH方式通过网络进行连接)

当系统出现root@localhost:~# 就代表系统已经成功启动了,系统此时停留在等待输入账号密码的状态

此时输入用户名 root 密码 root,之后就正式登录 petalinux 了

之后就正式登录 petalinux 了

四、USB功能验证

此时在USB 接口插入 我们提前准备好的 U盘(必须是fat32格式)并且 这个U盘在电脑上创建了 两个文本文档 分别命名为a和b(无内容,仅最后访问验证用)

接入U盘后 会看到命令行有下列信息 ,有些U盘会提示some date may be corrupt 这个代表接入的U盘 需要错误检查 这个是正常的

输入 fdisk -l 可以查看U盘的信息

 fdisk -l 

也可以通过输入 df -h 查看U盘/dev/sda1 挂载的目录为/run/media/sda1

df -h

按照上面的图上U盘的位置,输入 cd /run/media/sda1 进入U盘 或者cd /dev/sda1 也可以 是一样

cd  /run/media/sda1

然后输入ls检索文件夹下的信息

ls

可以看到 文件夹下有 a.txt 和 b.txt两个文件 跟我们之前复制到U盘的文件一致

简单介绍挂载的操作

1)在mnt文件夹下创建一个USB 目录

mkdir -p /mnt/USB

2)将/dev/sda1 也就是U盘 挂载到 /mnt/USB 文件夹下

mount /dev/sda1 /mnt/USB

3)用ls检索我们挂载的目录 ,可以看到 目录下 存在a.txt和b.txt 证明挂载成功了

ls /mnt/USB

4) 解挂载 用umount指令解除之前的挂载

umount /mnt/USB 

之后再用ls命令 已经看不到U盘下的文件了 ,说明解除挂载成功

以上是本次用U盘来验证我们的USB 功能,实际上USB HOST 还可以接鼠标和键盘之类的外设,大家可以自行摸索

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注