版主: 51FPGA |
xilinx论坛
最后登陆时间:2015-03-19 10:58:07 |
当你可以修改点亮LED灯那个实验led_test.sh, 改变LED点灯的速度,以及顺序时, 一定想知道究竟发生了什么, 凭什么一个简单的脚本, 就在Linux的用户层控制板子上的某一个硬件,比如说,灯。
Led_test.sh, 采用的就是sysfs文件系统。 这个文件系统的特点吧,主要是可以一层一层垒硬件的驱动,比如先总线驱动,再某个USB驱动,在USB挂载的设备的驱动。这比/dev一个设备驱动包括所有相关设备层次清晰很多。在linux内核2.6以后才有的。
对sysfs先来点感性认识,在ZED任何一个终端窗口输入
sudo echo 61 > /sys/class/gpio/export
你可以手工点亮或灭掉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上的。
############################
第四步,T22那个管脚是如何连到真正的灯上的,需要参考ZED板的文档:
2.7.3 User LEDs
我们可以看到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 之旅。 |
共1条 1/1 1 |