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

ZYNQ:PL-CAN总线功能应用

流程背景

前期基本实现PS端的CAN总线功能,现阶段的主要目的是实现PL端的CAN总线功能,需要采用CAN IP。

PL系统搭建

PL外设时钟源
搭建完vivado系统后,需要在sdk编程。但是在配置PL-CAN时,意识到CAN时钟值不清楚,于是检查zynq系统,发现PL-CAN外设的时间来自于FCLK-CLK0。这个时钟值与CAN外设的关系是可以在block design看到的。配置表显示FCLK-CLK050Mhz,编程可以按照这个值。

在这里插入图片描述
在这里插入图片描述

下载失效:
再次出现下载程序,zynq开发板没有反应的情况。下载的程序是LED,以前应用时也没有特别的问题。考虑到explorer包含大多的应用工程,于是删除了无关的工程,重新实现特定的功能。

run as program FPGA配置:
前期下载程序时,有时program FPGA无法点击。这可能也是下载程序不成功的原因,可以考虑从这个现象入手。

在这里插入图片描述
XCan_GetMode error:
运行以下程序时,发现XCan_SelfTes无法获得配置模式。因此需要定位外设到底哪里出现问题。

if (XCan_GetMode(InstancePtr) != XCAN_MODE_CONFIG) {print("test1\r\n");return XST_FAILURE;}

在这里插入图片描述
定位问题到XCan_GetMode,获得状态码为normal mode而不是configuration mode。 其中,xil_printf能够进入参数化输出,print无法实现。这说明模块本身就出现问题,无法在重置后,顺利进入配置模式。

#define XCAN_MODE_CONFIG	0x00000001 /**< Configuration mode */
#define XCAN_MODE_NORMAL	0x00000002 /**< Normal mode */
#define XCAN_MODE_LOOPBACK	0x00000004 /**< Loop Back mode */
#define XCAN_MODE_SLEEP		0x00000008 /**< Sleep mode *//** The device should enter Configuration Mode immediately after the* reset above is finished. Now check the mode and return error code if* it is not Configuration Mode.*/if (XCan_GetMode(InstancePtr) != XCAN_MODE_CONFIG) {value = XCan_GetMode(InstancePtr);xil_printf("getmode error:\r\n");xil_printf("getMode:%d\r\n",value);return XST_FAILURE;}

即使在重置函数后添加EnterMode函数,也无法顺利进入**配置模式。面对这种问题,感觉远处着手。

/* Reset device first */XCan_Reset(InstancePtr);XCan_EnterMode(InstancePtr, XCAN_MODE_CONFIG);/** The device should enter Configuration Mode immediately after the* reset above is finished. Now check the mode and return error code if* it is not Configuration Mode.*/if (XCan_GetMode(InstancePtr) != XCAN_MODE_CONFIG) {print("get mode error\n\r");return XST_FAILURE;}

由于这是一个新的工程,我选择先测试自己编写代码,测试一下PS-CAN外设。在这个基础上,慢慢定位PL-CAN的问题。在初始化PS-CAN时,selftest功能正常,这说明问题主要出现在CAN控制器外部。想到以前在microblaze平台测试CAN IP功能,是通过【学习了自动补全功能,alt+/感觉不错】
在这里插入图片描述
在编写CAN发送程序时,需要了解CAN帧的发送信息结构。按照其CAN帧的库函数逻辑,编写如下代码。可惜,逻辑分析仪现象如前期一样,单个CAN帧周期,却出现多个CAN的解码。虽然可能是波特率较小所致,但是调整波特率为80K时,仍然无法解析。编码值全为1,而且整个解码的长度是跟单个CAN帧周期的长度是一致。换言之,可能在没有CAN收发器的情况下,逻辑分析仪的接收波特率都变小的。虽然实际配置的波特率为500K。~虽然可以利用跳线使用野火开发板的CAN收发器,但是实际没有效果,不知道什么环节出现问题。

//测试can 功能自测status = XCanPs_SelfTest(&Can);print("self test point\r\n");if(status != XST_SUCCESS){print("self test error\n\r");}//配置波特率XCanPs_EnterMode(&Can, XCANPS_MODE_CONFIG);XCanPs_SetBaudRatePrescaler(&Can,3);XCanPs_SetBitTiming(&Can,3,2,15);//发送CAN数据XCanPs_EnterMode(&Can,XCANPS_MODE_NORMAL);while(XCanPs_GetMode(&Can) != XCANPS_MODE_NORMAL){print("normal mode error\r\n");sleep(1);};//装填Can帧数据TxFrame[0] = (u32)XCanPs_CreateIdValue((u32)2000,0,0,0,0);TxFrame[1] = (u32)XCanPs_CreateDlcValue((u32)8);FramePtr = (u8*)(&TxFrame[2]);for(i = 0;i<8;i++){*FramePtr++ = (u8)8;}//CAN发送while(XCanPs_IsTxFifoFull(&Can) == TRUE){print("IsTxFifoFull error\r\n");};XCanPs_Send(&Can,TxFrame);

在这里插入图片描述
在这里插入图片描述

工具问题:
考虑到没有相关工具,打算回到学校,拿到CAN-BUS逻辑分析仪以及CAN收发器之后,再做相关测试。这提醒我在做准备时,掉东西的巨大影响

相关文章:

  • CSS之重绘与回流
  • StringJoiner
  • GEE:关于在GEE平台上进行回归计算的若干问题
  • 3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程
  • 通过 Prometheus 编写 TiDB 巡检脚本(脚本已开源,内附链接)
  • 【Unity】【VR开发】针对VR项目的优化版Unity Build Settings
  • 人工智能学习与实训笔记(四):神经网络之NLP基础—词向量
  • [力扣 Hot100]Day28 两数相加
  • 使用 C++23 从零实现 RISC-V 模拟器(1):最简CPU
  • Java学习第十六节之类与对象的创建和构造器详解
  • 1.初识Tauri
  • ES实战-聚集
  • Rust基础拾遗--辅助功能
  • 惠普打印机驱动安装
  • 项目第一次git commit后如何撤销
  • $translatePartialLoader加载失败及解决方式
  • [数据结构]链表的实现在PHP中
  • [译] 怎样写一个基础的编译器
  • ES10 特性的完整指南
  • Hexo+码云+git快速搭建免费的静态Blog
  • JAVA多线程机制解析-volatilesynchronized
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • leetcode98. Validate Binary Search Tree
  • MySQL-事务管理(基础)
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • TypeScript迭代器
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • vue总结
  • 高程读书笔记 第六章 面向对象程序设计
  • 将 Measurements 和 Units 应用到物理学
  • 理解在java “”i=i++;”所发生的事情
  • 前端面试之闭包
  • 王永庆:技术创新改变教育未来
  • 物联网链路协议
  • 一些关于Rust在2019年的思考
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • zabbix3.2监控linux磁盘IO
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​香农与信息论三大定律
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #HarmonyOS:基础语法
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (三) diretfbrc详解
  • (三)mysql_MYSQL(三)
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .form文件_一篇文章学会文件上传