Zynq的PS端的SPI

Zynq

  赛灵思公司(Xilinx)推出的行业第一个可扩展处理平台Zynq系列。旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。Zynq中包含FPGA资源和ARM资源,可用AXI片内总线进行互联。

PS端的SPI

  在zynq中,PS端有两个SPI控制器,每个控制器可以接3个设备,因为zynq除了ARM之外,还含有FPGA资源,因此可以利用FPGA资源将SPI控制器可控制的设备进行一个扩展,本次在使用SPI中遇到了一些问题,在此记下。

使用SPI控制DAC8811的问题描述

  设计中,做了一个程控放大器,采用的芯片是DAC8811,这个芯片是采用SPI进行通讯,它里面是一个16位的寄存器,每次通过SPI写这个16位的寄存器就可以达到调整输出的目的。但是使用zynq的SPI控制控制该设备后,因为zynq提供的SPI的裸机驱动,每次只能发送一个字节,因此控制DAC8811的寄存器更新需要发送两个字节。我使用spi连续发送两个字节后,程控放大器的放大倍数和我设置的有区别,更改写入的值出现貌似无规律的跳变,无法对该芯片进行正常的控制。

原因

  将spi输出的信号利用示波器进行观察,发现似乎并没有什么毛病,于是我将时钟信号和片选信号都进行观察,利用片选信号的上升沿捕捉信号,发现在发送了第一个字节后发第二个自字节的中间,片选信号由低电平跳变为高电平,这个时间是很短的,可以认为这是一个高频信号。而DAC8811在片选信号上升沿时将会将寄存器中的值更新到输出,这样实际上就是寄存器只接收了一个字节就更新了,本来是应该接收两个字节后更新的。

  查看zynq的spi代码,里面是有设置各个延时的函数的,但是设置了延时到最小值,还是会出现着这样的问题。

解决方案

  方案一:使用zynq的PL资源写一个高频滤波器,对片选信号进行滤波,已达到将高频跳变去除。

  方案二:高频的东西滤除更简单的是使用电容,根据容抗的计算公式:
  电容值越小,容抗越大,在这里将片选信号线对地接一个2nF的电容即可达到目的。
  为了解决这个问题,我是通过加电容实现的。因此设计时应该在片选信号和地之间预留一个接电容的空间。
根本原因
  产生这种现象的根本原因是ps端配置不对造成。

 

 

这样配置即可解决。

 

 

posted @ 2019-06-17 17:50  dlover  阅读(5075)  评论(5编辑  收藏  举报
levels of contents