Honeywell霍尼韦尔 CC-PAIH01(51405038-175),现货销售,顺丰包邮,欲购从速。
详情描述:
为了程序安全,Flash执行页擦除和编程操作时要求CPU处于等待状态,因此Flash的页擦除和写入函数执行后都要调用boot_spm_busy_wait()函数等待操作完成。此时,I2C总线也处于挂起状态,等所有操作完成后才能将总线释放。上位机软件在发送完数据帧后就一直***总线状态,等总线释放后再读取flag状态,并决定是重发还是发送下一帧,这样就实现了有效的通信流量控制。
整个Bootloader程序编译完成后,大小为506字节。因此,熔丝位中的BOOTSZ1和BOOTSZ0应设为1和0,将引导程序区设置为地址01E00~01FFF、大小为512字节的区域。为了使Bootloader程序能正确写入到该区域,程序编译时要将程序起始地址设定在01E00,在Win***R中可以通过在Makefile中添加“LDFLAGS+=-Wl,--section-start=.text=01E00”实现。编译完成的Bootloader可以在ATmega88确定PCB前,通过编程器或ISP写入到Flash中。
2PC端编程软件设计
2.1IntelHex文件格式
ATmega88微控制器的目标程序代码是采用IntelHex文件格式[3]保存的。IntelHex文件包含了目标代码及相应的地址信息,这些实现在应用编程必需的信息由PC机端的上位机程序提取,并重新以页面为单位装帧后发送给Bootloader便可实现Flash的编程。
IntelHex文件格式将二进制的目标机器代码以ASCII码的文本形式记录,在文件中,每一行都是一个由十六进制机器码或数据常量组成的Hex记录。记录格式如表1所列。
表1IntelHex文件的记录格式


每条Hex记录都是以“:”开头的,表1中所述的每个字节在记录中是由两个ASCII码表示的,这样的两个十六进制数为一个字节;长度表示的是记录中数据项的长度;地址为数据项在Flash中的起始地址;记录的类型总共有6种,分别为数据记录(00)、文件结束记录(01)、扩展段地址记录(01)、开始段地址记录(03)、扩展线性地址记录(04)、开始线性地址记录(05)。数据是与记录类型相对应的可变长度的数据组。校验字节计算如下:首先,将每条记录中除记录头和校验外所有ASCII码以2个ASCII码转换为1个字节的形式转换为二进制。然后计算上述二进制字节的累加和,***后将累加和的低字节取反加1即为校验字节。
ATmega88目标代码的Hex文件由数据记录和文件结束记录两种类型的记录构成。上位机程序在解析过程中以行为单位读取文件中的记录,并根据上述记录的格式进行解析,获得Flash每一页面的地址和相应的数据,遇到文件结束记录后则停止解析。
2.2I2C总线的PC机串口模拟
PC机端的编程软件是通过I2C总线与ATmega88的Bootloader通信的,I2C总线在微控制器中是广泛存在的,一般的微控制器都集成了I2C总线控制模块。但PC机基本没有I2C总线接口,需要专用的USB转I2C总线协议芯片或其他接口的I2C总线模块才能实现PC机与微控制器之间的I2C总线通信。这种方法成本高且实现麻烦,本文给出了一种利用PC机串口的握手信号模拟I2C总线的方法,相比专用协议转换芯片或模块的方法,这种方法更加简单、***。为了实现PC机RS232串口与微控制器I2C总线的电平匹配,设计了如图2所示的接口电路。

图2中,PC机串口的RTS输出用来模拟I2C总线的SCL时钟信号;DTR输出模拟I2C总线的SDA输出数据信号;CTS输入用于接收SDA输入数据。PC机串口的RS232的高电平为15V,低电平为-15V;I2C总线的高电平为+5V,低电平为0V。因此,将PC串口的握手信号转换成I2C总线信号时需要进行相应的电平转换,PC机串口RS232电平与I2C总线TTL电平之间的转换是由电阻R1、R2和5.1V稳压管D1、D2实现的。
当RTS输出+15V高电平时,由于电阻和稳压管的作用,SCL端电平被稳定在+5.1V;而当RTS输出-15V低电平时,由于二极管D2导通,SCL电平被钳位在-0.7V。这样,便实现了&plu***n;15V的RS232电平到0~5VCMOS电平的转换;电阻同时也起着限流作用。DTR输出到SDA信号的电平转换也是同样的原理,而当SDA处于输入状态时,由于CMOS电平可以满足RS232电平的输入容限,因此无需进行电平转换。
由于用PC机串口模拟I2C总线时仅仅用到了串口的握手信号,而没有用到串口的波特率、数据长度、奇偶校验等设置功能及输入/输出缓冲区的管理功能,本文直接采用Windows提供的API函数实现串口编程。串口的打开和关闭分别采用CreateFile函数和CloseHandle函数实现。RTS和DTR信号高低电平的控制由EscapeCommFunction函数将串口作为文件操作实现,调用该函数后程序要有一定时间的***以实现通信波特率的控制。CTS的电平状态则由GetCommModemStatus函数查询得到。
在实现了RTS、DTR的电平控制与CTS电平状态的获取后,借鉴单片机用I/O口模拟I2C总线的方法[4],可以通过控制RTS、DTR电平与查询CTS状态来模拟I2C总线。在总线的时序处理与读写操作方面,两种方法的***不同在于:用单片机I/O口模拟I2C总线时,I2C总线的SDA信号由输出模式转换到输入模式是通过将单片机I/O口从输出转换为输入实现的;由于串口握手信号无法实现双向通信,因此,SDA信号的输入功能是通过将DTR置高电平后读取CTS状态实现的,之所以将DTR置高电平是因为微控制器端的I2C总线的集电极开漏输出结构需要DTR置高后才能输出高电平,这类似于I2C总线上拉电阻的功能。
2.3上位机程序设计
PC端上位机程序的主要功能为:解析应用程序的Hex格式文件,并从中提取Flash中每一页面的地址与数据信息;设置串口号与所需升级的ATmega88的I2C总线地址;利用串口的握手信号模拟I2C总线通信,将Hex文件中的程序代码准确无误地发送给相应地址的Bootloader以实现应用程序的在线更新。
根据上述功能设计了如图3所示的上位机程序界面,开发环境采用BorlandC++builder5.0,串口操作通过WindowsAPI接口函数实现。
BTV20.2CA-64B-33C-D-FW
AEG AS-8534-000
AEG AS-P120-000
AEG AS-J890-101
AEG AS-S908-011
AEG PC-0984-455
AEG AS-B872-002
AEG AS-B828-016
AEG PC-E984-265
AEG AS-B872-002
AEG DAP208
AEG NW-RR85-000
AEG NUL200
AEG S908
AEG AS-B840-108
AEG 170BDI54250
AEG AS-B846-001
AEG PC-A984-120
AEG AS-B829-116
AEG AS-B350-001
AEG MM-PMA2-100
AEG 3240/5200
AEG 120-089-006
AEG AS-P120-00
AEG AS-BDEP-218
AEG PC-***84-230
AEG PC-E984-685
AEG 1-PE-0001-000
IBM 59H2682
Tellabs PWPQH151AB
Honeywell 2VM62-020- 5
HPS 100760406
Zenith PWMT-200
***aya Lucent TN2181 V8
AEG AS-P120-000
AEG AM-S985-042
AEG AS-C921-101
AEG AS-B804-016
AEG 170BDM34200
AEG AS-BDAU-202/ASBDAU202
AEG PC-A984-145
AEG AS-B360-001
AEG AS-B885-111
AEG AS-BDEP-210
AEG AS-B804-116
Asco SC8210G87
Chiller 0375-362-21
***aya TN754
Philips 1240/00
Radyne DMD2050
Tektronix MIL-3600TEK
Netgear FVS318
Apple A1047
Dynapar H23200011011J
***aya TN748C V5
Oriental 4TK10CGN-A
Sun 3701704
***aya Lucent TN760D
CMS A5X70
Compaq 007902-001
Reuters CA-AKPT-0001
Haydon 87H4B-05-006ENG
Siemens 6ES5315-8MA11
Cisco 2650XM
***aya TN747B V8
***aya TN747B
NetApp EMA-XF500-201-G1
Phillips 275801
Toshiba DKT2104-CB
SimpleTech 8500-0031-001
Seagate ST330620A
Skystream EMR-1600
*** RM-P110
Startek 299AT
Bogen M300
***aya TN767E
Honeywell 2VM62-020-5
Panasonic TNPA4242
Panasonic TNPA4055
***aya 120A4
***AYA 617U33-K
***aya 103G13
***aya TN573B
***aya TN750B
***aya TN2302AP
***aya TN801B
***aya 391C1
***aya PG-5E385
***aya TN801
***aya TN750C V8
Compaq 007912-001
Asco 103-833-1-D
***aya TN746B
STB 1X0-0271-307
MDC K100-5
Black SP400A-R2
Cisco 34-0667-01
Exide 101073070-001
3664 TRICONEX
3721 TRICONEX
07DI92 GJR5252400R0101
07DI92 GJR5252400R4101
07AI91 GJR5251600R0202
07AI91 GJR5251600R4202
FBM214
FBM215
FBM204卡件 P0914SY
FBM204端子 P0916AG
FBM204电缆 P0916DB
FBM241卡件 P0914TG
FBM241端子 P0916AS
FBM241电缆 P0916FH
FBM241C卡件 P0914WM
FBM241C端子 P0916AW
FBM241电缆 P0916FH
2094-BM02-S
651CD2S2N
DSQ***31
IC697CMM742
MTM-120-S-A20-120VA
TRICONEX 5101
TRICONEX 5201
TRICONEX 5301
TRICONEX 5401
TRICONEX 5351
FBM201
FBM07B
FBM237
FBM242
ENI MKS DCG-100A
ENI MKS DCG-100
ENI MKS DCG-200Z
ENI MKS DCG-100 DC
MKS DCG-200Z OPTIMA OPT-100Z-00
ENI MKS DCG-200ZHC-S02
DCG-200Z DC22S-Z022000010A
ENI DCG-100A DCG4M-A001101010
ENI DCG-100A DC26M-Z011100010C
ENI DCG-100A DCG2M-A001200020C
ENI DCG-100A DCG2M-A001200020MA
ENI DCG-200Z DC21M-Z041300110A
ENI DCG-200A DC22M-A041300111AL
ENI DCG-200Z DC22M-Z041300111A
ENI DCG-200Z DC22S-Z122000010A
ENI DCG-200Z DC24M-Z041300110A
ENI DCG-200Z DC24M-Z041300111A
ENI DCG-200E DCG-400E-00 Optima
DCG-100A DCG1M-A001200020C
DCG-100A DCG1M-A001100020V
DCG-100A DCG1R-A021200021
DCG-100A DCG2D-A001100020MA
DCG-100A DCG2D-A031100021
DCG-100A DCG2S-A022000010
DCG-100A DCG2S-A022001010
DCG-100A DCG2S-A122000010 RPG-50
RPG-100
DSQC639 3HAC025097-001
DSQC679 3HAC028357-001
DSQC633A ***B板3HAC031851-001