/**
******************************************************************************
* @file 六叶树CANFD二次开发demo
* @author lys
* @version V1.1.0
* @date 2023
* @brief 用例功能:
* 以六叶树USBCANFDMini为例,设备通道CAN0配置为FD模式,仲裁域波特率为1M,数据波特率
* 5M,CAN总线收到什么数据就回复什么数据。支持:USBCANFDMini/USBCANFD1/USBCANFD2。
* @note
*
* @endverbatim
*
******************************************************************************
* 版权:长沙六叶树教育科技有限公司
* 官网:www.liuyeshu.cn
* 更多资料教程下载见官网
******************************************************************************
修改日期 版本号 修改者 功能描述
2023.04.10 V1.1.0 LYS
----------------------------------------------------------------------------
******************************************************************************
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include "ControlCAN.h"
void exit_can(int flag)
{
//关闭设备
LCAN_CloseDevice(LCAN_USBCANFDMini,0);
exit(0);
}
//进程退出处理,程序调用 exit 或 main函数return 或 最后一个线程正常退出
void exitHandle(void)
{
printf("Demo Stop...\n");
//关闭设备
LCAN_CloseDevice(LCAN_USBCANFDMini,0);
}
int main(void)
{
LCAN_INITFD_CONFIG canInitFDCfgInfo;
UINT devType=LCAN_USBCANFDMini,devIndex = 0,canIndex = 0;
LCAN_CAN_OBJ canObj[32];
LCAN_CANFD_OBJ fdObj[32];
UINT ret, i, j, frameCnt;
printf("Demo Start...\n");
//var init
memset(&canInitFDCfgInfo, 0, sizeof(LCAN_INITFD_CONFIG));
//注册回调函数,程序调用 exit 或 mian函数return 或 最后一个线程正常退出时,捕获退出事件,执行退出处理
atexit(exitHandle);
//打开设备
ret = LCAN_OpenDevice(devType, devIndex);
if(LCAN_STATUS_OK != ret)
{
printf("Device Open Fail...\n");
exit_can(1);
}
//FD MODE
canInitFDCfgInfo.fdEn = 1;
//ISO设置 0:NONE ISO 1:ISO
canInitFDCfgInfo.isoEn = 0;
//仲裁域波特率 1M
canInitFDCfgInfo.abit_timing = 0x01400106;
//数据域波特率 5M
canInitFDCfgInfo.dbit_timing = 0x00800001;
//正常工作模式
canInitFDCfgInfo.mode = 0;
//用例只初始化ch0
ret = LCAN_InitCANFD(devType, devIndex, canIndex, &canInitFDCfgInfo);
if(LCAN_STATUS_OK != ret)
{
printf("Device Init Fail...\n");
exit_can(1);
}
printf("\r\nDEMO 参数:CAN1 ISO:NONE Baud:<1M,5M> 功能:接收到什么数据就回发什么数据。\n");
while(1)
{
//CAN
if(0 < LCAN_GetReceiveNum(devType, devIndex, canIndex, REC_TYPE_CAN))
{
frameCnt = LCAN_Receive(devType, devIndex, canIndex, canObj, 32, 50);
if(0 < frameCnt)
{
//print
printf("---can recv:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
printf("ID: %08x DataLen:%02x ExternFlag:%d RemoteFlag: %d data:",
canObj[i].id&0x1FFFFFFF, canObj[i].dataLen,
canObj[i].externFlag, canObj[i].remoteFlag);
for (j=0; j< canObj[i].dataLen; j++) {
printf("%02x ", canObj[i].data[j]);
}
printf("\n");
}
//send
printf ("---can send:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
//正常发送模式
canObj[i].sendType = 0;
}
LCAN_Transmit(devType, devIndex, canIndex, canObj, frameCnt);
}
}
//FD
if(0 < LCAN_GetReceiveNum(devType, devIndex, canIndex, REC_TYPE_FD))
{
frameCnt = LCAN_ReceiveFD(devType, devIndex, canIndex, fdObj, 32, 50);
if(0 < frameCnt)
{
//print
printf("---fd recv:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
printf("ID: %08x DataLen:%02x ExternFlag:%d RemoteFlag: %d data:",
fdObj[i].id&0x1FFFFFFF, fdObj[i].dataLen,
fdObj[i].externFlag, fdObj[i].remoteFlag);
for (j=0; j< fdObj[i].dataLen; j++) {
printf("%02x ", fdObj[i].data[j]);
}
printf("\n");
}
//send
printf ("---fd send:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
//正常发送模式
fdObj[i].sendType = 0;
}
LCAN_TransmitFD(devType, devIndex, canIndex, fdObj, frameCnt);
}
}
}
return 0;
}
六叶树usbcan适配器Linux系统二次开发用例,lysDemo-aarch64-linux-gnu.tar.gz
需积分: 0 199 浏览量
更新于2023-07-18
收藏 2.29MB GZ 举报
在IT行业中,Linux系统因其开源、稳定和高效的特点被广泛应用于服务器、嵌入式设备以及各种二次开发项目中。六叶树(SixLeafTree)USB-CAN适配器是一款能够连接计算机与CAN总线的硬件设备,常用于汽车电子、自动化、物联网等领域,通过它可以在Linux系统上进行CAN总线的数据传输和分析。本篇将详细介绍基于Linux系统,使用六叶树USB-CAN适配器进行二次开发的相关知识。
"lysDemo-aarch64-linux-gnu"这部分标题和描述中提到的,表明这是一个面向aarch64架构(通常用于ARM64处理器)的Linux系统,并且采用了GNU工具链进行编译。这意味着该软件包可能包含针对这种平台优化的驱动程序和示例代码。
在Linux系统中,驱动程序是操作系统与硬件交互的关键部分。对于USB-CAN适配器,需要一个特殊的驱动程序来识别和管理设备。六叶树USB-CAN适配器的驱动程序可能已经集成在Linux内核中,或者需要作为外接模块加载。在二次开发过程中,理解如何安装、配置和使用这个驱动是至关重要的。
lysDemo文件很可能包含了以下内容:
1. **源代码**:可能是C或C++编写,用于与USB-CAN适配器交互的用户空间应用程序。这可能包括了读取和写入CAN消息的函数,以及错误处理和调试功能。
2. **编译脚本**:为了在aarch64 Linux环境下构建代码,可能包含Makefile或其他构建脚本,指导用户如何编译和链接lysDemo应用。
3. **配置文件**:可能有设备配置文件,用于设置CAN接口的参数,如波特率、数据位、停止位等。
4. **示例代码**:提供给开发者参考,展示如何初始化设备、发送和接收CAN消息的基本操作。
5. **文档**:可能包括README文件或其他文档,详细解释如何使用lysDemo,以及对硬件和软件环境的要求。
在使用lysDemo进行二次开发时,开发者需要:
1. **安装驱动**:确保适配器的驱动正确安装并工作,如果需要,可以手动加载驱动模块。
2. **编译lysDemo**:根据提供的编译脚本,将lysDemo源代码编译为可执行文件。
3. **配置CAN接口**:使用`ifconfig`或专用的CAN工具(如`candump`、`canconfig`)设置CAN接口的参数。
4. **测试通讯**:运行lysDemo,发送测试数据并接收来自CAN总线的响应,验证通信功能。
5. **集成到项目**:将lysDemo的功能集成到自己的应用中,可能需要修改源代码以适应特定的需求。
在Linux系统中进行USB-CAN适配器的二次开发涉及了系统编程、网络通信、设备驱动等多个方面的知识,对于熟悉这些领域的开发者来说,六叶树的lysDemo是一个很好的学习和实践资源。通过深入理解和应用这些知识,可以实现与CAN总线设备的有效通信,从而在汽车电子、工业控制等领域实现复杂的功能。
六叶树
- 粉丝: 79
- 资源: 50
最新资源
- 基于HTML、CSS、JavaScript的easy云盘前端设计源码
- 基于Java、Vue等技术的优加任务管理系统设计源码
- matlab simulink半车主动悬架建模:基于ADRC(自抗扰控制)的主动悬架控制 主体模型为半车主动悬架,采取ADRC控制 输出为车身加速度,悬架动挠度,轮胎动变形 默认输入为正弦路面输
- 基于PHP和Vue的河马跑腿私域配送团队小程序设计源码
- Linux RTL8761b蓝牙驱动 Ubuntu 20.04可用
- 移动磁铁在线圈中产生感应电压分析与仿真 COMSOL 6.0案例还原及 此模型模拟磁铁在线圈中的运动,并计算感应电压,磁铁的位移很明显,因此使用动网格和滑移网格
- 基于TypeScript和JavaScript的核桃健康App设计源码
- 永磁同步电机全阶自适应观测器 自适应全阶观测器MATLAB仿真,高速电机,基础版15.9,改进版49(改进版波形精美,易于出图)下面图为改进版,低速高速都可以,最高5W转每分
- 基于Python生态的第三方库管理器设计源码
- 基于three.js和Vue3的简易智慧城市设计源码
- simulink永磁同步风机风光储VSG一次调频,风机为PMSG,风光储并网系统,频率波形和风机VSG出力如图 网侧VSG同步机控制
- 基于Vue框架的汽修门店SaaS系统设计源码
- 基于Kotlin语言的Android作业设计源码
- mmc分布式储能 恒功率控制 恒电压控制 无缝切
- 基于微信小程序的PowerLib图书馆门户小程序设计源码
- 前端分析-2023071100789