首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软硬件都开源!基于千兆以太网的温度传感应用

软硬件都开源!基于千兆以太网的温度传感应用

作者头像
根究FPGA
发布2020-08-10 10:13:02
6430
发布2020-08-10 10:13:02
举报
文章被收录于专栏:根究FPGA根究FPGA

今天和大家分享一个基于千兆以太网的项目应用方案,是一种应用思路,如果想要添加其他功能或者传感器可以在此基础上进行改进。

需要声明的是,本次分享的内容包含整个工程(FPGA工程+上位机软件)全部代码,转载请注明出处,先行谢过!视频中对代码与IP都进行了较为详细的介绍,如需对内部结构进一步了解可参考《基于Aurora的网口通信笔记》,链接:基于Aurora的网口通信笔记,个人认知难免存在纰漏,还请大家指出并修正。

工程使用ZYNQ作为主控芯片,利用ds18b20进行温度采集,内部所涉及的所有OSI均由ZYNQ固有IP构成,无外接芯片,物理层PHY使用1G/2.5G Ethernet PCS/PMA or SGMII IP,数据链路层MAC使用Tri Mode Ethernet MAC IP,(传输层+网络层)控制模块使用udp_ip_protocol_stack,设计温度采集实时传输系统,处理结果通过SFP发送给上位机,系统运行高速、稳定,可有效反映温度变化。

工程示例包含两种情况,分别为单路ds18b20温度采集传输与双路温度采集传输,两者区别不大。

上位机使用Qt软件设计,包含UDP数据发送与接收功能,并设计有接收内容存储功能。(后台回复:千兆以太网即可获得全部代码链接)

SFP实拍

温度数据变化

视频讲解

由于视频中已经对硬件与软件工程进行了介绍,最后就再补充一些调试时遇到的bug:

1、上拉电阻的设置

DS18B20为one-wire型通行总线,也就是其通信引脚只有一个,该引脚既做为输出也做为输入使用,所以在进行引脚分配时需要对其设置成弱上拉,使用的指令为:

set_property PULLUP true [get_ports {DS18B20}]

2、状态机问题

在设计过程中状态机遇到一个问题,首先是在从等待数据发送状态WAIT_UDP_DATA跳转到WAIT_ACK状态后,FPGA发送到上位机的是三条完全相同的数据拼在一起,解决时浪费了较多的时间。

后经过程序分析,是因为发送的话只需要在WAIT_ACK状态判断TX_ack信号,之后跳转到SEND_UDP_DATA[x]状态时,不需要判断tx_ack信号,否则的话会从SEND_UDP_DATA状态跳回到WAIT_ACK,而WAIT_ACK状态只会发送前8字节的数据,这样的话三次发送24字节数据,UDP_STACK接收到设定的24byte数据(udp_ip_protocol_stack才不管你发的对不对,反正是24byte就好了),即开始向上位机发送,所以SEND_UDP_DATA状态对数据的填充语句一直未执行导致bug,特此记录。

3、网络字节序

在以太网中,网络字节序是一个常谈的话题,网络字节序基本就是大端对齐,即内部地址的低位存放高序字节。在以太网发送时发送的顺序是先发送数据的高位,即从内存地址的低位读待发送数据,所以在数据发送时,要把待发送的数据手动按照大端对齐的方式放到传输线上,比如要发送的第一个8byte数据为:“The tem”(空格也是一位),那么传输线上的数据格式为:{m,e,t, ,e,h,T}的ASCII码值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 根究FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档