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

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

3天内不再提示

利用CAN总线实现单片机的远距离在线升级的设计

电子设计 来源:郭婷 作者:电子设计 2018-12-12 09:47 次阅读

1、系统总体设计方案

1.1 系统的拓扑结构

CAN(Controller Area Network)即控制器局域网,是目前广泛应该的总路线之一。CAN总线通信距离限制小,它的直接通信距离最大可达10km,最高通信速率可以达1Mb/s(此时距离最长为40m),节点数可多达110个。因此它特别适合于工业远程过程监控设备的互联和电网络设备的调试和维护。基于CAN总线的分布式控制系统的一般组成模式如图1所示。上位机PC机通过RS-232连接到总线上某一智能节点。可以对安装在现场某些节点的程序进行远距离在线升级和改变某些功能,因此利用CAN总线进行单片机的在线编程就显得非常必要。

利用CAN总线实现单片机的远距离在线升级的设计

图1 基于CAN总路线的分布式控制系统

根据图1所示的CAN总线分布式系统的结构,在线编程采用主从结构。智能节点1为主节点,其它节点为从节点。节点采用ATMEL公司推出的AVR系列单片机MEGA8,内含8K FLASH程序存储器,1K的内部SRAM,512字节的内部EEPROM.为了便于升级,除了提供ISP即在线编程功能(In System Programming)以外,还提供了BOOT引导功能,为实现IAP即在应用中编程(In Application Programming)为系统升级提供了可能。

1、2 节点升级过程

主节点在编程监控模式下,接收PC机发送的"编程"命令,若编程节点为主节点,则程序可以通过RS-232下载到主节点,主节点接收编程数据,完成 FLASH的在线编程,此时,从节点分别执行各自缺省的应用程序。若编程节点为从节点,则主节点就通过CAN总线进行广播,全部从节点监控包括被选择节点 ID号在内的"编程初始信息",并与各自的节点ID进行比较,被选择的从节点与主节点和PC机建立编程通信连接,其它从节点继续运行其缺省应用程序,从而实现了在线升级功能。可见,在从节点编程模式下,主节点在PC机的RS-232总线与从节点的CAN总线之起着路由器的作用。

1、3 CAN总线系统智能监控节点

CAN总线系统智能监控节点由5部分组成:微控制器Mega8,并串转换电路,独立CAN控制器SJA1000,CAN总线驱动器TJA1050和高速光电耦合6N137.如图2所示

利用CAN总线实现单片机的远距离在线升级的设计

图2 CAN智能监控节点硬件原理图

为了提高稳定性和安全性,在SJA1000的TX0和RX0与TJA1050的TXD和RXD相连时,采用了高速光电耦合6N137,并且两个光电耦合器各自连接两个完全隔离的电源,这样就很好地实现了总线上各CAN节点间的电气隔离。在SJA1000与Mega8通信中,中间加入了一个并串转换电路。除了给Mega8留出更多的引脚用于外围电路外,更重要的是传输多位数据时,可以通过并串转换电路,连接到Mega8单片机的通用同/异步串行接口 USART的RXD与TXD引脚。把接收过进来的数据送入USART数据寄存器UDR中,通过ID认证后,进入FLASH编程监控程序,进行自编程修改,达到升级的目的。

2、MEGA8单片机升级功能

2.1 引导加载自编程功能

ATmega8具备引导加载支持的用户程序自编程功能(In-System Programming by On- chip Boot Program),它提供了一个真正的由MCU本身自动下载和更新(采用读/写同时"Read-While-Write"进行的方式)程序代码的系统程序自编程更新的机制。使用该功能时,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对读取代码,或者从程序存储器中读取代码,然后将代码写入(编程)到Flash存储器中。引导加载程序有能力读写整个Flash存储器,包括引导加载程序所在的引导加载区本身。引导加载程序还可以对自身进行更新修改,甚至可以将自身删除,使系统的自编程能力消失。基于这个因素,使得在线升级成为了可能。引导加载程序区的大小可以由芯片的熔丝位设置,该段程序区还提供两组锁定位,以便用户选择对该程序区的不同级别的保护。

2、2 MEGA8的BOOT介绍

由于MEGA8具有IAP可在应用中升级的功能,本系统在软件设计上采用了BOOT引导功能。主程序采用C语言编写,BOOT程序则采用了汇编编写。目的是为了提高下载速度,设计中放弃了ATMEL提供的AVRPROG烧录软件,另外采用了一个下载烧录速度较高的ID通讯协议,在程序代码量比较大的时候,具有更明显的速度优势,并且也便于用户二次开发。

MEGA8的引导功能可通过相应的熔丝位来确定,BOOT引导程序的入口、BOOT区的大小可以通过烧录单片机的BOOTSZ1、BOOTSZ0两个熔丝位来确定。单片机复位后向量入口也是通过烧录单片机的BOOTRST熔丝位来确定。另外,单片机在执行IAP编程时需要用到 Store Program Memory Control Register(SPMCR)寄存器。

SPMCR寄存器包含了页擦除,页写入,BOOT区加密设置,页填充及页的RWW(Read While Write)等功能的设置。需要注意的是在执行每个功能时,都需要设置SPMEN标志,在随后的4个时钟周期内运行SPM指令,该标志会在SPM执行完成后自动清零。函数如下:

Do_SPM:

Wait_SPM: ; 等待页操作完成

in templ,SPMCR

sbrc templ,SPMEN

rjmp Wait_SPM

out SPMCR,temp

spm ; 执行SPM指令

.dw 0xffff

nop

ret

有了以上的函数,就可以很容易的进行页擦除、页写入、页填充等程序的设计了。比如需要执行页擦除指令,则首先要将需要擦除的页地址写入Z寄存器,然后置位SPM的PGERS(页擦除位)和SPMEN(SPM允许位),然后再调用Do_SPM函数即可。程序如下:

……

ld temp,y+

mov zl,temp ; Z指针地址赋值

ld temp,y+

mov zh,temp

ldi temp,(1<

rcall Do_SPM ; 执行页写入

……

3、BOOT程序介绍及流程图

Mega8单片机上电后设置冷启动标志,而热启动入口则设置热启动标志。然后初始化堆栈、串口以及必要的I/O状态等。初始化完成后,如果BOOT程序检测到热启动标志则直接进入烧录状态;如果为冷启动标志则继续检测下载位是否允许(本设计通过PB0开关选择),如为高电平则进入烧录状态,如为低电平则进入用户程序。

BOOT引导程序在设计时提供了两个入口,一个是系统复位时的冷启动入口,另一个是用户程序在运行时进入升级程序的热启动入口。BOOT程序主要包括烧录子程序、串口发送、串口接收、引导主程序等。

串口发送采用了查询发送完成标志。这样当该标志被设置时,证明串口的停止位已经发送完成,这对于CAN总线通讯非常有用。烧录程序主要使用"SPM" 指令,该指令完成对MEGA8的烧录等功能。而读取MEGA8的指令则使用"LPM".由于擦除,页填充,写入,读出等基本命令单片机都已解释完成,因此所有过程都可以由计算机端程序进行控制。

程序开始时,计算机端发送命令,先对单片机的页进行擦除,然后接收一帧数据,接收完毕后执行页写入命令,写入完成再进行读出进行校验,如果校验无误再继续写入下一页,直到所有页都写入完毕,即完成一次下载过程。如果传输或页校验出现错误,程序会连续进行5次测试,如再仍不成功,则认为本次下载失败。主程序流程图如图3.

MEGA8单片机的主程序通过CAN接口执行计算机发送的命令,并且定义了一个更新代码的特殊命令,当接收到该命令时,主程序首先关闭中断,关闭看门狗,然后跳转到BOOT的热启动入口,再执行BOOT下载烧录程序。下载完成后再直接跳转到$0000地址进入用户程序区,这样就完成了代码的在线升级。为了保证该命令的可靠性,本程序设计时规定单片机必须在100ms内同时接收到两次该命令才认为正确,超过100ms则不予认可。

利用CAN总线实现单片机的远距离在线升级的设计

图3

4、结束语

由于采用了MEGA8单片机的BOOT功能,以及CAN总线高速远距离通信,同时抗干扰性强,使得远距离在线升级,譬如通过以太网、无线等方式,成为了可能。这对于系统调试及以后的升级维护都提供了极大的便利,这也是今后单片机和CAN总线发展的一个方向。由于该部分具有通用性,所以可很容易地移植到 AVR其它MEGA系列的设计方案中。

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

    关注

    6032

    文章

    44522

    浏览量

    633177
  • 驱动器
    +关注

    关注

    52

    文章

    8166

    浏览量

    146038
  • 控制器
    +关注

    关注

    112

    文章

    16212

    浏览量

    177447
  • 总线
    +关注

    关注

    10

    文章

    2869

    浏览量

    87995
收藏 人收藏

    评论

    相关推荐

    利用单片机和对讲进行超远距离控制

    利用单片机和对讲进行超远距离控制,可行吗?求大神知道!
    发表于 08-03 17:19

    请问用ESP8266能够实现单片机和手机远距离通信吗?

    请教一下:想要实现单片机和手机远距离通信(比如2km),用ESP8266能够实现吗?ESP8266与手机是否只能在热点范围内实现通信,还是可
    发表于 06-27 04:35

    怎么利用CAN总线进行MEGA8远距离在线升级

    上某一智能节点。可以对安装在现场某些节点的程序进行远距离在线升级和改变某些功能,因此利用CAN总线
    发表于 08-22 08:21

    单片机串口怎么实现远距离传输?

      因为要调试串口,如果串口要实现远距离传输,怎么知道传输的可靠性和信号与传输媒介的适配性呢?
    发表于 03-05 07:05

    利用16C554实现主从式单片机远距离通信扩展

    通过 16C554完成上位主机对多台 MODEM的控制,采用背靠背连接实现主机与下位远距离通信。该系统已成功地用于城市交通路口的信息传输。
    发表于 04-08 09:49 42次下载

    基于CAN总线连接的MEGA8远距离在线升级方案

    本文介绍了如何利用MEGA8 通过CAN 总线进行的远距离在线升级的方案。详细论述了分布式控制系
    发表于 08-17 09:37 34次下载

    单片机与PLC之间远距离通信的实现

    摘要:在工业自动控制中,单片机与PLC的远距离通信是一个难点与热点问题。本文设计了S7-200PLC与PIC16F877单片机实现远距离串行
    发表于 12-21 22:43 121次下载

    用FPGA实现数据远距离的高精度传输

    摘要:详细阐述一种利用交错编码的思想,来改远距离通信质量的新设计。设计由FPGA芯片实现,能很方便加载到各种单片机有线或无线通信系统的收发接口中。通
    发表于 06-20 15:05 747次阅读
    用FPGA<b class='flag-5'>实现</b>数据<b class='flag-5'>远距离</b>的高精度传输

    PC与51系列单片机远距离串口通信

    使用自定义的通讯协议实现了PC与51系列单片机远距离串口通信,该方法以PC作为控制端,以单片机
    发表于 04-24 15:09 303次下载
    PC<b class='flag-5'>机</b>与51系列<b class='flag-5'>单片机</b>的<b class='flag-5'>远距离</b>串口通信

    单片机远距离串行通信应用

    实现单片机远距离串行通信,在串行口TxD和RxD信号前端分别加入一差分驱动器MC3487和一差分接收器MC3486,变电平收发为差分收发。加入差分驱动和差分接收电路后的多串行通信
    发表于 03-14 14:38 9775次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>远距离</b>多<b class='flag-5'>机</b>串行通信应用

    基于MEGA8单片机CAN总线实现智能监控节点在线升级

    上某一智能节点。可以对安装在现场某些节点的程序进行远距离在线升级和改变某些功能,因此利用CAN总线
    的头像 发表于 03-26 08:05 2060次阅读
    基于MEGA8<b class='flag-5'>单片机</b>和<b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>实现</b>智能监控节点<b class='flag-5'>在线</b><b class='flag-5'>升级</b>

    单片机如何才能与手机实现远距离通信?详细方法说明

    通过云服务器中转可以实现单片机与手机的远距离通信只要有互联网连接,通过云服务器中转,单片机和手机无论处于地球的哪一个角落都可以进行通信,这就是物联网的魅力了。5G时代来临,数据高速、低
    的头像 发表于 01-26 10:20 8209次阅读

    如何使用STM32单片机实现远距离监控系统的设计

    随着移动通信技术的迅猛发展,人民的生活质量以及安防意识的不断提高,基于社会上传统的监控系统的局限性,设计一套远距离的无线监控系统是目前社会迫切需求的。本文设计了基于远距离传输的监控系统,利用目前
    发表于 03-13 08:00 5次下载
    如何使用STM32<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>远距离</b>监控系统的设计

    单片机如何远距离判断输出

    单片机远距离判断输出是一个涉及到电子技术、通信技术以及计算机科学的问题。在这种场景中,单片机(通常是一个嵌入式系统)需要判断并输出距离较远的信号。为了
    的头像 发表于 12-13 10:36 539次阅读

    单片机如何远距离判断输出信号

    将从硬件和软件两个方面介绍单片机如何实现远距离判断输出信号。 一、硬件部分 为了实现远距离判断输出信号,我们可以采用以下硬件方案: 1.使用
    的头像 发表于 12-15 10:15 662次阅读