UART协议概述与实现
UART协议概述(一)
- 协议描述
- 关键代码逻辑
- 写在最后
协议描述
- 常见的三大低速通信协议之一,UART,通用异步收发协议。
- 非常简单的协议,协议细节不需要多说,只说需要注意的点。
- 空闲位为高位,起始位为低位,8位数据,校验位,停止位为高位,一共11位数据,空闲位不算在发送的数据之中,因为它和停止位是相同的。这样才符合异步传送的连续性逻辑。
- 发送的逻辑比较简单,直接利用系统时钟和波特率产生我们需要的发送脉冲,也就是波特率发送脉冲,脉冲需要计数11次,当计数完成时,表示发送完毕,给出done信号。
- 接受逻辑主要要考虑两个点,第一,当数据从空闲态进入起始位时是一个下降沿,需要检测工业的实际接受需要采样很多次,因此我们给出一个16倍频的时钟去采样16ci,取中间的6次作为样本,然后计算他们的和,若大于等于4,则判断为1,否则为0,不考虑3个1和3个0的情况,也就是第三位为1的时候,则为1,否则为0。其余的逻辑都和发送类似,不再赘述。
- 校验逻辑是否正确可以直接将发送的数据接口接入到接受的数据接口,
然后观察接受的数据和发送的是否一致即可。比如下面这样:
关键代码逻辑
- uart_rx逻辑关键代码:
assign nedge = !tmp0_Rs232_Rx && tmp1_Rs232_Rx;// 边沿检测
always @ (posedge clk or negedge rst_n) beginif (!rst_n) begintmp0_Rs232_Rx <= 1'b0;tmp1_Rs232_Rx <= 1'b0;endelse begintmp0_Rs232_Rx <= s1_Rs232_Rx;tmp1_Rs232_Rx <= tmp0_Rs232_Rx;end
end// 将累加得到的第三位的值直接输出即可,第三位为1,则代表采集的6个数的和大于等于4,那么输出为1。
always @ (posedge clk or negedge rst_n) beginif (!rst_n) begindata_byte <= 8'd0;endelse if (bps_cnt == 8'd159) begindata_byte[0] <= r_data_byte[0][2];data_byte[1] <= r_data_byte[1][2];data_byte[2] <= r_data_byte[2][2];data_byte[3] <= r_data_byte[3][2];data_byte[4] <= r_data_byte[4][2];data_byte[5] <= r_data_byte[5][2];data_byte[6] <= r_data_byte[6][2];data_byte[7] <= r_data_byte[7][2];end
end
- uart_tx逻辑关键代码:
// bps_clk发送脉冲的实现
always @ (posedge clk or negedge rst_n) beginif (!rst_n) beginbps_clk <= 1'b0;endelse if (div_cnt == 1'b1) beginbps_clk <= 1'b1;endelse beginbps_clk <= 1'b0;end
end
写在最后
- 保持节奏,戒骄戒躁!
UART协议概述与实现相关推荐
- 几种常用通信协议:IIC协议、SPI协议、UART协议
通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC协议: 2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一 ...
- 《趣学CCNA——路由与交换》一2.3 网络层协议概述
本节书摘来自异步社区<趣学CCNA--路由与交换>一书中的第2章,第2.3节,作者 田果 , 彭定学,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.3 网络层 ...
- UART协议驱动设计
UART协议驱动设计 在不通信时,发送高电平. 发送信息时,应该首先发送起始位(1bit.低电平).可以理解为告诉接收方,应该接收信息了. 发送数据位,由于是串行通信,规定从低位开始发,最后到高位(协 ...
- Jabber 协议 概述
Jabber 协议概述 Peter Saint-Andre stpeter@jabber.org 1.4版Jabber服务协议的概述 1. 介绍 Jabber是一个由开源社区发起并领导开发的即时消息和 ...
- 物联网标准和协议概述(postscapes)
物联网标准和协议概述 本篇文章是物联网设备和应用程序中涉及协议的概述.帮助澄清IoT层技术栈和不同的协议对比. 物联网涵盖了众多行业和用例,从单一受限设备扩展到嵌入式技术和实时连接的云的大规模跨平台部 ...
- 计算机网络-传输层(传输层概述,TCP,UDP协议概述)
文章目录 1. 传输层概述 2. TCP,UDP协议概述 3. 传输层的寻址与端口 1. 传输层概述 传输层是只有主机才有的层次. 传输层功能: 传输层提供进程和进程之间的逻辑通信. 网络层提供主机到 ...
- 记:从零开始讲解UDS(一)——协议概述
0x00 UDS概述 UDS(University Diagnostics System通用诊断系统)是一个在整车系统上经常使用的设备维护协议.其主要遵循的法规为:ISO-15765.ISO-1422 ...
- 华为1+X网络系统建设与运维(中级)——IPv6协议概述
华为1+X网络系统建设与运维(中级)--IPv6协议概述 该视频主要讲解以下内容: IPv6协议概述 IPv4与IPv6 IPv6的数据包封装 IPv6地址的表示方式 IPv6地址配置 6-i ...
- RapidIO协议概述(一)
[SRIO]1.RapidIO协议概述 目录 一.RapidIO背景介绍 二.RapidIO协议概述 2.1 包与控制符号 2.2 包格式 2.3 事务格式与类型 2.4 消息传递 2.5 全局共享存 ...
最新文章
- Color the ball(HDU1556)树状数组
- cifar数据集介绍及到图像转换的实现
- 为ML开发、部署提供靠谱的系统工程方法,NASA、牛津、微软等多家机构提出MLTRL框架
- 【特征工程】不容错过的 5 种特征选择的方法!
- Ida双开定位android so文件
- Scala 中的文件操作
- MessageBox、::MessageBox 、AfxMessageBox三者的区别
- springboot:web开发-Thymeleaf
- 腾讯云linux服务器怎么使用图形化界面_winscp使用方法,winscp使用方法详细说明...
- 实战丨基于接口的银行系统自动化测试实践
- vue3开启eslint之后报错:error Parsing error: ‘>‘ expected
- 黑苹果10.13.6及以下安装WebDriver驱动nvidia独立显卡,以及修改机型
- 设计一个RC高通滤波器或低通滤波器
- zabbix Too many processes on xxx
- python爬虫:英为财情爬取美国十年期国债收益率
- 重装战姬服务器维护,重装战姬2020年9月10日更新维护公告重装战姬2020年9月10日更新了什么 - 量产资源网...
- 韩服跑跑卡丁车 赛车大全
- TED-4-美好人生的定义
- 大数据01:前置条件
- rtx2060什么水平_RTX2060与Super有什么区别?RTX2060和RTX2060 Super性能对比评测
热门文章
- 为什么我不使用 Web 组件?
- 开发者硬核福利!极光可信数据云来了
- 这本京东断货王的Python神书,刷爆整个编程圈!| 测评
- 微软神操作!Web 版 VS Code 来了!
- OPPO 推出 10 亿引力计划,全力构建智能化服务生态
- 作为“梅西式”程序员,我要跳槽了
- Wi-Fi 爆重大安全漏洞,Android、iOS、Windows 等所有无线设备都不安全了
- 管理中的计算机应用真题,0051管理系统中计算机应用试题历年真题
- mysql事务的好处_什么是事务(transaction)?它有什么好处
- 散点图为什么是两组点_SAT数学易错点排雷之scatter plot