ADI芯片的通用SPI接口设计
前言:
鉴于一般ADI的AD、DA、时钟类的芯片应用的比较广泛,正好手上的一块板子上有三片ADI的芯片,都是SPI的接口。就想到设计一个比较通用的SPI Master,希望可以做到基本通用。
一、SPI的接口时序如下(摘自AD9517-3 datasheet)
1、 前16bit为Instruction Header,就是控制读/写、地址、长度(读/写)的。
2、后面跟的是读/写的数据。
说明:sdio是双向的,一般默认的就是双向的,所以sdo引脚可以不用。
二、设计SPI时序
SPI的时序很简单,就是一个时钟对应一个数据。通常SCLK的最高频率不超过25MHz。
对于低速的时序,我们可以在2倍或者4倍的系统下来控制输出的时序。如下图,clk是50MHz,输出的SCLK是25Mhz。这是一种时序控制的思想。
上图中,我们用到了一个计数器cnt,然后按照cnt的值来控制SCLK和高和低,以及SDIO上的数据。
部分verilog代码如下:
Case(cnt)
0: begin sclk <= 1; csb <= 0; cnt <= cnt + 1'b1; end(将csb信号拉低,对应图中cnt=1)
1: begin sclk <= 0; sdio <= instr_header[15]; cnt <= cnt + 1'b1; end(低电平送数据,保持一个周期,对应图中cnt=2,3)
2: begin sclk <= 1; sdio <= instr_header[15]; cnt <= cnt + 1'b1; end
3: begin sclk <= 0; sdio <= instr_header[14]; cnt <= cnt + 1'b1; end
4: begin sclk <= 1; sdio <= instr_header[14]; cnt <= cnt + 1'b1; end
5: begin sclk <= 0; sdio <= instr_header[13]; cnt <= cnt + 1'b1; end
6: begin sclk <= 1; sdio <= instr_header[13]; cnt <= cnt + 1'b1; end
7: begin sclk <= 0; sdio <= instr_header[12]; cnt <= cnt + 1'b1; end
8: begin sclk <= 1; sdio <= instr_header[12]; cnt <= cnt + 1'b1; end
……..
这样,一个完整的SPI总线“写操作”时序设计出来应该是这样子:
注:图中是8位的地址+8位的数据,所以SCLK共16个周期。如果是16位地址,应该共24个周期。
三、双向IO的控制
由于默认SDIO是双向的,所以这里再提一下双向IO的控制。
一般双向IO是这样定义的,先在模块中如下申明:
module spi_master(
…
inout sdio,
…
);
然后在程序中:
reg sdio_en = 0;
wire sdi;
reg sdo = 0;
assign sdio = (sdio_en) ? sdo : 1'bZ;
assign sdi = sdio;
sdio_en是使能双向端口的,sdio_en为1时输出,为0时输入。
sdo作为输出寄存器,sdi作为输入。
在程序中要输出的时候,要先把sdio_en置为1,同时将数据放入sdo寄存器。输入的时候,先将sdio_en置0,再从sdi上取数据。
未完,敬请期待。。。
转载于:https://www.cnblogs.com/craftor/archive/2012/09/20/2695187.html
ADI芯片的通用SPI接口设计相关推荐
- 基于Verilog的SPI接口设计
SPI接口电路的学习 1.SPI接口电路原理 SPI, Serial Perripheral Interface, 串行外围设备接口, 是Motorola 公司推出的一种同步串行接口技术. SPI 总 ...
- pcie总线与cpci总线_基于通用PCI接口功能芯片和热插拔控制器实现CPCI总线控制的设计...
CPCI总线简介 CPCI总线是一个开放式.国际性技术标准,由PCI总线工业计算机制造商组织PICMG(PCI Industrial Computer Manufacturer Group)负责制定和 ...
- Java后端返回通用接口设计
我印象中,通用返回接口设计是有两种方式,第一种是自定义返回数据的通用类,另一种是springboot中实现ResponseBodyAdvice接口,实现返回数据格式的统一,如我说的有错,请大佬指出.本 ...
- 基于PCI9054和LTC4240的CPCI总线接口设计
CPCI总线简介 CPCI总线是一个开放式.国际性技术标准,由PCI总线工业计算机制造商组织PICMG(PCI Industrial Computer Manufacturer Group)负责制定和 ...
- AD硬件电路模块设计——PS7219及单片机的SPI接口电路
1 PS7219简介 PS7219是一种新型的串行接口的8位数字静态显示芯片.它是由武汉力源公司新推出的24脚双列直插式芯片,采用流行的同步串行外设接口(SPI),可与任何一种单片机方便接口,并可同时 ...
- 04【Verilog实战】SPI协议底层硬件接口设计(附源码RTL/TB)
脚 本:makefile 工 具:vcs 和 verdi 写在前面 这个专栏的内容记录的是个人学习过程,博文中贴出来的代码是调试前的代码,方便bug重现. 调试后的程序提供下载,[下载地址] 发现 ...
- DP2515国产带SPI接口汽车CAN总线控制器芯片兼容替代MCP2515/MCP2515-I/ST
目录 什么是CAN? DP2515简介 DP2515结构框图 芯片特性 参考原理图 什么是CAN? CAN是控制器局域网络(Controller Area Network, CAN)的简称,是如今是国 ...
- ESP32-S2上使用SPI接口芯片DM9051NP转以太网的无线物联网网关开发指导
前言 DM9051NP芯片 SPI接口占用管脚数量比以太网PHY的RMII/MII少,PCBA版线布局可更精简.而DM9051NP驱动软件方面,由于源代码已集成在ESP IDF中,可见其可靠度以及网口 ...
- direct wifi 芯片_介绍一款支持WiFi Direct的SPI接口WiFi模块
从定义上来看,WiFi Direct是一个标准,WiFi Direct标准是指允许无线网络中的设备无需通过无线路由器即可相互连接.与蓝牙技术类似,这种标准允许无线设备以点对点形式互连,不过在传输速度与 ...
最新文章
- pyspark汇总小结
- Strusts2笔记7--国际化
- AI一分钟|研究人员证明“金钱真的可以买到快乐”;特斯拉中国梦面临威胁
- 微信-支付宝-支付响应体
- Java进阶:@CallerSensitive详解
- ios7开发学习笔记-包括c oc 和ios介绍
- 5G 来了,我们可以做什么?
- Magento: 产品页面下jquery change函数失效 Call javascript function onchange product option
- Unity下载文件一(www协程下载)
- 百度富文本php配置方法
- org.gradle.api.tasks.compile.CompileOptions.setBootClasspath
- TypeScript学习笔记(七):模块
- StackPanel
- 微型计算机原理目录,微型计算机原理与应用 目录
- 什么是南大核心、北大核心、科技核心、人文核心、省级期刊和国家级期刊
- 百度网盘视频加速代码
- 服务器都有哪些安全配置总结
- gmail不支持html格式,gmail邮箱附件如何以html格式查看
- 截止失真放大电路_音频功放失真?别急!这里有常见改善方法
- 计算机控制plc应用论文,PLC自动控制系系统在变频器中的运用
热门文章
- 正弦定理和余弦定理_高三 | 数学必修五正弦定理和余弦定理应用举例考点梳理...
- 采用Matlab编程实现 高频强调滤波,[转载]MATLAB图像处理-基于高频强调滤波和直方均衡化图像增强...
- java 面向对象多态_乐字节Java面向对象三大特性以及Java多态
- 可视化排班管理_企业人事资源管理系统
- 关于python_关于Python,你必须知道的事!
- 应用filestream设置时存在未知错误_开机黑屏?常见启动黑屏错误的中文解释!学习电脑知识电脑小匠...
- c语言中三种常用的循环控制结构是,三C语言的基本控制结构.ppt
- opencv android 羽化,学习OpenCV:滤镜系列(15)——羽化(模糊边缘)
- python在统计中的应用_Python在简单数据统计中的应用--随笔记
- matlab编辑rayfile光源文件,rayfile网盘功能详解 rayfile网盘安装步骤及安装注意事项...