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

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式主板的选型与应用

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

    一文带你了解嵌入式主板

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

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

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

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

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

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

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

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

    当代信息技术体系中,嵌入式系统接口作为数据交互的核心基础设施,构成了设备互联的神经中枢。基于标准化通信协议与接口规范的技术架构,实现了异构设
    的头像 发表于 04-30 09:34 1889次阅读
    ElfBoard<b class='flag-5'>嵌入式</b>教育科普|ADC<b class='flag-5'>接口</b>全面解析

    嵌入式主板开发详细指南

    嵌入式主板开发涉及硬件设计、软件集成、系统优化等多个环节,需要结合具体应用场景进行深度定制。以下是嵌入式主板开发的详细指南,涵盖关键步骤、工具、挑战及实际案例:一、开发流程与关键步骤1
    的头像 发表于 04-02 11:35 931次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>开发详细指南

    高可靠性嵌入式主板设计

    设计直接影响整个系统的稳定性和寿命。因此,设计高可靠性的嵌入式主板不仅是技术挑战,也是提高产品竞争力的关键因素。本文将深入探讨高可靠性嵌入式主板
    的头像 发表于 03-25 15:11 808次阅读
    高可靠性<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>设计

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

    在现代科技领域,嵌入式系统接口作为信息交互的核心载体,发挥着至关重要的作用,各类接口通过预定义的通信协议与标准化规范,可以实现设备间的精准数据传输与智能控制。 作为
    的头像 发表于 03-05 11:11 2734次阅读
    <b class='flag-5'>嵌入式</b>教育科普|GPIO<b class='flag-5'>接口</b>全面解析

    嵌入式主板选型与应用指南

    嵌入式主板是专为嵌入式系统设计的核心硬件平台,广泛应用于工业控制、物联网、医疗设备等领域。以下是关于嵌入式主板的详细介绍:1.
    的头像 发表于 02-27 14:53 936次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>选型与应用指南

    小身材大能量:解读小尺寸嵌入式主板

    此前,已经带大家认识了嵌入式主板的尺寸版型,相信大家对此已有了初步印象。在科技日新月异的当下,各类设备都朝着更小体积、更高性能的方向发展。小尺寸嵌入式主板正悄无声息改变着我们的生活与商
    的头像 发表于 02-17 18:02 992次阅读
    小身材大能量:解读小尺寸<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>

    盘点无风扇嵌入式主板应用优势

    在科技飞速发展的今天,嵌入式主板在各个领域发挥着重要作用。而无风扇嵌入式主板以独特优势在工业自动化、医疗设备和智能交通等领域广泛应用。今天,就让我们一起深入了解无风扇
    的头像 发表于 02-15 18:04 651次阅读
    盘点无风扇<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>应用优势

    嵌入式主板:智能设备的“大脑”,驱动未来无限可能

    在当今这个万物互联的时代,嵌入式主板作为智能设备的“大脑”,正悄然改变着我们的生活。从智能家居到工业自动化,从医疗设备到交通系统,嵌入式主板无处不在,为各种应用场景提供强大的计算和控制
    的头像 发表于 02-07 11:34 826次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>:智能设备的“大脑”,驱动未来无限可能

    嵌入式主板的概述与发展

    随着科技的迅猛发展,嵌入式系统在现代电子产品中扮演着越来越重要的角色。嵌入式主板作为嵌入式系统的核心组件之一,承担着控制、处理和通讯等多种功
    的头像 发表于 01-13 16:30 1184次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>的概述与发展

    ARM架构嵌入式主板特点

    嵌入式主板可以理解为嵌入在设备中用于控制和数据处理的CPU板,也就是设备的“大脑”。当主板嵌入到设备中,当然对
    的头像 发表于 12-31 16:03 1839次阅读
    ARM架构<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>特点