如何利用现成IP不写代码实现三线制SPI?

最近使用ZYNQ做一个高速数据采集,需要访问一个ADI的高速模数采样芯片,该芯片是利用三线制实现读以及写的功能 。三线制实现写通信或许大家都经常会这样用,三线制实现读/写或许有的朋友就未曾这样用过 。今天就分享一下利用现成IP不写任何代码怎么实现三线制SPI
背景ADI很多芯片都采用三线制SPI进行控制,以AD9467为例,AD9467是一款 pipeline架构16位高速ADC芯片,采样率高达250MSPS 。在一些复杂系统中其应用领域比较广泛:
多载波,多模式蜂窝接收机
天线阵列定位
功率放大器线性化
无线宽带通信系统
雷达系统
红外成像系统
通讯仪表系统等
从芯片框图,大致可以看出,该芯片主要由以下部分组成:

如何利用现成IP不写代码实现三线制SPI?

文章插图
将PS端的DDR以及PL所需的时钟FCLK_CLK0配置好,这里输出100MHz
从ip库里拉出来axi_spi_engine_v1_0以及spi_engine_execution_v1_0,按照上面图连好线
连好AXI接口,以及相应的复位、时钟信号等
设置需要几个片选信号,可根据需要几个从芯片可以设置多个片选信号,比如我设置2个,这样在linux设备树上就对应挂载两个设备 。
然后在顶层设计文件进行例化,这里问题来了,spi_1还是4个脚,如果就这样拉出到PL端的引脚上,还是四线制,那么该怎么改呢?
看看wiki中图以及描述,发现需要还需要在转一下:

如何利用现成IP不写代码实现三线制SPI?

文章插图
看这个波形或许会有朋友问:为啥数据发送结束,SDO/SDI复用脚波形有一个上升的渐变暂态过程,这是由于此时从端芯片从输出态转为高阻态,而主端芯片此时也是高阻态,由于线路电容效应故而会有这样一个变化过程 。
总结一下利用ADI提高的IP库,不用敲一行代码可以很容易就实现了三线制SPI,香吧?该方案可以同时兼容三线制/四线制SPI,是一个成熟稳定的方案 。为什么ZYNQ芯片这样一款SOC芯片以及Linux会被人喜欢,由此可见一斑 。因为有大量成熟的轮子可供使用,而不必自己去造轮子 。从而加速产品的研发进度,使用户可以专注于自己需要解决的应用问题 。
责任编辑:haq
.dfma {position: relative;width: 1000px;margin: 0 auto;}.dfma a::after {position: absolute;left: 0;bottom: 0;width: 30px;line-height: 1.4;text-align: center;background-color: rgba(0, 0, 0, .5);color: #fff;font-size: 12px;content: "广告";}.dfma img {display: block;}
如何利用现成IP不写代码实现三线制SPI?
文章插图

    推荐阅读