当前位置: 首页 > news >正文

基于ACS40核心板的串口图传设计

基于ACS40核心板的串口图传设计

  • 基于ACS40核心板的串口图传设计
    • 该设计使用的硬件
    • 设计目的以及要达到的效果
    • 基于设计目的下的分析
    • 架构设计(设计框图)
    • 实现效果图
    • 小结

基于ACS40核心板的串口图传设计

该设计使用的硬件

在这里插入图片描述
       该设计使用了自研的ACS40核心板,对于这个核心板的具体介绍,见《ACS40核心板简介》这篇博文,配合一个SRAM模块,以及一个MT9V034摄像头模块,硬件平台搭建完成后如上图所示。

设计目的以及要达到的效果

       PC端串口下发图像采集的命令,ACS40收到命令后开始将摄像头数据存入SRAM,存完一帧完整的图像后,ACS40使用串口回送给PC端一个采集好的回送字,然后PC端通过串口下发回读图像的命令,ACS40收到命令后通过串口将SRAM中一帧完整的图像发送给PC端。

基于设计目的下的分析

1. 关于数据量的计算:
       对于本设计而言,在设计之初,我们需要首先根据现有的硬件条件,计算各个环节需要流过的数据量,因为对于串口而言,本身数据传输的速度不会很快,所以在传输数据,尤其是进行图像数据这样大量像素点数据的情况下,首先就需要计算整个链路上各个环节需要流过的数据量,以论证这个方案的可行性。
       MT9V034摄像头是一个灰度摄像头,分辨率为:752x480,一个灰度像素数据为8bit
那么一帧完整的图像就是:752x480x8= 2_887_680bit;752x480= 360_960Byte;
       与ACS40配套使用的SRAM模块使用的是ISSI的IS61LV51216,数据位宽为16bit,地址位宽为19bit,则共可以存储2^19=524_288个16bit;
       对比可以知道,一帧的8bit像素数据可以不用拼接直接存入SRAM模块,SRAM每个16bit的高8bit可以直接赋值为8’h00,这样可以避免了拼接存入后再读出来还得折腾顺序;
2. 关于串口波特率的选择:
       由于此次串口传输的数据量不少,并且我们使用的是以FPGA为核心的一个板卡,
那么在波特率的设置上就可以稍微随意一点,为了不使图像传输的时间过久,这里以2_000_000的波特率作为串口通信的速度,具体的话,在代码阶段需要做一个2_000_000波特率下的串口环回实验,主要目的是测试下,在这样的硬件条件下,这个波特率设置条件下,数据传输是否稳定,不允许有大面积数据错误的情况发生,个别坏点暂时先忍了;
       注:20220907,经过测试在目前上位机条件下,高波特率接收容易造成丢包,主要原因还是上位机接收的原因,在115200波特率下可以进行稳定的接收,所以暂定先使用这个波特率。
       这里要对上面两段话进行一下解释,本来在设计之初,计划使用一个高一点的串口波特率,这样可以节省下一点传输时间,但是由于串口显示的上位机是我自己使用Labview写的,所以可能是这个自己的上位机水平还不够,所以在使用2_000_000bps下,上位机串口在丢数据,所以在后续的设计中我就把波特率下调至115200bps这样一个常规的波特率,以保证不丢数据,由此也可以看出,我们在做一个设计的过程中,总是会遇到这样那样与最初方案相冲突的地方,但是这次是由于上位机书写的问题,因为本身我自己并不是专业写上位机软件的,所以我选择了不过度深究这个问题,当然后续如果有时间和精力,也会想想办法把这个问题解决一下。
3. 串口数据协议(自定义):
       关于串口发送,接受命令,以及数据传输的格式,这里做一个自定义的数据收发协议:
(1)命令控制字(CW)为4个字节,即连续4个8bit:
       CW0:
              8’h01----开始采集;
              8’h02----开始回读数据;
       CW1:保留
       CW2:保留
       CW2:保留
(2)回送控制字(RW)为4个字节,即连续4个8bit:
       RW0:
              8’h03----一帧图像采集完毕;
       RW1:保留
       RW2:保留
       RW2:保留
(3)图像数据传输格式:
       图像数据分为包头,像素数据,包尾,这里采用一种简单的数据打包方式:包头为一个字节的8’h55,包尾为一个字节的8’hAA,中间为750x480个8bit的灰度数据,数据顺序为摄像头采集的顺序,一行一行回送,每行750个字节,共480行;

架构设计(设计框图)

       在上述的方案各个细节都明确的情况下,设计框图也可以明确细化出来了:
设计框图
       在这里简述下各个模块的作用:
“MT9V034模块”:用于采集摄像头模块的像素数据,并且形成像素点的行列号;
“UART_R模块”:串口接收模块,每次接收一个字节的数据;
“UART_T模块”:串口发送模块,每次发送一个字节的数据;
“CW_FENXI模块”:命令分析模块,用于分析所收到的命令,解析好,送给下个模块;
“SRAM_CTRL模块”:这个模块其实是一个调度模块,它需要根据收到的命令,自己进行SRAM的写入、读取,以及串口发送数据。

实现效果图

下图是初步的实现效果,上位机自己瞎写的并不专业:
实现效果图

小结

       做这样一个小设计的目的呢,一是用用自己多年前弄得这个核心板以及一些外设,毕竟虽说是这个核心板不大,但是通过留的一些借口啊这些,也是可以进行一些小的设计;二的话也是最主要的,培养自己进行标准化设计的能力,以及在设计过程中慢慢形成文档,做好记录,这样一个能力;最后呢也是验证下这套硬件的能力,这个设计并不是结束,而是一个链路的验证,为后续的开发设计做一个验证工作,在后续的设计成熟后,也会以这样一个博文的形式分享出来…

相关文章:

  • Android移动应用开发之ListView和RecyclerView的简单使用
  • 探究linux进程调度
  • android新版本适配-android13最全适配方案
  • 【mongo 系列】聚合知识点梳理
  • 2022年9月26日--10月2日(ue4热更新视频教程为主)
  • 阿里云SLB负载均衡理论与操作
  • 【理论】(spark 二)spark core之RDD:基础概念、特点、stage任务划分与hello spark
  • JWT安全WebGoat实战与预编译CASE注入
  • 贝叶斯公式——假阳性问题
  • ES6-let-难点
  • 如何处理消费过程中的重复消息
  • 【reverse】虚假控制流入门:Ubuntu20.04安装ollvm4.0踩坑记+用IDApython去除BCF
  • 服装连锁店铺管理软件大盘点!秦丝、日进斗金、商陆花谁更强?
  • 编译原理6.1:NFA转DFA、DFA化简
  • 30分钟学完mysql的基本操作和语法(图文解说)
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Java的Interrupt与线程中断
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redux 中间件分析
  • Vue.js-Day01
  • 对象引论
  • 工程优化暨babel升级小记
  • 京东美团研发面经
  • 云大使推广中的常见热门问题
  • 做一名精致的JavaScripter 01:JavaScript简介
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​Java并发新构件之Exchanger
  • (23)Linux的软硬连接
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计高校学生选课系统
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • 。Net下Windows服务程序开发疑惑
  • //解决validator验证插件多个name相同只验证第一的问题
  • ??eclipse的安装配置问题!??
  • @Conditional注解详解
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [20150321]索引空块的问题.txt
  • [Android学习笔记]ScrollView的使用
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [CTF]php is_numeric绕过
  • [IE编程] 如何获得IE版本号
  • [leetcode 数位计算]2520. 统计能整除数字的位数
  • [leetcode]Clone Graph
  • [Linux] Boot分区满了的处理方法 The volume boot has only 0 bytes disk space remaining