串口(UART)通信协议制定与设计思路详解

1 概述

本文用于描述规定的串口通信协议,以及传输内容。

2 项目关于串口的要求

a) 支持BIT自检,1路UART上报BIT信息;

b) 1路UART接口,波特率可调,默认波特率为可达到3.125Mbps。

3 功能分析

支持BIT自检即需要串口自动上报BIT信息,即周期信息上报信息,本设计暂定为1s钟上报一次。

支持波特率可调,在无其他接口控制的环境下,则需要通过串口下发来调整波特率。

4 项目设计

本项目串口设计支持收和发两个方向,BIT上报为1s一次。波特率可调,默认为3.125Mbps。串口格式为:1bit起始位,8bit数据位,1bit停止位,无奇偶校验位。

通信协议如下表所示:

表 1 串口通信协议

字段 位宽 备注
帧头frame_head 8bit 默认为0xfe
地址addr 8bit 0x01:BIT信息 0x02:波特率信息 0x03:BIT上报状态控制 0x04:上报串口波特率使能 0x05:上报BIT信息使能
数据data 32bit 数据为大端模式

4.1 BIT信息内容

BIT信息包括:光纤的fiber_ok,dvi_lock,DDR初始化完成init_calib_complete等信息,优先使用低位表示,比如:

Data[0]:fiber_ok;

data[1]:dvi_lock;

data[2]: init_calib_complete

4.2 BIT上报状态控制

BIT上报控制如下:

当数据位1时,默认为自动上报;

当数据位0时,停止自动上报。

4.3 波特率

波特率设置一bps为单位.比如115200bps。

5 上传通道的包

可上传的包信息有:

  1. BIT信息;

  2. 现在的串口波特率;

  3. 等其他信息

6 接收通道的包

接收后需要处理的包有:

  1. BIT状态控制;

  2. 改变的波特率值;

7 设计思路

本设计要实现本功能主要分为7个模块。如下图所示:

图 1 模块对接图

虚线框里的模块为FPGA用逻辑需要实现的部分。

其中rx_uart为将串行的1bit从串口接收到的信号转变为8bit数据的模块,已经实现。Tx_uart为将8bit并行数据转换为1bit串行数据给串口芯片的模块,也以实现。

7.1 RX_DATA模块

RX_DATA模块为实现从接收到的数据中识别本项目需要的数据格式,本模块的输入输出端口如下表所示:

表 2 RX_DATA模块接口

序号 信号名 位宽bit 方向I/O 备注
1. clk 1 I 时钟
2. rst_n 1 I 复位,低有效
3. uart_din 8 I 从rx_uart接收到的数据
4. uart_din_vld 1 I 从rx_uart接收到的数据有效指示信号,高有效
5. addr 8 O 按串口协议解析出的地址
6. data 32 O 按串口协议解析出的数据
7. data_vld 1 O 按串口协议解析出的数据有效指示信号

其实现过程为使用状态机判断是否为本文需要的格式,状态机如下所示:

图 2 RX_DATA控制逻辑

7.2 RX_analysis模块

本模块主要是实现从地址数据中提取出有用数据的功能。本模块的接口如下表所示:

表 3 RX_ANALYSIS模块接口

序号 信号名 位宽bit 方向I/O 备注
1. clk 1 I 时钟
2. rst_n 1 I 复位,低有效
3. addr 8 I 串口协议的地址
4. data 32 I 串口协议的数据
5. data_vld 1 I 串口协议的数据有效指示信号,高有效
6. bit_self_report_en 1 O Bit自动上报使能信号,高有效
7. uart_bps 32 O 串口波特率
8. Uart_bps_report_en 1 O 波特率上报使能信号
9. Bit_report_en 1 O Bit上报一次使能信号

具体实现方式如下所示:

  1. 当addr为0x03时赋值判断:bit_self_report_en默认为1,当addr为0x03并且data_vld为1时变为data[0],其他时候保持不变;

  2. 当addr为0x02时赋值判断:uart_bps默认为d’3_125_000,当addr为0x02并且data_vld为1时变为data,其他时候保持不变;

  3. 当addr为0x04时赋值判断:data_vld有效且data[1]为1时,Uart_bps_report_en使能一次;

  4. 当addr为0x05时赋值判断:data_vld有效且data[1]为1时,Bit_report_en使能一次;

7.3 TX_DATA模块

本模块主要是将串口协议的数据转为换8bit的串口发射模块可以发出的格式。本模块的接口如下表所示:

表 3 RX_ANALYSIS模块接口

序号 信号名 位宽bit 方向I/O 备注
10. clk 1 I 时钟
11. rst_n 1 I 复位,低有效
12. din_addr 8 I 串口协议的地址
13. din_data 32 I 串口协议的数据
14. din_data_vld 1 I 串口协议的数据有效指示信号
15. din_rdy 1 O 本模块准备好接受数据指示信号,高有效
16. dout 8 O 输出给tx_uart模块的数据
17. dout_vld 1 O 输出给tx_uart模块的数据有效指示信号,高有效
18. dout_rdy 1 I 下级模块准备好接受数据的指示信号,高有效

其实现思路如下所示:

  1. 当输入数据信号有效时,将地址数据以及帧头按串口协议格式进行组包,即位数拼接 tx_data = {帧头,地址,数据};

  2. 之后将tx_data输入到一个位宽转换fifo里面。Fifo的输入位宽为8+8+32=48bit,输出位宽为8bit;

  3. Dout等于fifo的输出;

  4. 当fifo非空,且dout_rdy为1时,fifo的读使能有效,且dout_vld有效;

  5. 当fifo非满或者即将非满时,din_rdy有效;

7.4 Tx_ctrl模块

本模块主要是控制什么时候需要往外面发送数据,以及发送什么数据。本模块的端口如下表所示:

表 3 TX_CTRL模块接口

序号 信号名 位宽bit 方向I/O 备注
1. clk 1 I 时钟
2. rst_n 1 I 复位,低有效
3. dout_addr 8 O 串口协议的地址
4. dout_data 32 O 串口协议的数据
5. dout_data_vld 1 O 串口协议的数据有效指示信号
6. dout_rdy 1 I 下级模块准备好接受数据指示信号,高有效
7. uart_bps 32 I 当前串口波特率
8. bit_data 32 I Bit的信息
9. bit_report_en 1 I Bit上报使能信号,高有效
10. uart_bsp_report_en 1 I 串口波特率上报使能信号,高有效

本模块实现的思路如下:

  1. 当Bit_report_en为1时,dout_addr为0x01,dout_data为bit_data,且在dout_rdy有效时,dout_data_vld有效一次;

  2. Uart_bsp_report_en为1时,dout_addr为0x02,dout_data为uart_bps,且在dout_rdy有效时,dout_data_vld有效一次;

7.5 Top模块

本模块是用于整合各个模块,以及产生一个1s的定时模块。

当定时时间到或者外部有bit上报请求时,则使能一次bit上报使能。

ata为bit_data,且在dout_rdy有效时,dout_data_vld有效一次;

  1. Uart_bsp_report_en为1时,dout_addr为0x02,dout_data为uart_bps,且在dout_rdy有效时,dout_data_vld有效一次;

7.5 Top模块

本模块是用于整合各个模块,以及产生一个1s的定时模块。

当定时时间到或者外部有bit上报请求时,则使能一次bit上报使能。

FPGA串口(UART)通信协议制定与设计思路详解示例相关推荐

  1. Pinterest 3.0 for iOS设计过程——升级iOS7设计思路详解

    Pinterest 3.0 for iOS设计过程--升级iOS7设计思路详解 时间2013-12-11 11:39:31  苹果开发中文站 原文  http://www.cocoachina.com ...

  2. 企业项目权限管理设计思路详解

    任何系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统添加亮点. l        不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本 ...

  3. mysql 点赞数据库设计_基于redis实现的点赞功能设计思路详解

    点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql等 数据库直接落地存储, 另外一种就是利用点赞的业务特征来扔到redis(或memcache)中, 然后离线刷回mysq ...

  4. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  5. 手机快充芯片及其技术标准和设计原理详解

    手机快充芯片及其技术标准和设计原理详解 智能手机对于宽带无线通信.图像处理等多方面的需求导致实际耗电呈指数增长.未来5G通信带宽将比4G增加10倍,4K/8K等高清视频技术逐渐应用,CPU.GPU等运 ...

  6. 汇编语言贪吃蛇、俄罗斯方块双任务设计实现详解(三)——俄罗斯方块详细设计

    详细设计: 3.俄罗斯方块详细设计:下图所示,左下角为主程序的调用情况,左边上侧和右侧为俄罗斯方块相关数据在teris段中的存储情况 下图所示,左侧为俄罗斯方块具体子程序,右侧为俄罗斯方块程序运行流程 ...

  7. 《单片机串口通信及测控应用实战详解》——6.3 PC端程序设计

    本节书摘来异步社区<单片机串口通信及测控应用实战详解>一书中的第6章,第6.3节,作者:李江全,聂晶,梁习卉子,刘新英,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  8. STM32L4xx基于UART的IAP实现(实验详解)

    STM32L4xx基于UART的IAP实现(实验详解) 最近刚接触到STM32L452RET6(STM32L4xx系列)芯片,使用LL库配置(LL库更接近硬件层,直接操作寄存器.)可以先使用STM32 ...

  9. 汇编语言贪吃蛇、俄罗斯方块双任务设计实现详解(二)——贪吃蛇详细设计

    详细设计: 2.贪吃蛇详细设计: 如下图所示左下角为主程序对贪吃蛇相关子程序的调用,程序中init_left_window子程序功能为将左侧窗口非边框部分置为空.左边上侧和右侧是贪吃蛇段中,贪吃蛇程序 ...

最新文章

  1. linux内核 semaphore,2.4内核里semaphore源码的一个疑问
  2. MySQL order by 是怎么工作的?
  3. 肤色检测算法 - 基于二次多项式混合模型的肤色检测
  4. Java 判断操作系统类型(适用于各种操作系统)
  5. NET问答: 到底是返回 null 好,还是 空集合 好?
  6. linux5.5 里dns,RedHat 5.5搭建各种DNS服务器(3)
  7. abrels.inc.php_fckk.php
  8. 数据库中的DbUtils
  9. txt doc rtf html,JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例.docx
  10. android gps转换度分秒,如何将GPS数据转换为度分秒
  11. 阿里巴巴中台技术架构实践与思考
  12. CATransition 动画处理视图切换
  13. 鼠标自动移动 防止锁屏睡眠
  14. 彭斌_无人机的发展与未来
  15. 编辑中的word变成只读_word只读模式怎么改 word保存文件提示此文件为只读无法保存修改方法...
  16. excel表格拆分为多个工作表的操作方法
  17. Quartz配置参考
  18. TM1650数码管驱动芯片
  19. 保研面试/考研复试线性代数问题整理
  20. java多线程总结(一)

热门文章

  1. where is url parameter evaluated in UI5 core q.sap.getUriParameters
  2. SAP Leonardo机器学习Restful API如何获得Access Token
  3. CRM One Order 事件处理元数据初始化的准确位置
  4. CL_CRM_REPORT_QUESTION call CRM_REPORT_RF_CHECK_AUTHORITY
  5. 点击SAP Fiori Launchpad某个tile后遇到的错误消息如何解决
  6. 给硬件工程师介绍SAP Cloud for Customer
  7. 如何从S4HANA的销售订单找到对应的生产订单
  8. html 输入框变红色,input输入框 输入错误时,点击注册按钮,输入框的边框变成红色,重新输入时,边框颜色恢复原来的,同时错误提示消失?...
  9. 无插件HTML,HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)分享!
  10. 电脑卡顿不流畅怎么解决_电脑用久了卡怎么办?学会这四招解决你的电脑卡顿问题...