嵌入式Linux下ARM处理器与DSP的数据通信

发布者:TranquilSoul最新更新时间:2011-07-14 关键字:嵌入式Linux  ARM处理器  数据通信 手机看文章 扫描二维码
随时随地手机看文章

   近20 年来工业测控系统发展的趋势是:分散控制和集中管理、标准化和开放性。工业测控系统从传统的集中测量控制系统转向网络化的集散控制系统。随着现场总线技术高速发展和标准化程度不断提高,以现场总线技术为基础的开放型集散测控系统—现场总线测控系统得到了广泛的应用。同时,以太网的应用也迅速向工业测控系统渗透,在工业自动化应用中异军突起。

  这种趋势的出现与计算机技术、信息技术、网络通信技术的高速发展相关。现代工业系统信息交换的需求也已经从管理层内部迅速覆盖到控制、现场设备等各个层次,连接上层网络和现场总线的通信设备成为工厂自动化系统中的关键设备之一。CAN-Ethernet通信模块,是一种直接连接以太网和CAN现场总线的设备,有效解决了控制系统中现场总线和上层信息管理层的互联问题,使自动化系统中的信息交换可以深入到现场设备一级。

  1  CAN 总线和以太网的连接

  现有的CAN 总线到以太网的通信实现方案中,采用较多的是使用一台连接以太网的计算机,在计算机中安装一块内置式CAN通信板卡;或者通过计算机并行和串行接口外接CAN 的通信模块。这种方法有一定局限性,例如,使用计算机体积大,成本高;计算机故障后的重启速度慢,这可能严重影响系统的工作。采用基于ARM微处理器的单板机系统建立CAN-Ethernet 通信模块,可以很好地解决上述问题,降低系统的成本,提高其性能。CAN-Ethernet通信模块连接以太网和CAN 总线的结构如图1 所示。在以太网和CAN 总线之间,可以挂接一个通信模块连接两种网络,也可以使用多个通信模块形成多个通路。对于第二种情况,以太网上的计算机可以通过指定IP地址和上层协议的端口选择通路。

基于ARM处理器的CAN-Ethernet通信模块实现

  图1  通过通信模块连接以太网和CAN 总线

  2  通信模块的硬件设计

  信模块的硬件核心采用高性能的ARM处理器S3C44B0x。它是一种精简指令处理器,可以在32位指令字的ARM模式下和16位指令字的Thumb模式下工作,设计者可以根据需要在性能和代码大小之间进行折衷;片内有8KB的高速静态RAM,既可以作为高速缓存,也可以作为片内存储器使用;片内外设包括异步和同步串行接口、I2C接口、LCD控制器及接口、实时时钟等。ARM处理器还具有低能耗和高性价比,非常适用于构建性能较高的嵌入式系统。

  通信模块使用2片39VF040芯片,位扩展后组成512K/16bit共1MB的Flash ROM作为程序和配置数据的存储空间,使用1片62LV25616芯片组成256K/16bit 共512B的静态随机存储器。CAN总线通信控制芯片选用了Philips公司的SJA1000T,它是一种独立的CAN 总线通信控制器,仅需要CPU给出必要的指令,控制器就可以自动完成链路层以下的收发工作,并通知CPU总线的工作状态。以太网通信控制芯片采用了台湾Realtek公司的RTL8019as,它是一种ISA 接口的10Mb/s以太网卡芯片,内部包含了以太网媒体访问控制和物理层驱动,并带有16KB的片上缓冲RAM。

  2. 1  处理器和5 V 系统数据线的连接

  系统中的处理器S3C44B0x 和存储器芯片都使用3.3 V 的IO电压,CAN总线接口、以太网接口则使用5V的工作电压。 S3C44B0x 的数据、地址和控制信号线可以直接驱动这些外围电路芯片(参考S3C44B0x、SJA1000、RTL8019as 数据手册) ,但是外围电路芯片输出的高电平可能损坏处理器和直接挂接在处理器数据线上的其他芯片。因此,数据线上应该使用总线转换器进行3.3/5V电平转换。系统选用了兼容3.3 V和5V的信号电平的双向总线收发器LCX245芯片。LCX245 的控制信号包括方向控制端DIR(0 :B →A ,1 :A →B) 和使能控制端OE(0 :接通,1 :隔断) ,这些控制信号将使用GAL芯片产生。图2 为系统的硬件连接示意图。

基于ARM处理器的CAN-Ethernet通信模块实现

  图2  系统的硬件连接示意图

  GAL 芯片选用GAL16V8D-15LP ,它的传播延迟时间为15ns ,反馈延迟时间为7ns ,适于较高速度的工作。除了产生总线收发器芯片的控制信号外,同一片GAL 还用来产生SJA1000 需要的控制信号。根据处理器S3C44B0x 的输出信号, 包括为SJA1000分配的地址组选通信号nGCS3和RTL8019分配的地址组选通信号nGCS4、读写信号线nOE和nWE,可以产生总线收发器LCX245所需要的DIR和OE信号,各信号如图3 所示。

基于ARM处理器的CAN-Ethernet通信模块实现

  图3  LCX245 控制信号的产生

  nGCSx 是处理器的地址组选通信号,S3C44B0x 将外部地址空间从地址0 开始,每32M划分为一个组(Bank ) ,外部寻址时地址线A0 ~ A24 输出组内地址,该地址所在的组的组选通信号同时有效。图中虚线代表写操作时的DIR 信号,实线为读操作的信号。从图中可以得到使用ABEL 语言描写的的信号生成逻辑式为:   

   OE = (nOE &nWE) # (nGCS3 &nGCS4 &nGCS5) ;

  DIR = nOE # (nGCS3 &nGCS4 &nGCS5) ;   

  但是为了使系统更加稳定地工作,应保证OE 信号有效时DIR 信号不发生变化,也就是说进行读操作时图中OE 低电平脉冲的前沿应晚于DIR ,后沿应早于DIR ,这样将出现反馈逻辑,可以使用类似于同步时序电路的设计方法设计。图4 是OE 信号和DIR 信号的次态卡诺图,次态符合上述要求,并且在输入一定的状态下,OE 信号和DIR 信号总是每次改变一个,逐次进入最后的稳态状态(粗体字表示) 。图中“×”表示不会出现的输入状态。

[page]

基于ARM处理器的CAN-Ethernet通信模块实现

  图4  OE 和DIR 次态 卡诺图

  根据卡诺图重新写出的次态逻辑产生式,消除单独输入(包括OE 和DIR 的当前状态) 变化可能引起的竞争- 冒险现象后为:

  OEn = (nOE &nWE) # (nOE & ! DIR) # (nWE &DIR) # (nGCS3 &nGCS4 &nGCS5) ; ///

  DIRn = ( ! OE &DIR) # (nOE &DIR) # (nOE &OE) # (nGCS3 & nGCS4 &nGCS5) ;

  编译GAL 逻辑时应严格按照逻辑式生成与或逻辑。

  2. 2  CAN 总线通信控制芯片SJA1000 的读写

  CAN总线通信控制芯片SJA1000 没有提供单独的地址线,而使用可以与Intel 和Motorola系列微控制器兼容的分时复用地址/ 数据线。在一个读写周期内,微控制器首先输出操作地址并使地址锁存信号ALE 有效,SJA1000 在ALE 信号的下降沿将操作地址锁在片内;之后微处理器发出读写信号进行数据传输。但S3C44B0x 的数据线和地址线是分离的,对SJA1000 的读写操作需要模拟微控制器,先在数据线上写一个操作地址,并模拟产生一个ALE 信号锁存这个地址,之后进行正常的读写操作。系统使用地址线ADDR0 区分地址传输和数据传输:写奇地址时,不选通SJA1000 芯片,但给出一个有效的模拟ALE 信号;读写偶地址时,选通SJA1000 读写数据。另外,系统同时有两路CAN 总线接口,读写操作根据地址线ADDR1 区分两个SJA1000 芯片,两个片选信号和ALE 信号都要通过GAL 芯片产生,各信号如图5所示。

基于ARM处理器的CAN-Ethernet通信模块实现

  图5  SJA1000 控制信号的产生

  图中虚线是向SJA1000 传输和锁存地址的过程,实线是读写操作的过程。用ABEL 语言书写的各信号产生逻辑式为:

  CAN-CS = nGCS4 # ADDR0 ;

  ALE = ! nWE &ADDR0 & ! nGCS4 ;

  对SJA1000 的操作地址如下:地址锁存向0x08000001端口写地址;数据读写通过地址0x08000000。

  3  通信模块的软件设计

  通信模块和CAN 总线上的设备节点之间直接通过SJA1000收发CAN 总线报文进行通信,报文中的数据格式可以是基于CAN 总线的上层标准协议,也可以由用户定义。为了方便与以太网上计算机的通信,CAN-Ethernet 通信模块在以太网一端使用UDP协议,这样,计算机上的软件可以使用操作系统提供的网络访问服务。

  每一个CAN-Ethernet 通信模块需要设定局域网内一个惟一的IP地址,通过固定的UDP端口和计算机通信。模块和计算机之间既可以使用对单点IP的通信,也可以在UDP端口发送广播报文。在以太网一端,通信模块接收到UDP 报文后,将其中的信息组织成CAN 总线报文发往CAN 总线;在CAN 总线一端,通信模块接收报文标识能够通过本节点接收码和接收掩码设置的CAN 总线报文,并封装为UDP 报文,转发到以太网上。各节点IP 地址、UDP工作端口和CAN报文接收掩码等设置在系统初始化时进行。

  3. 1  通信控制芯片的初始化和收发操作

  对SJA1000T的基本操作如下:

  ①初始化:硬件复位,进入复位方式; 设置为BasicCAN 模式,CDR = 0x08 ;设置波特率控制字BTR0 ,BTR1 ;设置接收码和接收掩码ACR、AMR;完成设定,进入工作模式,CR = 0x1E。   

  ②发送:将CAN 总线报文写入SJA1000T 发送缓冲区TX2IDR1~2 , TXDR1~8 ;写发送命令,CMR = 0x01。

[page]

 

  ③接收:从RXIDR1~2、RXDR1~8 读出CAN 一帧CAN 总线报文;将SJA1000T 的接收缓冲区窗口滑动到下一帧,CMR =0x04。

  RTL8019AS内部有页地址为0x40~0x79 的256个缓冲页,每页256B。这些缓冲页的一部分作为接收缓冲区,起始页地址和结束页地址通过PSTART、PSTOP 寄存器配置,剩余可以作为发送缓冲区使用。硬件把接收缓冲区作为环形缓冲区使用,CURR寄存器和BNRY寄存器分别指明缓冲区中未使用部分的起始和结束页地址。硬件接收到数据后会自动修改CURR 的值,而BNRY需要读出一帧数据后由软件修改;对RTL8019AS的基本操作如下:

  ①初始化:硬件复位操作,进入停止方式;写入物理地址到PR0~PR5 ,写入0x00 到多点接收地址寄存器MAR;设置内部发送缓冲区器起止页地址到PSTART、PSTOP;写入当前 

  页地址到CURR和页地址界寄存器BNRY中;进入正常工作方式,CR =0x02。

  ②发送:将以太网报文载入在RTL8019AS中设置的发送缓冲区中;写发送起始页地址到TPSR ,写发送内容长度到TBCR0~1 ;写发送命令,CMR = 0x1A。

  ③接收:从在RTL8019AS中设置的接收缓存页中读出一帧以太网报文;根据报文长度改变页地址界限BNRY的值。

  3. 2  UDP 和CAN 报文的转换

  CAN - Ethernet 通信模块收到CAN 总线报文时,将整个报文封装在一帧UDP 报文中;接收到目的端口与自己的工作端口相符的UDP 报文时,取出其中的数据段作为一帧CAN 总线报文。以太网报文到CAN 总线报文的具体转换过程如下:

  ①如果接收到的以太网报文包含IP 报文,分解出IP 报文,否则抛弃这帧报文;

  ②如果IP 报文的目的地址匹配,并且包含一帧UDP 报文,分解出UDP 报文,否则抛弃;

  ③如果UDP 报文的目的端口匹配,分解出其中的CAN 总线报文,否则抛弃。

  CAN 总线报文到UDP 报文的转换过程是:

  ①接收到的CAN 总线报文装入UDP 报文的数据段,计算校验和,完成UDP报文封装;

  ②加上IP 报文头部,计算校验和,完成IP报文封装;

  ③加上以太网报文的头部,报文尾部的校验和不需要软件完成,RTL8019AS在发送时会自动添加。

  为了减少在转换过程中的数据拷贝,定义了如下数据结构。从CAN总线上收到的报文直接放在Frame结构体的can[ ]成员中,并记录长度,封装为UDP报文的过程就是填充Frame结构体中其他成员的过程;从以太网上收到的报文逐字节放入Frame结构体中,CAN 报文就包含在can[ ]成员中。

struct EthHead {
unsigned char DstPhyAddr[6 ] ;  / / 以太网目的地址
unsigned char SrcPhyAddr[6 ] ;  / / 以太网源地址
unsigned short Prt ;  / / 协议标识
} ;
struct IPHead {
unsigned char VerLen ;  / / 版本号和头长度
unsigned char ServType ;  / / 服务类型
unsigned short Len ;  / / 长度
unsigned short ID;  / / 报文ID
unsigned short FlagAndFrag ;  / / 标记和分段
unsigned char TTL ;
unsigned char Prt ;  / / 协议标识
unsigned short HdChksum;  / / 头校验和
unsigned char srcIP[4 ] ;  / / 源IP 地址
unsigned char dstIP[4 ] ;  / / 目的IP 地址
} ;
struct UDPHead {
unsigned short srcPort ;  / / 源端口号
unsigned short srcPort ;  / / 目的端口号
unsigned short Len ;  / / 长度
unsigned short Chksum;  / / 校验和
} ;
struct Frame {
  struct EthHead ethhd ;
  struct IPHead iphd ;
  struct UDPHead udphd ;
unsigned char can [ 10 ] ;  / / 放置CAN 报文 
  
  short canlen ;  / / 记录收到的CAN 报文长度
} ;

  3. 3  通信程序的实现

  处理器对SJA1000T和RTL8019AS 的操作都使用了中断方式,通信模块的软件程序可以分成SJA1000T 中断服务程序、RTL8019AS中断服务程序和主程序3 个部分,是典型的前、后台处理结构。在中断服务程序中,将收到的CAN 总线报文和以太网报文读入内存中的缓冲区,并累加缓冲区内还未处理的报文计数。在主程序循环中,轮流处理两个缓冲区中的报文,并减小报文计数值。图6 是SJA1000T的中断服务流程、RTL8019AS中断服务流程、主程序的流程。由于SJA1000T内部的接收缓冲区只有64B ,所以在程序中定义了容纳32个Frame结构体数组can- rbuf [ ]并组成环形缓冲区。同时也定义了相同大小的数组eth- rbuf [ ]组成以太网接收的环形缓冲区。

基于ARM处理器的CAN-Ethernet通信模块实现

  图6  通信模块软件流程图

  在调试过程中发现,如果转发过程被特定的中断程序打断,可能发生报文计数错误;如果向RTL8019AS写入待发送报文的过程被以太网接收中断打断,就无法恢复写入过程了。因此在转发过程中应屏蔽相应的中断。

  4  结束语

  采用上述方法实现的CAN-Ethernet 通信模块,解决了以太网和现场总线CAN 总线之间互联问题,可以根据应用的需求,进行灵活的配置和改进,提高系统的性能和可靠性。实际证明,在局域网环境下模块工作可靠,在以太网负载适中时,只有很小的通信延迟。它为CAN-Ethernet 的互联提供了低成本、高性能及灵活的解决方案。

 

关键字:嵌入式Linux  ARM处理器  数据通信 引用地址:嵌入式Linux下ARM处理器与DSP的数据通信

上一篇:基于ARM的MPEG4视频解码器
下一篇:基于ARM7 TDMI的SoC语音处理系统的设计

推荐阅读最新更新时间:2024-03-16 12:38

传苹果将抛弃英特尔拥抱ARM处理器:代码为证
    日前有消息传出,苹果将在10月举办Mac电脑的发布会,据称这将是一次大调整。现在外媒TechTastic报道,苹果Mac产品线的调整升级真的很大,因为最新macOS系统的源代码的中出现对ARM处理器支持的信息。 传苹果将抛弃英特尔拥抱ARM(图片来自新浪)   新 CPU的代码是ARM Hurricane(飓风),而苹果手机上的ARM处理器内部代号正是“龙卷风”的类型。如A7 = Cyclone(旋 风);A8 = Typhoon (台风);A9 = Twister (龙卷风)。又比如iPhone 7 采用的处理器A10 Fusion,是苹果 首次采用四核心设计。     对此,TechTastic认为Hurri
[手机便携]
搭建S3C6410嵌入式linux平台
1、安装VMWare VMWare是一个虚拟PC软件,VMWare的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与 多启动 系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正 同时 运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。 http://www
[单片机]
ARM处理器关于非对齐存储的访问规则
ARM 系列处理器是 RISC (Reducded Instruction Set Computing)处理器。很多基于ARM的高效代码的程序设计策略都源于RISC 处理器。和很多 RISC 处理器一样,ARM 系列处理器的内存访问,也要求数据对齐,即存取 字(Word) 数据时要求四字节对齐,地址的bits ==0b00;存取 半字(Halfwords) 时要求两字节对齐,地址的bit ==0b0;存取 字节(Byte) 数据时要求该数据按其自然尺寸边界(Natural Size Boundary)定位。   ARM 编译程序通常将全局变量对齐到自然尺寸边界上,以便通过使用 LDR和 STR 指令有效地存取这些变量。这种内存访问方
[单片机]
博通选定ARM处理器用于新一代蓝光播放器
ARM公司(伦敦证交所:ARM;纳斯达克:ARMHY)今日宣布,博通公司已采用ARM® Cortex™-R4处理器应用于未来的蓝光播放器芯片中。Cortex™-R4处理器提供了性能、实时响应和能效之间的独特融合,使蓝光播放器在成本降低的情况下实现最高水平的用户响应、快速镜头定位和精准回放。Cortex-R4处理器以低能耗为设计理念,并支持播放器在待机模式下实现完全关闭电源功能。 Cortex-R4处理器拥有全面的软件系统支持,一致的ARM指令集架构使其具有高度可移植性,促成基于ARM7TDMI® 处理器的解决方案能实现轻松的软件移植。 博通宽带通信集团高级副总裁兼总经理Dan Marotta表示:“我们希望通过把Cortex-
[单片机]
基于ARM处理器中断处理的编程实现
  ARM编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。   ARM处理器异常中断处理概述   当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场。从异常中断处理程序退出时,要恢复被中断的程序的执行现场。ARM体系
[单片机]
基于<font color='red'>ARM处理器</font>中断处理的编程实现
基于ARM的嵌入式Linux移植真实体验(4)――设备驱动
设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能: 设备初始化、释放; 提供各类设备服务; 负责内核和设备之间的数据交换; 检测和处理设备工作过程中出现的错误。 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Linux的设备操作犹如文件一般。在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。 Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而
[单片机]
基于ARM的<font color='red'>嵌入式Linux</font>移植真实体验(4)――设备驱动
Qualcomm 利用802.11ad多千兆比特Wi-Fi支持赛车数据通信
2017 年 2 月 27 日,西班牙巴塞罗那——Qualcomm Incorporated(NASDAQ: QCOM)今日宣布,其子公司 Qualcomm Technologies, Inc.和梅赛德斯 AMG 马石油车队正展开外场试验,利用工作在 60 GHz 频段的 802.11ad Wi-Fi®技术,进行车辆传感器信息的高速无线下载测试。Qualcomm Technologies 和梅赛德斯 AMG 马石油车队曾在 2016 赛季一级方程式美国大奖赛期间成功进行了初次测试,双方计划继续进行技术开发,并在七月的英国大奖赛期间展开更多试验。在这些外场试验期间,赛车工程师利用工作在 5 GHz 的 802.11ac 与工作在毫米
[汽车电子]
ARM处理器异常处理的返回地址分析
ARM 处理器一共有7 种类型的异常,按优先级从高到低排列如下: Reset Data Abort FIQ IRQ Prefetch Abort SWI Undefined instruction 当任何一个异常发生并得到响应时,ARM内核自动完成以下动作: 1、拷贝CPSR到SPSR_ mode 2、设置适当的CPSR位: 改变处理器状态进入ARM状态; 改变处理器模式进入相应的异常模式; 设置中断禁止位禁止相应中断。 3、更新LR_ mode 4、设置PC到相应的异常向量 当一个异常处理返回时,一共有3 件事情需要处理:通用寄存器的恢复、状态寄存器的恢复以及PC 指针的恢复。 通用寄存器的恢复采用一般的堆栈操作指令,
[单片机]
<font color='red'>ARM处理器</font>异常处理的返回地址分析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved