无驱动问题的Zynq搭配Pmod开发解决方案

FPGA/ASIC技术

206人已加入

描述

之前我们提到过「P,这一搭配FPGA开发板进行快速原型系统开发的利器。事实上,除了Pmod标准定义接口的专利方 —— Digilent公司所提供的近百种功能丰富的原厂Pmod传感模块之外(一般都配有免费的ip驱动供开发者直接调用),市场上存在着很多来自不同供应商所提供的可用Pmod模块。

然鹅,很多来自于不知名小厂的Pmod(以***、深圳的山寨厂商居多),往往并不提供模块驱动,需要用户自己去写驱动填坑。如果你不幸中招,聊表安慰之余,今天就传授你一招填坑秘籍,教你在没有可用驱动情况下的应对之策。

 

先说重点:如果没有可用的驱动,可以使用Zynq SoC PL端(可编程逻辑)的Pmod桥模块,它让我们能够在选用的开发板与Pmod端口之间建立正确的映射,然后开发我们自己的Zynq PS(处理系统)驱动。假如你仔细研究正规厂商所提供的Pmod驱动,你会发现这些驱动其实也是使用Pmod桥加上一个AXI I2C或者SPI组件所实现的。

Zynq

图:Digilent PmodAD2:12位四通道模拟数字转换器的驱动组件

此文中,我们就将以Digilent(迪芝伦)PmodDA4:8通道DAC模块,以及PmodAD2:4通道ADC模块为例,我们将这两个模块整合在一起,借助Pmod桥模块自行开发驱动,用PmodDA4生成模拟信号,并用PmodAD2来接收信号。

 

图:用Digilent Analog Discovery口袋仪器对PmodDA4测试

Pmod桥模块允许我们定义开发板板载Pmod接口上下两排的输入类型,可以选择定义为GPIO、UART、I2C或者SPI协议接口。我们为所需驱动的板载Pmod接口上下层都进行相应的选择配置,使得Pmod传感器的管脚输出(pinout)与对应的板载接口标准一致。

对于PmodDA4,我们只需要在板载Pmod接口上层使用SPI协议。这样选择后,我们需要提供实际的SPI通信通道。由于我们使用的是Zynq SoC开发板(Digilent Arty Z7),所以这里我们有两个选择。第一个方法是在PL端使用AXI SPI IP模块与Pmod桥模块建立连接。第二个方法(也是这里我们将采用的)是使用EMIO建立Zynq PS SPI与Pmod桥中间的连接。这一方法将让我们能够在PS SPI端口与Pmod桥模块输入管脚之间建立直连。

为了实现这一点我们需要阅读官方的Pmod接口标准文档来确保SPI管脚与Pmod桥输入管脚之间正确的映射(例如哪个PS SPI信号连接到IN_0)。Pmod 桥模块的管脚代表不同的接口类型,它们的命名也是通用的。下面的框图展示了这里我们是如何实现PmodDA4管脚的映射。在这个示例中我们完成管脚映射后就可以构建工程,导出到SDK,编写软件程序驱动DA4。

Zynq

我们可以使用SDK中由BSP创建的SPI驱动来驱动PmodDA4。为了实现与PmodDA4的交互,第一件事我们要做的就是初始化SPI控制器。我们设置好SPI时钟相位和主操作选项后就可以定义缓冲区,并使用轮询传输模式将所需的信息传递给PmodDA4。更复杂的驱动则将使用中断驱动方式而非轮询的方式。

Zynq

下面,我们对创建好的PmodDA4驱动文件进行测试。我们驱动一个简单的谐波输出,并使用Digilent Analog Discovery口袋仪器的示波器功能来监测DAC输出。接收到的信号如下:

Zynq

完成了所有设置PmodDA4以预期的方式正常工作,然后我们将PmodDA4与PmodAD2连接在一起,这样Zynq SoC才能够接收信号:

Zynq

测试时我们要非常仔细,以确保PmodDA4输出的信号在PmodAD2的工作范围内,全部完成后则会显示PmodDA4能够在硬件上正常工作。

到这里,相信大家已经了解了在没有可用驱动的情况下如何自行创建Pmod驱动。当然,填坑往往是不得已而为之,人生苦短,芳华有限,尽量少碰不提供驱动的山寨小厂Pmod才是王道。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分