采用FPGA实现UART转SPI
| 应用笔记 V1.1 2015/2/10 | 采用FPGA实现UART转SPI | 
| 概述 | 
 本文提供了实现UART转SPI的Verilog代码的功能描述。这份笔记将介绍UART和SPI的基本知识,代码设计的基本思路,以及代码的具体实现及其描述。本程序的具体功能在于配合AD9512_Serial_GUI完成AD9512寄存器的配置,包括读及写过程。 | 

		
| 修订历史 | 以下表格展示了本文档的修订过程 
 [1]. 代码修订包括更改了实现方式,采用了状态机描述方法是下了UART2SPI的过程,同时增加了SPI2UART的功能。 | 

| 简介 | 
 本程序基于ISE14.7编写,PC机程序采用MATLAB编写,具体参考《程序说明-MATLAB串口操作和GUI编程》。阅读本文档内容前建议先阅读《程序说明-MATLAB串口操作和GUI编程》。 串行通信的帧格式如下所示 
 
 图 1 串行数据帧格式 
 对于AD9512而言,SPI的时序要求如下所示 
 
 图 2 AD9512写控制 
 UART转SPI的过程是通过上位机配置AD9512的过程,我们的目的在于将图 1中的帧格式转换为图 2所示的数据流。对应图二我们需要考虑三路信号 
 SDIO的数据不止8比特,可控制,简单起见我们每次写入1字节的数据。那么此时SDIO的数据流一次有24比特。对应可取串行通信的帧长为8比特,24比特相当于3帧。一旦确定了SDIO,通过FPGA可以很容易确定CSB和SCLK。 因此我们需要采用一个24位的寄存器来存储接收到的数据。那么问题是,我们该如何接收数据呢? 我们可以通过判断第一个下降沿来确定帧的起始,两个寄存器就可以满足这一要求。由于通信过程时钟不同源,我们希望采样点尽可能在中间,采用以高倍于波特率的时钟很容易就可以满足这一点。这里我们选择16倍波特率采样。我们需要一个计数器来判断接收了几个比特,同时还需要计数这是接收的第几帧。一旦我们接收到24比特的有效数据,就可以开始配置AD9512的寄存器了。 在设计之前我们需要考虑一下读寄存器的需求,V1.0版本的程序没有考虑这一点,所以V1.1的程序重写了。因此,做事之前考虑全面是很有必要的。 
 
 图 3 AD9512读控制 
 我们注意到实际上发送两帧数据就可以开始读数了,但为了和写控制一致,我们选择了在发送端发送一帧无意义的数据。一旦地址写入,在SCLK下降沿SDO开始串行输出寄存器的取值。 针对这些控制,我们觉得采用状态机来实现,状态包括: 
 状态设置不是特别合理,但基本完成功能,独热码设计。 | 

| 信号说明 | 
 
 图 4 UART转SPI模块 
 表格 1 UART转SPI模块的信号说明 
 
 | 

		
| 参考 | 
 AD9512数据手册 MATLAB帮助 Xilinx应用手册(xapp341) | 

采用FPGA实现UART转SPI的更多相关文章
- Uart、SPI和I2C的区别
		串口通信:UART.SPI.I2C区别[引用] 1.UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少.数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快.在多机通信上面 ... 
- 采用FPGA实现音频模数转换器
		http://www.21ic.com/app/eda/200905/42832.htm http://www.eefocus.com/article/09-10/84673s.html 摘 要 简要 ... 
- UART、SPI和I2C详解
		做单片机开发时UART,SPI和I2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细的解释. UART UART是一种通用串行数据总线,用于异步通信.该总线双向通信,可以 ... 
- USB、UART、SPI等总线速率
		1. USB总线 USB1.1: ---低速模式(low speed):1.5Mbps ---全速模式(full speed): 12Mbps USB2.0:向下兼容.增加了高速模式,最大速率480M ... 
- USB、UART、SPI等总线速率(转)
		1. USB总线 USB1.1: ——-低速模式(low speed):1.5Mbps ——-全速模式(full speed): 12Mbps USB2.0:向下兼容.增加了高速模式,最大速率480M ... 
- UART,USART,SPI,I2C等总线的介绍与区别20160526
		首先来说一下UART和USART的区别: 1.字面意义: UART:universal asynchronous receiver and transmitter通用异步收发器: USART:univ ... 
- 基于FPGA的UART协议实现(通过线性序列机)
		//////////////////2018/10/15 更新源代码: 实现uart这东西其实早就写了,不过不太完善,对于一个完美主义者来说,必须解决掉它. 1.什么是UART? 通用异 ... 
- UART、SPI、I2C协议异同点
		I2C.SPI.UART都是常见的低速板级通信协议,目前主流的SoC都内置了这些通讯协议的控制器,同样,各种传感器.Touch控制器.指纹模块.蓝牙模块.WIFI模块也都兼容这三种通信方式的一种或几种 ... 
- 串行总线 —— I2C、UART、SPI
		I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ... 
随机推荐
- 20155319 实验二 Java面向对象程序设计
			20155319 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 (一) ... 
- 1178: [Apio2009]CONVENTION会议中心
			1178: [Apio2009]CONVENTION会议中心 https://lydsy.com/JudgeOnline/problem.php?id=1178 分析: set+倍增. 首先把所有有包 ... 
- 变态的iis10
			IIS10发布网站不能使用.NET4.0需要重新注册在之前版本的系统中使用如下命令可以直接重新注册: 但是windowsServer2016(iis 10) 使用该命令 提示 版本不支持 C:\WIN ... 
- TensorFlow深度学习实战---循环神经网络
			循环神经网络(recurrent neural network,RNN)-------------------------重要结构(长短时记忆网络( long short-term memory,LS ... 
- info信息的获取
			一.绝对路径(_SERVER[“SCRIPT_FILENAME”])这个是最常用,也是最有效的一个办法,找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的.二 ... 
- fiddler的断点使用
			功能 用于修改数据 1.断点设置请求之前--修改请求数据 2.断点设置在响应时--对响应的数据修改 已中断的会话最前面的图标为红色的带箭头的标志 设置断点方法 1.菜单栏:rules->auto ... 
- 【UGUI】 (一)-------   放大镜
			在许多游戏或应用中,我们常常看到放大镜的身影,而在Unity里面,制作一个简易的放大镜是非常简单的. 一. 创建一个3DObject 创建一个Cube或者 Cylinder,这里为了更像放大镜一 ... 
- web _service 接口
			1.WebService 就是 http请求 post接口 2.需要加 请求头信息 Content-Type: text/xml; 3.需要把占位符换成需要的字符串 webservice接口可以 ... 
- .net mvc5 不同view()的视图 代码
			public class Test { public int id { set; get; } public string name { set; get; } } public ActionResu ... 
- 亚马逊:PS4和Xbox One实在太火
			圣诞节刚刚结束,当实体零售商在抱怨坑爹的天气让自己节日生意变得冷清的同时,在线零售商们却依旧赚的盆满钵满. 亚马逊近日表示,今年节日期间的零售工作非常不错,新一代游戏机更是最大的亮点.据销售统计,在圣 ... 
 
			
		


