zynq 7000 sdk下裸机can(ps/pl) 调试

简介: zynq 7000 sdk下裸机can(ps/pl) 调试

1. SDK下打开system.mss文件,如下图所示,import examples导入polled相关例程。


微信图片_20230117214527.png


因为我们的设备上有两个can,一个ps端一个pl端的,原理图在can收发器侧一样。


微信图片_20230117214536.png


2. ps 端参调试

确定逻辑对ps can的clock配置值,为100M,参考《ug585-Zynq-7000-TRM.pdf》手册,计算can波特率。


微信图片_20230117214541.png


波特率=100M/ ((49 +1)*(3 +15 +2)) = 100k


int CanPsPolledExample(u16 DeviceId)
{
  int Status;
  XCanPs *CanInstPtr = &Can;
  XCanPs_Config *ConfigPtr;
  /*
   * Initialize the Can device.
   */
  ConfigPtr = XCanPs_LookupConfig(DeviceId);
  if (CanInstPtr == NULL) {
    return XST_FAILURE;
  }
  Status = XCanPs_CfgInitialize(CanInstPtr,
          ConfigPtr,
          ConfigPtr->BaseAddr);
  if (Status != XST_SUCCESS) {
    return XST_FAILURE;
  }
  /*
   * Run self-test on the device, which verifies basic sanity of the
   * device and the driver.
   */
  Status = XCanPs_SelfTest(CanInstPtr);
  if (Status != XST_SUCCESS) {
    return XST_FAILURE;
  }
  xil_printf("SelfTest successfuly \r\n\r\n");
  /*
   * Enter Configuration Mode so we can setup Baud Rate Prescaler
   * Register (BRPR) and Bit Timing Register (BTR).
   */
  XCanPs_EnterMode(CanInstPtr, XCANPS_MODE_CONFIG);
  while(XCanPs_GetMode(CanInstPtr) != XCANPS_MODE_CONFIG);
  /*
   * Setup Baud Rate Prescaler Register (BRPR) and
   * Bit Timing Register (BTR). ps_can_clock = 100M .
   */
  XCanPs_SetBaudRatePrescaler(CanInstPtr, /*TEST_BRPR_BAUD_PRESCALAR*/ 49);
  XCanPs_SetBitTiming(CanInstPtr, TEST_BTR_SYNCJUMPWIDTH,
        TEST_BTR_SECOND_TIMESEGMENT,
        TEST_BTR_FIRST_TIMESEGMENT);
  /*
   * Enter Loop Back Mode.
   */
#define ps_can_clock 100000000  //100M
  XCanPs_EnterMode(CanInstPtr, XCANPS_MODE_SLEEP);
  while(XCanPs_GetMode(CanInstPtr) != XCANPS_MODE_SLEEP);
  xil_printf("ps can bitRate: %lu bps\r\n", ps_can_clock/((49+1)* (3+15+2)));
  /*
   * Send a frame, receive the frame via the loop back and verify its
   * contents.
   */
  Status = SendFrame(CanInstPtr);
  if (Status != XST_SUCCESS) {
    return Status;
  }
  xil_printf("recving ....... \r\n");
  while(1){
  Status = RecvFrame(CanInstPtr);
  }
  return Status;
}

can消息格式:有效负载为DWR, DW2R


微信图片_20230117214546.png


确定发送id


微信图片_20230117214550.png


2. 使用宇泰的 8251 usb can设备,按照说明书设置好can卡,波特率为100k.


sdk启动debug,上来就会发送一帧数据个给外部can设备,使用宇泰can上位机给板子发数据,板子侧添加收数据打印信息。


3. pl 侧can和ps测试过程一样,需要注意can clock是多少,去计算can波特率


目录
相关文章
|
4月前
|
人工智能 Java 测试技术
地址标准化通过Java sdk接入通用经纬度查询之前已经调试成功,近期一直返回超时错误
地址标准化通过Java sdk接入通用经纬度查询之前已经调试成功,近期一直返回超时错误
37 1
|
8月前
|
网络协议 Java 应用服务中间件
支付宝SDK接口调试- cpolar内网穿透工具实现公网地址调试
支付宝SDK接口调试- cpolar内网穿透工具实现公网地址调试
97 0
|
8月前
|
网络协议 Java 应用服务中间件
【服务器】支付宝SDK接口调试
【服务器】支付宝SDK接口调试
425 0
|
算法 IDE 开发工具
5.4 芯片SDK开发:算法工程的调试和使用|学习笔记
快速学习5.4 芯片SDK开发:算法工程的调试和使用
329 1
5.4 芯片SDK开发:算法工程的调试和使用|学习笔记
|
存储 开发工具 vr&ar
ZYNQ-基于BRAM的PS和PL数据交互
ZYNQ-基于BRAM的PS和PL数据交互
597 0
ZYNQ-基于BRAM的PS和PL数据交互
|
资源调度 监控 JavaScript
Sentry 官方 JavaScript SDK 简介与调试指南
Sentry 官方 JavaScript SDK 简介与调试指南
394 0
Sentry 官方 JavaScript SDK 简介与调试指南
|
开发工具
autodesk fbx sdk sample里面的工程无法调试解决方法
1、项目属性->常规中的目标文件名改为1 2、链接器->调试中的生成程序数据库文件改成:$(OutDir)1.pdb 3、连接器->常规中的输出文件改成:$(OutDir)1.exe   PS:我预估不能调试的原因是是生成的pdb被覆盖了,不过不知道哪里设置,这个方法能解决问题先用了,哪位有...
1366 0
|
开发工具 iOS开发
IOS调试下载的demo出现说项目不能在什么的SDK调试
IOS调试下载的demo出现说项目不能在什么的SDK调试,设置下baseSDk是最近的SDK
584 0

热门文章

最新文章

相关产品

  • 云迁移中心