Xilinx社区
首页 > Kevin专栏 > Kevin学ZedBoard之5:顺藤摸瓜
Kevin专栏
Kevin学ZedBoard之5:顺藤摸瓜
来源:  时间:2015-01-22  浏览量:1776

  当你可以修改点亮LED灯那个实验led_test.sh, 改变LED点灯的速度,以及顺序时, 一定想知道究竟发生了什么, 凭什么一个简单的脚本, 就在Linux的用户层控制板子上的某一个硬件,比如说,灯。

  对于习惯了在单片机环境下无操作系统裸奔C/汇编的兄弟来说, 上面的问题似乎有些多余. 直接对某个地址进行读写操作, 这个地址经过译码,对应的管脚,连到板子上LED,不就可以控制LED了吗。

  这就说来话长了.简言之,Linux 为了给每个进程一个独立的地址空间,特意划分了用户空间和内核空间。内核空间可以对物理地址操作,用户空间只是虚地址。 而内核与用户空间程序接口,采用特殊文件系统。也就是看上去像文件,其实连接到系统和设备的系统。比较老的有devfs文件系统位于设备驱动/dev,或者procfs位于/proc。当然,还有比较新的sysfs文件系统。

  Led_test.sh, 采用的就是sysfs文件系统。 这个文件系统的特点吧,主要是可以一层一层垒硬件的驱动,比如先总线驱动,再某个USB驱动,在USB挂载的设备的驱动。这比/dev一个设备驱动包括所有相关设备层次清晰很多。在linux内核2.6以后才有的。

  对sysfs先来点感性认识,在ZedBoard任何一个终端窗口输入

  sudo echo 61 > /sys/class/gpio/export

  sudo echo out > /sys/class/gpio/gpio61/direction

  sudo echo 1 >/sys/class/gpio/gpio61/value

  sudo echo 0 >/sys/class/gpio/gpio61/value

  你可以手工点亮或灭掉LD0那盏灯

  输入命令的时候, 到底发生了什么, 信号是怎么传递的呢 ? 先大致了解一下,具体细节在书的后续章节还会详细说明

  第一步,设备驱动控制GPIO的寄存器. 这就需要交给Linux 设备驱动来完成了。相关的介绍请参考书本在13.2节找到 .

  第二步,那么GPIO的寄存器地址是多少,有如何控制呢? 我们可以在Xilinx ug585 http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf 找到

  第三步,GPIO是如何在PL那边,也就是FPGA连接到芯片的管脚上的呢? 需要参考这个设计的硬件部分http://www.digilentinc.com/Data/Products/ZEDBOARD/ZedBoard_Linux_Design.zip

  zedboard上的linaro-ubuntu demo所使用的硬件工程。

  其中对于zedboard的system.ucf中我们可以找到如下约束.比如,LD0那盏灯,是PS侧的processing_system7_0_GPIO<7> 通过PL测,连到管脚T22上的。

  ############################

  # #

  # On-board LED's #

  # #

  ############################

  net processing_system7_0_GPIO<7> LOC = T22 | IOSTANDARD = LVCMOS33; # LD0

  net processing_system7_0_GPIO<8> LOC = T21 | IOSTANDARD = LVCMOS33; # LD1

  net processing_system7_0_GPIO<9> LOC = U22 | IOSTANDARD = LVCMOS33; # LD2

  net processing_system7_0_GPIO<10> LOC = U21 | IOSTANDARD = LVCMOS33; # LD3

  net processing_system7_0_GPIO<11> LOC = V22 | IOSTANDARD = LVCMOS33; # LD4

  net processing_system7_0_GPIO<12> LOC = W22 | IOSTANDARD = LVCMOS33; # LD5

  net processing_system7_0_GPIO<13> LOC = U19 | IOSTANDARD = LVCMOS33; # LD6

  net processing_system7_0_GPIO<14> LOC = U14 | IOSTANDARD = LVCMOS33; # LD

  第四步,T22那个管脚是如何连到真正的灯上的,需要参考ZED板的文档:

  http://zedboard.org/sites/default/files/documentations/ZedBoard_HW_UG_v1_9.pdf

  2.7.3 User LEDs

  The ZedBoard has eight user LEDs, LD0 – LD7. A logic high from the Zynq-7000 AP SoC I/O causes the LED to turn on. LED’s are sourced from 3.3V banks through 390Ω resistors.

  Signal Name Subsection Zynq pin

  LD0 PL T22

  LD1 PL T21

  LD2 PL U22

  LD3 PL U21

  LD4 PL V22

  LD5 PL W22

  LD6 PL U19

  LD7 PL U14

  LD9 PS D5 (MIO7)

  我们可以看到LD0-LD7 都是PL部分的,也就是说这些都是EMIO,从PL的管脚连出。

  那么,EMIO是如何在设计中定义了processing_system7_0_GPIO这个端口呢?需要看xps



  2.我们可以在ports tag中找到这个标签。



  3.同时system.mhs中就会自动出现这个定义



  这样,从操作系统的脚本一直到点亮LED,我们顺藤摸瓜,找到了软件侧,PS侧,可扩展IO侧,PL侧所有相关文档和信号,完成了最简单的一个穿越软件,硬件,I/O, 板卡的All Programmable 之旅。




热点文章
精选视频
推荐资源

中国授权培训机构

北京 电话:(010)82757632
      (010) 62192881
深圳 电话:(0755)86186715
武汉 电话:(027)61389792
成都 电话:(028)80821007
南京 电话:(025)66022032
西安 电话:(029)82230498
邮箱:sales@e-elements.com

中国授权经销商

香港 电话:(852)22127848
北京 电话:(010)84148118
成都 电话:(028)86528262
上海 电话:(021)33678387
深圳 电话:(0755)26584925
武汉 电话:(027)87322806
邮箱:china@avent.com
深圳 电话:(0755)26743210
上海 电话:(021)51696680
北京 电话:(010)51726678
成都 电话:(028)85139576
武汉 电话:(027)87690155
邮箱:
xilinx_enquiry@comtech.com.cn

社区主办


《电子产品世界》杂志社

内容提供


    赛灵思公司

Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备12027778号-2 北京市公安局备案:1101082052