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://xiahunao.cn/news/2812063.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

CMU15445实验总结(Spring 2023)

CMU15445实验总结(Spring 2023) 背景 菜鸟博主是2024届毕业生&#xff0c;学历背景太差&#xff0c;导致23年秋招无果&#xff0c;准备奋战春招。此前有读过LevelDB源码的经历&#xff0c;对数据库的了解也仅限于LevelDB。奔着”有对比才能学的深“的理念&#xff0c;以及缓解…

MySQL基础(二)

文章目录 MySQL基础&#xff08;二&#xff09;1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…

AI算法核心概念与方法汇总

一、AI模块简介&#xff08;45个&#xff09; 以下是提升AI大模型能力时涉及的核心概念与方法&#xff1a; 1. **迁移学习&#xff08;Transfer Learning&#xff09;**&#xff1a; - 利用在源领域预先训练好的模型&#xff0c;在目标领域上进行微调&#xff0c;从而利用已有…

【深度学习】Pytorch教程(十三):PyTorch数据结构:5、张量的梯度计算:变量(Variable)、自动微分、计算图及其可视化

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

七大查找算法详解并附代码实现

基本查找 也叫做顺序查找 说明&#xff1a;顺序查找适合于存储结构为数组或者链表。 基本思想&#xff1a;顺序查找也称为线形查找&#xff0c;属于无序查找算法。从数据结构线的一端开始&#xff0c;顺序扫描&#xff0c;依次将遍历到的结点与要查找的值相比较&#xff0c;…

景联文科技:引领战场数据标注服务,赋能态势感知升级

自21世纪初&#xff0c;信息化战争使战场环境变得更为复杂和难以预测&#xff0c;持续涌入的海量、多样化、多来源和高维度数据&#xff0c;加大了指挥员的认知负担&#xff0c;使其需要具备更强的数据处理能力。 同时&#xff0c;计算机技术和人工智能技术的飞速发展&#xff…

计算机操作系统(慕课版)第一章学习笔记

第一章学习笔记 1.1 操作系统的概念 操作系统是配置在计算机硬件上的第一层软件&#xff0c;是对硬件系统的首次扩充&#xff0c;其主要作用是管理硬件设备&#xff0c;提高他们的利用率和系统吞吐量&#xff0c;并为用户和应用程序提供一个简单的接口&#xff0c;以便用户和应…

SocketError | Socket错误码一览表(每一种错误码的故障排查建议)

Socket错误码一览表 文章目录 Socket错误码一览表前言错误码表 前言 在软件开发和网络通信编程中&#xff0c;SocketError算是一个绕不开的坎。它可能因为各种原因而来&#xff0c;比如网络问题、用户搞错了、应用程序出错等等。本文整理一张SocketError排查建议表格就是为了帮…

Superhuman 邮箱的替代方案是什么?

Superhuman是一个极好的人工智能工具在电子邮件助理领域。根据SimilarWeb的最新统计&#xff0c;它在全球网站排名中排名第21980位&#xff0c;月访问量为1751798。然而市场上还有许多其他优秀的选择。为了帮助您找到最适合您需求的解决方案&#xff0c;我们为您精心挑选了10种…

计算机操作系统(慕课版)第三章学习笔记

第三章 处理机调度与死锁 1.1 调度的层次 高级调度、低级调度和中级调度。 中级调度&#xff1a;在内存和外存对换区之间按照给定的原则和策略选择进程对换。 目的&#xff1a; 提高主存利用率&#xff0c;调节系统负荷进行程序的调试、检查和改正&#xff1b;当系统出现故障或…

vue + koa + 阿里云部署 + 宝塔:宝塔前后端部署

接上篇&#xff0c;我们已经完成了宝塔的基本配置&#xff0c;下面我们来看如何在宝塔中部署前后端 一、上传前后端代码文件 在www > wwwroot目录下创建了一个demo文件&#xff0c;用来存放前后端代码 进入demo中&#xff0c;点击上传 这里前端我用的打完包的 dist文件&am…

08_第八章 微头条项目开发(PostMan测试工具)

文章目录 第八章 微头条项目开发一 项目简介1.1 微头条业务简介1.2 技术栈介绍1.3 功能展示 二 前端项目环境搭建三 后端项目环境搭建3.1 数据库准备3.2 MVC项目架构模式3.3 搭建项目3.3.1 创建WEB项目3.3.2 导入依赖3.3.3 准备包结构 3.5 准备工具类3.5.1 异步响应规范格式类3…

Jquery中的事件与动画

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 本章目标 使用常用简单事件制作网页特效使用鼠标事件制作主导航特效使用hover()方法制作下拉菜单特效使用鼠标事件及动画制作页面特效 一.Jquery事件概述 二.基础事件 鼠标事件 演示案例&…

.NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】

设计模式是软件工程中常用的解决特定问题的通用设计方法。它们提供了经过验证的解决方案&#xff0c;可用于解决在软件开发过程中经常遇到的一些常见问题。设计模式不是一种具体的编程语言特性或语法&#xff0c;而是一种通用的设计思想或模板&#xff0c;可以帮助开发人员设计…

如何在项目中考虑非功能需求

软件的非功能需求指的是除了软件的功能需求以外&#xff0c;软件需要满足的一些其他需求。常见的非功能需求包括&#xff1a; 性能需求&#xff1a;软件需要在特定的时间内完成特定的任务&#xff0c;例如响应时间、吞吐量等。可靠性需求&#xff1a;软件需要在各种环境下都能…

pclpy VoxelGrid 滤波器 (降体素化)

[TOC](pclpy VoxelGrid 滤波器 (降体素化)) 一、算法原理 使用体素化网格方法对点云数据集进行下采样&#xff08;即减少点数&#xff09;。VoxelGrid类。在输入点云数据上创建一个3D 体素网格&#xff08;将体素网格视为空间中的一组微小的 3D 框&#xff09;。然后在每个体…

RK3568平台开发系列讲解(基础篇)如何快速学习一套 Linux开发板源码

🚀返回专栏总目录 文章目录 一、基础代码二、驱动代码沉淀、分享、成长,让自己和他人都能有所收获!😄 拿到一份源码和一块评估板,如何快速找到与这块板相关的源码,是很多研发人员都曾遇到过的问题。如果对内核源码结构有大概了解,要完成这些事情也不难,通常可按照基础…

AVL树简介及其四种旋转

AVL树由二叉搜索树进化而来。在二叉搜索树中如果出现特殊情况&#xff1a;所有插入的数据均为有序&#xff0c;根据二叉搜索树的插入原理&#xff0c;其会退化为单枝斜向下的而二叉树&#xff0c;此时插入&#xff0c;查找&#xff0c;删除的效率也就退化成了O(n)&#xff0c;效…

CUDA编程 - 用向量化访存优化 elementwise 核函数 - 学习记录

Cuda elementwise 一、简介1.1、ElementWise1.2、 float4 - 向量化访存 二、实践2.1、如何使用向量化访存2.2、Cuda elementwise - Add2.3、Cuda elementwise - Sigmoid2.3.1、简单的 Sigmoid 函数2.3.2、ElementWise Sigmoid float4&#xff08;向量化访存&#xff09; 2.4、C…

js里面有引用传递吗?

一&#xff1a;什么是引用传递 引用传递是相对于值传递的。那什么是值传递呢&#xff1f;值传递就是在传递过程中再复制一份&#xff0c;然后再赋值给变量&#xff0c;例如&#xff1a; let a 2; let b a;在这个代码中&#xff0c;let b a; 就是一个值传递&#xff0c;首先…