采用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,不输出电压,低电平时接地,高电平时不接地 ...
随机推荐
- 20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告
20155218 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 主要学习安装和使用junit来测试编写的程序,并学习以TDD(Test ...
- 20155310 2016-2017-2《Java程序设计》课堂实践补交
20155310 2016-2017-2<Java程序设计>课堂实践补交 第九周 程序设计中临时变量的使用 public class linshibianliang { public st ...
- 20155322 《Java程序设计》课堂实践项目MyOD
20155322 <Java程序设计>课堂实践项目MyOD 实践要求 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和 ...
- day 14 元组
1. 使用场景? # 列表list 数据类型相同, #rwx文件 100个人的名字, # 用字典 dict ['dɪkt] 很多信息描述1个人, # tuple [ˈtʌpəl] #只读文件 不能修改 ...
- kyligence enterprise3.2.x版本使用mysql作为数据源构建报错
1.报错信息如下: exe cmd:null/bin/sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true -Dfs.de ...
- JMeter自学笔记1-环境安装
一.写在前面的话: Jmeter是一款优秀的开源测试工具, 是每位测试工程师进阶过程中,需要熟悉并掌握的一款测试工具,熟练使用Jmeter能大大提高工作效率. Jmeter环境安装需要依赖JDK,所以 ...
- Centos7部署Kubernetes集群(单工作节点)+配置dashboard可视化UI
目标:docker+kubernetes+cadvosor+dashboard 一:物理硬件 两台虚拟机(centos7):一台做为主节点(master),一台做为工作节点(node) [root@M ...
- Hackerank-Array-NewYearChaos
题目背景描述 新年第一天,N 个人排队坐过山车.每个人穿有带编号的衣服 \([1, 2, 3, ...]\). 因为排队时间太久,有人发现给前面相邻的人喂一颗糖,就可以和他交换位置,而每人手里只有两颗 ...
- sklearn中的交叉验证(Cross-Validation)
这个repo 用来记录一些python技巧.书籍.学习链接等,欢迎stargithub地址sklearn是利用python进行机器学习中一个非常全面和好用的第三方库,用过的都说好.今天主要记录一下sk ...
- PPM、PGM、PBM图像格式剖析
今天突然需要用到PPM这个图像文件格式,之前没见过,在此记录一下. PPM.PGM.PBM这三个图像文件格式很少见,其实也不难,分别用于彩色图像.灰度图像.二值图像.这里以PPM格式为例. PPM格式 ...



