ZYNQ:串口-CAN协议转换

前言

目前已经实现zynq的PS-CAN和PL-CAN功能。串口-CAN协议转换是实现以太网-CAN功能的过渡,通过这个流程能够减少后期以太网工程出现问题的频率。阶段性功能目标如下:

  1. 实现数据在CAN调试助手和串口调试助手之间的来回转换,从而了解中断机制和协议转换的基本流程。
  2. 实现串口信号协议解析,将数据发送到特定CAN。此时搭建的BD系统中可以添加8个CAN。
  3. 实现zynq以太网功能。此处问题较多,2021年出现大量的细节问题没有解决。如果问题较大,选择野火开发板熟悉基本流程。
  4. 按照上面的串口逻辑,实现以太网-CAN转换流程。如此,第一阶段的功能预期就完成。

这些目标是灵活的,可以依照需求中途调整。目前以上功能的实现主要是帮助梳理一些设计流程。

1串口-CAN总线

首先实现CAN中断功能,按照example提供例程学习。在中断中解析CAN帧后,提取出特定数据并通过print函数打印即可。这个流程是最为简单的。与之相对,串口数据无法通过print获取。需要学习串口上位机数据传输流程,从而提取出数据。
在这里插入图片描述
导入工程后,出现中断向量号的红标问题。由于CAN IP中的中断引脚一直没有连接,所以这个问题出现也不意外。但是,这个引脚并非如microblaze一样接入AXI interrupt controller,而是在ZYNQ中的Interrupts进行配置。
在这里插入图片描述
在这里插入图片描述

pin property FREQ_HZ does not match between

在这里插入图片描述
此帖指出直接删除端口再添加就能同步。结果虽然符合预期,但是这个变化本身是FCLK的频率出错造成的。下图显示,FCLK1的actual frequency 15.873016与设定的16Mhz不同。即使修改时钟源,偏差仍然存在。由于这个时钟频率偏差是软件界面显示结果,可能是软件稳定性造成,考虑先搁置这个问题。测试发现,对于波特率匹配没有影响。
在这里插入图片描述

中断向量ID错误

奇怪的是,比特流生成后,SDK端仍然无法检测到中断向量号。尝试如下三个操作:1查看hdf文件时间;2删除并重新导入CAN中断例程;3,RTL和wrapper图中中断相关信号;4查看注释说明。其中操作4似乎说明此外问题只是SDK的CAN驱动出现的更新错误,没有正确命名。由于61的值,以及注释中scugic的说明与实际相符。同时,代入数值后没有出现错误,基本可以判断是驱动更新问题。
在这里插入图片描述

/******************************************************************//* Definitions for Fabric interrupts connected to ps7_scugic_0 */
#define XPAR_FABRIC_CAN_0_IP2BUS_INTREVENT_INTR 61UXScuGic_SetPriorityTriggerType(&InterruptController, CAN_INTR_VEC_ID,0xA0, 0x3);/** Connect the interrupt handler that will be called when an* interrupt occurs for the device.*/Status = XScuGic_Connect(&InterruptController, CAN_INTR_VEC_ID,(Xil_ExceptionHandler)XCan_IntrHandler,InstancePtr);if (Status != XST_SUCCESS) {return Status;}/** Enable the interrupt for the Can device.*/XScuGic_Enable(&InterruptController, CAN_INTR_VEC_ID);/******************************************************************/

刚修改完程序,发现LED自动闪烁,存在问题。于是检查了run as,发现需要建立一个新的application GDB。这是一个常见的问题,可以习惯性得点开选项,或者设置快捷键即可(没有找到)。结果,中断正常运行。
在这里插入图片描述
在这里插入图片描述

数据顺序错乱

按照以下的接收转发逻辑,ECanTool发送的数据能够发送到串口调试助手。问题在于,数据顺序是错乱的,也不是倒序。

	if (RxFrame[0] == XCan_CreateIdValue(TEST_MESSAGE_ID, 0, 0, 0, 0)) {print("rx id right \r\n");}FramePtr = (u8 *)(&RxFrame[2]);for(Index = 0; Index<8; Index++){rxuart[Index] = *FramePtr++;}xil_printf("rx can data:%d,%d,%d,%d,%d,%d,%d,%d\r\n",rxuart[0],rxuart[1],rxuart[2],rxuart[3],rxuart[4],rxuart[5],rxuart[6],rxuart[7]);

在这里插入图片描述

在这里插入图片描述
查看CAN IP接收FIFO结构,可以看到结构存在一种一一对应关系。考虑大端和小端,在指针赋值以及数据赋值时,需要注意数据存储的顺序关系。只能假设FIFO中的DB顺序与CAN数据是一致的。由于这个内容不是目前重点,且对大端和小端的概念比较模糊,所以后期再处理。[逻辑直觉确实较慢,在几个对象中来回跳跃]

FramePtr = (u8 *)(&RxFrame[2]);for(Index = 0; Index<8; Index++){rxuart[Index] = *FramePtr++;}

在这里插入图片描述
到此CAN到串口的发送就完成了,接下来就进行串口到CAN。在此之前,先自己用最直接的程序,将流程重新梳理一遍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云软件开发生产线CodeArts前端DevOps实践

原文链接&#xff1a;CodeArts前端DevOps实践_软件开发生产线 CodeArts_理论实践_DevOps概览 本文主要以CodeArts产品自身为背景&#xff0c;简要介绍一些在前端性能优化方面的优秀实践方法和常见问题。 在开始本文的内容之前&#xff0c;先简单介绍一下华为云CodeArts。Code…

html中的meta 元信息

html中的meta 元信息 1. 配置字符编码 <meta charset"utf-8">2. 针对 IE 浏览器的兼容性配置。 <meta http-equiv"X-UA-Compatible" content"IEedge">3. 针对移动端的配置 <meta name"viewport" content"widt…

MySQL进阶篇2-索引的创建和使用以及SQL的性能优化

索引 mkdir mysql tar -xvf mysqlxxxxx.tar -c myql cd mysql rpm -ivh .....rpm yum install openssl-devel ​ systemctl start mysqld ​ gerp temporary password /var/log/mysqld.log ​ mysql -u root -p mysql> show variables like validate_password.% set glob…

【Flink精讲】Flink状态及Checkpoint调优

RocksDB大状态调优 RocksDB 是基于 LSM Tree 实现的&#xff08;类似 HBase&#xff09; &#xff0c;写数据都是先缓存到内存中&#xff0c; 所以 RocksDB 的写请求效率比较高。 RocksDB 使用内存结合磁盘的方式来存储数据&#xff0c;每 次获取数据时&#xff0c;先从内存中 …

睿尔曼超轻量仿人机械臂—远程文件传输工具使用说明

一、介绍 由于很多开发人员是在Linux下进行开发&#xff0c;但文件资料大多是保存在Windows下&#xff0c;进行文件传输很不方便&#xff0c;所以可通过远程文件传输的方式进行跨系统传输。此类方法有很多&#xff0c;这里讲述的是使用WinSCP工具进行文件远程传输。 WinSCP 是…

Go的CSP并发模型实现M, P, G简介

GMP概念简介 G: goroutine&#xff08;协程&#xff0c;也叫用户态线程&#xff09; M: 工作线程(内核态线程) P: 上下文(也可以认为是cpu&#xff0c;逻辑cpu数量&#xff0c;可以在程序启动的时候设置这个数量&#xff0c;gomaxprocs函数设置) GMP 模型 在 Go 中&#xff…

1504. 统计全 1 子矩形

Problem: 1504. 统计全 1 子矩形 文章目录 思路解题方法复杂度Code 思路 这个问题可以通过压缩数组和单调栈的方法来解决。我们首先遍历矩阵&#xff0c;对于每一行&#xff0c;我们计算出每一列的高度&#xff08;连续的1的数量&#xff09;。然后&#xff0c;我们使用单调栈来…

mysql锁-这条sql加了哪些锁

文章目录 1、 InnoDB的三种行锁2、常见的加锁语句2.1、常见隐式加锁语句2.1、常见显示加锁语句 3、加锁的2条规则4、案例4.1、唯一索引等值查询4.2、唯一索引范围查询4.3、非唯一索引等值查询4.4、非唯一索引范围查询 InnoDB 存储引擎中的行锁的加锁规则。 1、 InnoDB的三种行锁…

04|事务性能优化

4.1大事务的影响 ● 并发情况下&#xff0c;数据库连接池容易被撑爆 ● 锁定太多的数据&#xff0c;造成大量的阻塞和锁超时 ● 执行时间长&#xff0c;容易造成主从延迟 ● 回滚所需要的时间比较长 ● undo log膨胀 ● 容易导致死锁 4.2事务优化 ● 将查询等数据准备操作放…

二. 系统性能评价(2分)

🌟二. 系统性能评价(2分) 性能调整中的性能优化 和 性能评估方法 考试重点 文章目录 🌟二. 系统性能评价(2分)==性能调整中的性能优化 和 性能评估方法 考试重点==@[toc]2.1 性能评价指标 [包含计算]2.2 系统性能调整 [设计计算]2.3 性能优化2.4 性能评估方法2.1 性能评价…

嵌入式驱动学习第一周——vim的使用

前言 本篇博客学习使用vim&#xff0c;vim作为linux下的编辑器&#xff0c;学linux肯定是绕不开vim的&#xff0c;因为不确定对方环境中是否安装了编译器&#xff0c;但一定会有vim。 对于基本的使用只需要会打开文件&#xff0c;保存文件&#xff0c;编辑文件即可。 嵌入式驱动…

iconfont的组件化使用方法(SVG)

目录 一、需求描述二、操作步骤1.在iconfont中选择项目需要使用的图标2.在项目中创建iconfont.js3.创建svgIcon组件 一、需求描述 将iconfont图标库选择的图标以SVG的形式引入项目并通过组件化的形式在项目中引用可控制图标的大小和颜色 二、操作步骤 1.在iconfont中选择项目…

yaml文件详解

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式&#xff1a; ●大小写敏…

Mysql常见函数和用法(重点)

where子句中经常使用的运算符 -- 查询总分大于200分的所有同学 select * from student2 where (chineseenglishmath)>200; -- 查询math大于60 并且(and)id大于4的学生成绩 select * from student2 where math>60 and id>4; -- 查询英语成绩大于语文成绩的同学 select …

跟着cherno手搓游戏引擎【26】Profile和Profile网页可视化

封装Profile&#xff1a; Sandbox2D.h:ProfileResult结构体和ProfileResult容器&#xff0c;存储相应的信息 #pragma once #include "YOTO.h" class Sandbox2D :public YOTO::Layer {public:Sandbox2D();virtual ~Sandbox2D() default;virtual void OnAttach()ove…

【Python 数据分析 实战案例】通过用户和订单的数据分析,制定营销策略

在互联网行业中&#xff0c;电子商务领域绝对是数据分析用途最多的地方&#xff0c;各大电商平台都依赖数据分析帮助其挖掘用户订单增长机会。比如某宝的随手买一件&#xff0c;核心思路也就是根据用户的日常浏览内容及停留时间&#xff0c;以及订单的关联度来进行推荐的。 本…

AI与大数据:智慧城市安全的护航者与变革引擎

一、引言 在数字化浪潮的席卷下&#xff0c;智慧城市正成为现代城市发展的新方向。作为城市的神经系统&#xff0c;AI与大数据的融合与应用为城市的安全与应急响应带来了革命性的变革。它们如同城市的“智慧之眼”和“聪明之脑”&#xff0c;不仅为城市管理者提供了强大的决策…

VScode连接远端服务器一直输入密码解决方法

文章目录 1 关闭远程连接2打开命令面板3 输入remote-ssh: kill vs code server on host… 1 关闭远程连接 2打开命令面板 3 输入remote-ssh: kill vs code server on host… remote-ssh: kill vs code server on host… 然后一路回车(选中出问题的主机)&#xff0c;输一遍密码…

chap gpt的底层逻辑是什么?chap gpt如何进行训练?chap gpt会产生自我迭代和自我意识吗?

ChatGPT的底层逻辑是基于生成式预训练模型&#xff08;Generative Pre-Training&#xff09;。它使用了大量的无监督学习来预训练模型&#xff0c;然后通过有监督学习进行微调&#xff0c;以提高对语言的理解能力。 ChatGPT的训练过程可以分为两个阶段&#xff1a;预训练和微调…

tmux的使用方法

1. tmux的定义 我&#xff1a;什么是tmux&#xff1f; GPT&#xff1a;tmux&#xff08;terminal multiplexer&#xff09;是一个强大的终端复用器&#xff0c;它允许用户在一个终端窗口中创建、访问和控制多个会话。使用tmux&#xff0c;你可以在一个窗口中打开多个终端会话&…