0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术EM9170嵌入式主板CAN通讯接口使用说明

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-15 11:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

英创公司推出的基于WinCE 6.0操作系统嵌入式工控板卡EM9170,板上带有2路独立的CAN总线接口,均为FlexCAN模块。FlexCAN完全支持CAN 2.0B协议,支持对于标准帧和扩展帧的收发,同时FlexCAN还支持高优先级的报文优先发送的机制,可有效改善实时控制的相应时间。EM9170板上输出的两路CAN收发信号均为TTL电平,在实际使用时需要在外围电路中加上CAN驱动芯片,具体可以参考英创公司提供的“EM9170开发底板评估手册”。EM9170内核操作系统中已经实现FlexCAN底层驱动,系统一旦上电系统,将自动加载两路FlexCAN的驱动程序,客户在基于EM9170上编写CAN应用程序时,均可按照WinCE流式设备,打开关闭文件的方式对CAN接口进行操作,本文将着重介绍基于EM9170上FlexCAN的使用方法。

数据结构

EM9170的CAN通讯提供了两种数据结构,定义在flex_can.h文件中。一个是CAN通讯数据包的结构,一个是CAN通讯中对于滤波器的设置结构。

CAN数据包结构的定义如下:

typedef struct
{
// 定义数据帧的类型:0 - 标准帧;1 - 扩展帧
DWORD dwType;
// 标准帧或扩展帧的CAN ID。
// bit 0-28: CAN identifier (11/29 bit),其中标准帧11bit,扩展帧29bit
DWORD dwID;
// = 0:数据帧;= 1:远程帧
DWORD dwRTR;
// 发送优先级= 0 - 7,为最高优先级,对接收数据包无意义
DWORD dwPrio;
// 数据长度= 0 - 8
DWORD dwDatLen;
// 数据字节
UCHAR ucDat[8];
}CAN_PACKET, *PCAN_PACKET;

CAN滤波器数据结构的定义如下:

typedef struct
{
// 组号,恒为0
DWORD dwGroup;
// 定义数据帧的类型:0 - 标准帧;1 - 扩展帧
DWORD dwType;
// 定义标准帧或扩展帧需要比较过滤的CAN ID。
// bit 0-28: CAN identifier (11/29 bit),其中标准帧11bit,扩展帧29bit
DWORD dwID;
// = 0:数据帧;= 1:远程帧
DWORD dwRTR;
// 定义和dwID对应的需要检查或不检查的Mask位
// bit 0-28: (11/29 bit),其中标准帧11bit,扩展帧29bit
// = 0:该位不检查;= 1:该位须检查
DWORD dwMask;
}CAN_FILTER, *PCAN_FILTER;

滤波器数据结构设置距离如下:

CAN_FILTER Filter;
Filter.dwGroup = 0; // 保留,恒为0
Filter.dwType = CAN_PACKET_TYPE_STANDARD; // 标准帧
Filter.dwID = 0x00000002; // 设定的接收ID
Filter.dwMask = 0x00000003; // 检查接收报文ID的低2位
Filter.dwRTR = 0; // 数据帧

设置的Filter结构,表明对于接收到的CAN标准帧报文只检查报文CAN ID的低两位的值,这两位的值应该和Filter.dwID所设定的值相符合,即:

CAN_ID & Filter.dwMask = Filter.dwID

因此在上例中,所接收的CAN报文的ID的低两位必须为0x02。

CAN_API函数

英创公司提供的CAN通讯接口的驱动程序采用标准的驱动程序,和串口操作类似用户可以用标准的打开文件CreateFile( )、关闭文件CloseHandle( )的方式,来打开该CAN设备,数据的收发可调用ReadFile() WrtieFile( ),另外的一些对CAN操作通讯相关参数的设置可以通过调用DeviceIOCTL( )来实现。为了方便客户的使用,在CAN驱动程序的基础上,以源码的形式为客户封装了一套简单实用的API函数。各个函数的定义在can_api.h文件下,在该头文件中对于各个API函数均有相应的中文说明。

// 功能描述:启动CAN设备端口
// 输入参数hDevice: 已创建CAN流式设备的句柄。
// 返回值= TRUE: 启动CAN设备端口成功。
// = FALSE: 启动CAN设备端口失败。
BOOL CAN_StartChip(HANDLE hDevice);

// 功能描述:停止CAN设备端口。
// 输入参数hDevice: 已创建CAN流式设备的句柄。
// 返回值= TRUE: 停止CAN设备端口成功。
// = FALSE: 停止CAN设备端口失败。
BOOL CAN_StopChip(HANDLE hDevice);

// 功能描述: 软件复位CAN设备端口。
// 输入参数hDevice: 已创建CAN流式设备的句柄。
// 返回值 = TRUE: 复位CAN设备端口成功。
// = FALSE: 复位CAN设备端口失败。
BOOL CAN_SoftReset(HANDLE hDevice);

// 功能描述:设置CAN设备通讯的波特率。
// 输入参数hDevice: 已创建CAN流式设备的句柄。
// CAN_TIMING_10K : 10Kbps
// CAN_TIMING_20K : 20Kbps
// CAN_TIMING_50K : 50bps
// CAN_TIMING_60K : 60bps
// CAN_TIMING_100K : 100bps
// CAN_TIMING_125K : 125Kbps
// CAN_TIMING_250K : 250Kbps
// CAN_TIMING_500K : 500bps
// CAN_TIMING_1000K: 1Mbps
// 返回值= TRUE: 波特率设置成功。
// = FALSE: 波特率设置失败。
BOOL CAN_SetBaudRate(HANDLE hDevice, DWORD dwBaudRate );

// 功能描述: 设置CAN设备通讯接收过滤器配置。
// 输入参数hDevice: 已创建CAN流式设备的句柄。
// pFilter: 根据通讯报文格式定义过滤器的配置。
// 返回值= TRUE: 配置设置成功。
// = FALSE: 配置设置失败。
BOOL CAN_SetFilter( HANDLE hDevice, PCAN_FILTER pFilter );

// 功能描述: 获取CAN设备通讯事件
// 输入参数hDevice: 已创建CAN流式设备的句柄。
// dwTimeout: 超时时间,单位为ms
// 输出参数
// lpEvtMask: 得到的CAN事件类型= 1:接收到CAN数据包
// = 2:CAN错误事件
// 返回值= TRUE: 调用成功。
// = FALSE: 调用失败。
BOOL WaitCANEvent( HANDLE hDevice, LPDWORD lpEvtMask, DWORD dwTimeout );

// 功能描述: 清空CAN设备通讯接收、发送BUFFER。
// 输入参数hDevice: 已创建CAN流式设备的句柄。
// 返回值= TRUE: 设置成功。
BOOL CAN_Purge( HANDLE hDevice );

CAN出错处理

在CAN实际应用数据通讯过程中,可能会遇到CAN通讯出错的情况,调用API函数WaitCANEvent( HANDLE hDevice, LPDWORD lpEvtMask, DWORD dwTimeout )可以获取到CAN通讯出错的事件,对CAN的错误事件的处理可采用重启CAN设备的操作。

if( WaitCANEvent( pCAN->m_hCAN, &dwEvtMask, 2000 ) )
{
…..
if( dwEvtMask & 0x02 ) // 错误事件
{
CAN_StopChip( pCAN->m_hCAN );
CAN_StartChip( pCAN->m_hCAN );
}
}

在英创公司提供的应用光盘中有具体CAN接口的测试代码,可供客户参考测试。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    37182
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开发者必备:嵌入式常用外设接口电路参考指南

    接口的参考电路图与说明,助你快速上手。01GPIO(通用输入输出)GPIO是嵌入式系统最基础的接口,可用于按键、LED、继电器等简单外设。参考电路特点:输入:上拉或
    的头像 发表于 01-09 19:03 959次阅读
    开发者必备:<b class='flag-5'>嵌入式</b>常用外设<b class='flag-5'>接口</b>电路参考指南

    arm嵌入式主板优缺点

    嵌入式主板嵌入在设备里面做控制、数据处理使用的CPU板 ,常见的有两类,即基于X86的嵌入式主板和基于RISC的ARM
    发表于 01-08 07:08

    系统嵌入式的学习路线

    嵌入式技术是各种电子产品的核心技术,也是工业4.0、远程医疗、3D打印等新兴产业的核心技术,具有广阔的发展前景。很多计算机、电子信息类专业的
    发表于 12-16 07:49

    ARM嵌入式这样学

    工程师的的终点只有一个,就是真正的技术专家。 嵌入式技术大体上可分为编程语言,内核技术,操作系统,总线接口,系统集成。其实细心的可以发现,
    发表于 12-04 07:48

    串行接口MRAM存储芯片面向工业物联网和嵌入式系统的应用

    尚微电子所代理的Everspin xSPI串行接口MRAM存储芯片,基于最新的JEDEC xSPI标准与独有的STT-MRAM技术构建,这款串行接口MRAM存储芯片可全面替代传统SR
    的头像 发表于 11-05 15:31 574次阅读

    嵌入式主板的选型与应用

    一、嵌入式主板核心元器件选型的关键考量在嵌入式主板设计中,核心元器件的选型直接决定产品性能与可靠性,需结合场景需求精准匹配。以处理器为例,除算力与功耗外,还需关注工业级温度范围——如
    的头像 发表于 11-03 17:20 917次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>的选型与应用

    嵌入式需要掌握哪些核心技能?

    /网络设备)、中断底半部处理,适用于高端嵌入式设备。 企业需求:RTOS是60%岗位的核心要求,Linux开发需求随项目复杂度增长。 4)通信协议与接口 基础协议:UART、SPI、I2C、CAN总线
    发表于 10-21 16:25

    嵌入式接口通识知识之CAN接口

    1.1 基础概念CAN的全称是Controller Area Network,译为控制器区域网络,是一种用于车辆、电力系统、工业设备等嵌入式系统的半双工异步串行通信协议和物理接口CAN
    发表于 08-21 16:49

    入行嵌入式应该怎么准备?

    想入行嵌入式该怎么准备。很能理解大家对于嵌入式的关注,嵌入式系统是当今科技领域中的重要组成部分,它存在于我们生活的方方面面,各行各业。智能化时代的到来也让嵌入式
    发表于 08-06 10:34

    一文带你了解嵌入式主板

    嵌入式主板是专为嵌入式系统设计的计算机主板。它与我们常见的台式机或笔记本电脑主板有着显著的区别,核心在于它不是为了通用计算,而是为了执行特定
    的头像 发表于 06-30 16:12 946次阅读
    一文带你了解<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>

    嵌入式主板详解与选购指南

    什么是嵌入式主板嵌入式主板是专为嵌入式系统设计的核心计算平台。它与我们日常使用的台式机或笔记本电脑主板
    的头像 发表于 06-06 13:23 1030次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>详解与选购指南

    PROFINET接口嵌入式解决方案

    嵌入式PROFINET RT IRT MRP接口模块PNS-424为需要PROFINET通信功能的用户,提供PROFINET从站接口。 用户可通过串行接口,实现高速度,低延时过程数据传
    的头像 发表于 06-04 15:26 830次阅读
    PROFINET<b class='flag-5'>接口</b><b class='flag-5'>嵌入式</b>解决方案

    ElfBoard嵌入式教育科普|CAN接口全面解析

    CAN的全称是Controller Area Network,译为控制器区域网络,是一种用于车辆、电力系统、工业设备等嵌入式系统的半双工异步串行通信协议和物理接口
    的头像 发表于 05-28 16:30 2873次阅读
    ElfBoard<b class='flag-5'>嵌入式</b>教育科普|<b class='flag-5'>CAN</b><b class='flag-5'>接口</b>全面解析

    嵌入式主板特点与应用场景解析

    嵌入式主板(EmbeddedMotherboard)是专为嵌入式系统设计的重要硬件平台,通常集成处理器、内存、存储、接口等关键组件,用于控制和管理特定设备或应用。与通用计算机
    的头像 发表于 05-26 15:12 1037次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>特点与应用场景解析

    在金融发展领域,嵌入式主板有什么优点?

    在金融发展领域,嵌入式主板能够有力推动金融行业的智能化与高效化进程。主板的强大计算能力可以保障业务高效运行。
    的头像 发表于 05-19 09:22 857次阅读