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

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

3天内不再提示

如何利用英创ARM9嵌入式主板快速构建双CAN接口的方案

英创信息技术 作者:英创信息技术 2019-10-08 11:37 次阅读

CAN(Controller Area Network)即控制器局域网,由于具有高性能、高可靠性以及简单的网络结构,在工业系统中越来越受到人们的重视,并迅速成为了目前国际上应用最广泛的现场总线之一。

英创提供的EM9000系列ARM9嵌入式主板,包括EM9000、EM9260、EM9360等多种型号,都预装了正版WinCE操作系统,且带有标准CAN通讯接口。与板上其他标准通讯接口一样,英创公司为所有EM9000系列嵌入式主板的CAN接口配置了标准的WinCE流式驱动程序,应用程序可以通过打开文件的进行读写的标准方式实现对CAN总线接口的数据通讯。本文侧重于介绍CAN通讯接口,下面以EM9000嵌入式主板为例,介绍如何利用英创的ARM9嵌入式主板快速构建双CAN接口的方案。

硬件组成

英创提供的系列ARM9嵌入式主板,除EM9160嵌入式主板外,所有的ARM9主板上均可直接支持一个CAN接口。ETA701是英创公司提供的基于ISA总线扩展的一个CAN模块,可以通过ISA总线外接一个ETA701模块,即可构成一个双CAN系统。

EM9000嵌入式主板和ETA701模块提供的CAN均采用了PHILIPS半导体公司的SJA1000T CAN总线控制器,SJA1000是一款独立的控制器,主要用于汽车和一般工业环境中的控制器局域网络(CAN)芯片。它是PHILIPS半导体PCA82C200 CAN控制器(BasicCAN)的替代产品,而且它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN 2.0B协议。

EM9000嵌入式主板和ETA701模块的CAN通讯接口可提供高达1Mbps的数据传输速率,当采用5Kbps的的数据传输速率时其通讯距离最高可达到10KM。硬件的错误检定特性也增强了CAN的抗电磁干扰能力,这给数据的远程可靠传输提供了有利保证。

在EM9000嵌入式主板和ETA701模块的CAN通讯接口根据用户的需要分为两种:一种带光电隔离,一种不带光电隔离。带光电隔离CAN总线通讯模块的CAN收发器端的所有信号电源与其它部分完全隔离,可承受至少1Kv(有效值)的电压冲击。

CAN接口驱动函数

一、CAN报文的帧格式

在CAN2.0B中存在两种不同的帧格式,其主要的区别在于标识符的长度,具有11位标识符的帧称为标准帧,而包括有29位标识符的帧称为扩展帧。下面分别介绍数据帧的格式。

1、CAN2.0B标准帧

CAN标准帧信息为11个字节,包括两部分:信息和数据部分。前3个字节为信息部分,如图所示:

注:

1、字节1为帧信息。D7位表示帧格式,在标准帧中,FF=0;D6位表示帧的类型,RTR=0表示为数据帧,RTR=1表示为远程帧,在一般的数据通讯中,只使用数据帧;DLC表示数据帧实际的数据长度。

2、字节2、字节3为报文识别码,11位有效。

3、字节4~字节11为数据帧的实际数据,远程帧时无效。

2、CAN2.0B扩展帧

CAN标准帧信息为13个字节,包括两部分:信息和数据部分。前5个字节为信息部分,如图所示:

注:

1、字节1为帧信息。D7位表示帧格式,在扩展帧中,FF=1;D6位表示帧的类型,RTR=0表示为数据帧,RTR=1表示为远程帧;DLC表示数据帧实际的数据长度。

2、字节2~字节5为报文识别码,29位有效。

3、字节6~字节13为数据帧的实际数据,远程帧时无效。

二、启动CAN通讯接口

英创公司提供的CAN通讯接口的驱动程序采用的是WinCE下流式驱动程序(Stream Device Driver),并在此驱动程序的基础上为客户封装了一套简单实用的API函数。各个函数的定义在can_api.h文件下,在该头文件中对于各个API函数均有相应的中文说明。

作为流式接口函数通常和文件系统的API函数(如CreateFile)紧密匹配的,因此在使用英创提供的CAN接口的API函数时,首先需要调用CreateFile(…)来获取CAN接口设备的句柄handle,如使用CAN1通讯口,可以调用以下函数:

m_hCAN=CreateFile(_T(“CAN1:”), GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING, 0, NULL);

对于CAN2通讯接口,只需将其中的名称换成 _T(“CAN2:”)即可。在创建CAN设备得到有效的handle之后,就可以调用can_api.h中定义的相应函数来启动CAN设备接口。

BOOL CAN_StartChip (HANDLE hDevice);

至此CAN通讯接口进入工作模式。

三、设置CAN通讯接口参数

在进行CAN数据通讯之前,需要设置和CAN通讯相关的一些参数,包括CAN通讯的波特率设置以及对接收过滤器的设置。

BOOL CAN_SetBaudRate(HANDLE hDevice, BYTE *index);

// 用于设置CAN通讯的波特率,波特率的设置范围包括:10kbps~1Mbps。具体的定义请参见can_api.h文件中的注释说明

通过配置接收过滤器,CAN通讯接口可以实现只接收标识符也接收过滤器预设值相一致的报文。接收过滤器由接收码寄存器ACRn和接收屏蔽码寄存器AMRn来定义的,还可以选择两种不同的过滤器模式,单过滤器模式或者双过滤器模式。关于ACR、AMR中各位的定义,请参见SJA1000的数据手册,这里就不再赘述。在英创提供的API函数中,用户可以调用以下函数来实现接收过滤器的设置:

BOOL CAN_SetGlobalAcceptanceFilter( HANDLE hDevice, BYTE *AcceptanceFilter, BYTE size)

四、CAN通讯接口的数据收发

在英创公司提供的双CAN方案中,CAN通讯的数据收发均采用的中断方式,驱动程序中已自动完成了数据的收发,以及内部定义的CAN接收缓冲区和发送缓冲区的管理。对于用户开发应用程序来说,只需要调用英创公司提供的CAN通讯API函数中的收发函数即可。下图为CAN驱动程序的数据流和事件的关系图。

在进行CAN通讯应用程序的开发时,对于CAN通讯数据接收线程可以采用两种方式:一种可以采用定时查询,即定时调用函数CAN_GetNextReceivedFrame( …)检测是否有接收到CAN报文数据;一种可以利用操作系统的消息机制,采用事件响应的方式,一旦硬件接收的数据报文,底层的驱动接收程序会自动读取报文,同时发送一个接收事件。作为应用程序的接收线程在等待到该事件后,调用CAN_GetNextReceivedFrame(…)即可进行CAN数据报文的读取。需要注意的是函数CAN_GetNextReceivedFrame每执行一次,只是读取了一帧CAN数据报文,如果在应用程序中需要将最新的数据全部读出,只需反复调用该函数,直到该函数的返回值为FALSE。

接收线程部分代码:

DWORD CEM9000_CAN::ReadThreadFunc( LPVOID lparam )

{

CEM9000_CAN *ceCAN = (CEM9000_CAN*)lparam;

BOOL bResult;

while( 1 )

{

if(WaitForSingleObject(ceCAN->m_hReadCloseEvent,0 )==WAIT_OBJECT_0 )

{

break;

}

// 等待接收事件触发,使用以下代码

WaitForSingleObject( ceCAN->m_hRxEvent, INFINITE );

// 若采用定时查询,则调用Sleep(..)即可,Sleep的时间由应用程序确定

// Sleep( 50 );

ceCAN->m_nRxCounter = 0;

for( ; ; )

{

// 读取已接收的所有数据帧

bResult=CAN_GetNextReceivedFrame(ceCAN->m_hCAN,

&ceCAN->RxMFrame[ceCAN->m_nRxCounter] );

if( !bResult )

{

break;

}

ceCAN->m_nRxCounter++;

}

if(ceCAN->m_nRxCounter>0 )

{

// 调用回调函数,进行必要的数据处理

ceCAN->OnRead( ceCAN->m_pCANOwner );

}

}

return 0;

}

CAN数据报文的发送比较简单,应用程序直接调用函数CAN_SendFrame(…)即可。

英创公司针对CAN总线的应用提供图形化的测试程序,用户可以直接利用该程序进行CAN接口通讯基本收发测试。EM9000下的测试界面如下图所示:

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

    关注

    2

    文章

    290

    浏览量

    54983
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35198
  • CAN接口
    +关注

    关注

    3

    文章

    77

    浏览量

    25611
收藏 人收藏

    评论

    相关推荐

    嵌入式主板的无线通讯解决方案

    WiFi模块。ETA6210模块继续保持了PPP拨号模式,使得无论是Linux平台的主板还是CE平台的主板,都能方便的使用。  下表列出了当前
    发表于 03-24 14:00

    ARM9嵌入式主板看门狗的使用方法

    ARM9嵌入式主板Watchdog的使用
    发表于 09-26 10:06

    VS2005与ARM9嵌入式模块连接和调试步骤

    使用VS2005连接和调试ARM9嵌入式模块
    发表于 09-27 13:05

    ARM9嵌入式技术及Linux实验指导

    ARM9嵌入式技术及
    发表于 02-09 15:19 70次下载

    ARM9嵌入式USB技术开发

    ARM9嵌入式USB技术开发
    发表于 10-31 09:02 5次下载
    <b class='flag-5'>ARM9</b>的<b class='flag-5'>嵌入式</b>USB技术开发

    信息技术VS2005调试ARM9核心板简介

    公司自2007年开始陆续推出一系列以ARM9 CPU为核心的嵌入式主板(如EM9000、EM9260),这些高性能的工控
    的头像 发表于 10-31 15:03 1847次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术VS2005调试<b class='flag-5'>ARM9</b>核心板简介

    信息技术9260系列嵌入式主板调试浅谈

    公司自2007年开始陆续推出一系列以ARM9 CPU为核心的嵌入式主板,这些高性能的工控主板
    的头像 发表于 11-01 09:24 2255次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术9260系列<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>调试浅谈

    信息技术ARM9工控主板WinCE应用程序远程控制应用

    公司推出的ARM9嵌入式工控主板产品系列,均预装了正版的WinCE5.0操作系统。微软的WINCE实时多任务操作系统是
    的头像 发表于 11-04 09:28 1709次阅读

    信息技术ARM9工控主板内嵌AD概述

    公司推出的ARM9 嵌入式工控主板产品系列,均预装了正版WinCE5.0 操作系统。
    的头像 发表于 11-04 09:43 2599次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>ARM9</b>工控<b class='flag-5'>主板</b>内嵌AD概述

    信息技术ARM9主板上运行案例解析

    今年(2009年)的市场活动中,为了让客户更好地完成产品应用开发,向第一次购买
    的头像 发表于 11-12 10:20 1388次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>ARM9</b><b class='flag-5'>主板</b>上运行案例解析

    信息技术CAN接口COM组件在C#语言领域应用

     ARM9工控主板的一个很大的特色就是提供了标准的CAN总线通讯接口,客户可以方便地在工业现
    的头像 发表于 11-12 10:34 2408次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>CAN</b><b class='flag-5'>接口</b>COM组件在C#语言领域应用

    信息技术ARM9工控板远程抓拍图像应用介绍

    ARM9工控主板功能齐全、体积小巧、性能稳定、超低价格的嵌入式主板产品。
    的头像 发表于 11-13 09:41 1941次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>ARM9</b>工控板远程抓拍图像应用介绍

    信息技术ARM9主板进行连接调试的两种方法

    在我们提供给用户的《使用VS2005连接和调试ARM9嵌入式模块》一文中,我们分别以在EM9000上和在EM9260上为例讲述了两种对基于WinCE的
    的头像 发表于 01-14 11:29 1407次阅读

    信息技术基于主板快速构建整机应用方案简介

    公司的嵌入式工控主板配置了丰富的接口资源,利用这些资源经过简单的扩展就可
    的头像 发表于 02-12 10:57 1331次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术基于<b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>主板</b><b class='flag-5'>快速</b><b class='flag-5'>构建</b>整机应用<b class='flag-5'>方案</b>简介

    ARM9嵌入式系统复习重点

    ARM9嵌入式系统复习重点(嵌入式开发主要内容)-文档为ARM9嵌入式系统复习重点总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,
    发表于 08-04 15:25 17次下载
    <b class='flag-5'>ARM9</b><b class='flag-5'>嵌入式</b>系统复习重点