wangzugong 发表于 2011-2-8 02:15:08

春节有空,整理了AVR的CAN Bootloaer,希望抛砖引玉,共同研究

论坛似乎没看到有人研究CAN Bootloaer,AVR在国内也没有CAN的技术支持,只好自己发狠了。好在小有成果,AT90CAN128已经可以使用了。
单片机的CAN Bootloaer代码请参考Atmel官网发布的GCC版的CAN_Libraries_and_Examples,我将在附件中给出。AVR这几天改版了,竟然把它弄没了,只有IAR版的。GCC版的CAN_Libraries_and_Examples基本不需要修改,可以直接使用,只要把其中的IO口修改到和你的PCB一致、把晶震定义修改就可以了。
上位机使用Atmel官网发布的FLIP3.4.2,下载地址:http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3886
我使用的数据线是SYS TEC的USB转CAN,感觉挺好用。问题是这个东西很贵,我在考虑使用普通的串口转CAN的数据线,这就需要自己写上位机软件了,可这是我的弱项,只好慢慢啃了。打算用VB,VC太费时间。
下面是我侦测出来的FLIP3.4.2和CAN Bootloaer之间的通讯协议,更新中……
同时请参考GCC_CAN_bootloader-rev-1.1.0.pdf的说明


一、上位机与bootloader连接:
Request--PC发送,Answer--bootloader回复
其中53 54是帧头,无实际含义,2、3字节代表CAN的ID(高位在前),4字节代表CAN的帧类型--00数据帧,5字节是CAN的数据长度,6字节开始是CAN的数据(不一定满8个字节)

53 54 00 00 00 01 FF       Request: 0x0000((“CRIS”<<4)+0)--ID_SELECT_NODE, len--1, FF--Node, Open or close communication
53 54 00 00 00 02 04 00    Answer:0x0000((“CRIS”<<4)+0)--ID_SELECT_NODE, len--2, 04--Boot loader Version, 00--Communication closed

53 54 00 00 00 01 FF       Request: 0x0000((“CRIS”<<4)+0)--ID_SELECT_NODE, len--1, FF--Node, Open or close communication
53 54 00 00 00 02 04 01    Answer:0x0000((“CRIS”<<4)+0)--ID_SELECT_NODE, len--2, 04--Boot loader Version, 01--Communication opened

如果bootloader回复01--Communication opened,PC将连续读取单片机以下数据:

先选择目标:53 54 06 00 00 03 01 02 00      Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len--3, 01--Select Memory space, Memory space02--Signature, Page00
回复OK:    53 54 06 00 00 01 00            Answer:0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len--1, 00--Selection OK
再操作地址:53 54 03 00 00 05 00 00 00 00 00Request: 0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len--5, 00--Display(read)data, 0x0000--Start Address, 0x0000--End Address
回复数据:53 54 03 00 00 01 1E            Answer:0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len--n=1, Data Read---MANUF_ID---0x1E---ATMEL

先选择目标:53 54 06 00 00 03 01 02 00      Request: 02--Signature, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 01 00 01Request: --Display(read)data, Address:0x0001
回复数据:53 54 03 00 00 01 81            Answer:FAMILY_CODE---0x81---AT90CANxxx family

先选择目标:53 54 06 00 00 03 01 02 00      Request: 02--Signature, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 02 00 02Request: --Display(read)data, Address:0x0002
回复数据:53 54 03 00 00 01 97            Answer:PRODUCT_NAME---0x97---128 Kbytes of Flash

先选择目标:53 54 06 00 00 03 01 02 00      Request: 02--Signature, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 03 00 03Request: --Display(read)data, Address:0x0003
回复数据:53 54 03 00 00 01 00            Answer:PRODUCT_REV---0x00---Rev 0

先选择目标:53 54 06 00 00 03 01 03 00      Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len--3, 01--Select Memory space, Memory space03--Boot Loader Information, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 00 00 00Request: --Display(read)data, Address:0x0000
回复数据:53 54 03 00 00 01 04            Answer:Boot loader Version 04

先选择目标:53 54 06 00 00 03 01 05 00      Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len--3, 01--Select Memory space, Memory space05--Device registers, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 E2 00 E2Request: --Display(read)data, Address:0x00E2--CANBT1
回复数据:53 54 03 00 00 01 08            Answer:CANBT1 = 0x08

先选择目标:53 54 06 00 00 03 01 05 00      Request: 05--Device registers, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 E3 00 E3Request: --Display(read)data, Address:0x00E3--CANBT2
回复数据:53 54 03 00 00 01 0C            Answer:CANBT2 = 0x0C

先选择目标:53 54 06 00 00 03 01 05 00      Request: 05--Device registers, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 E4 00 E4Request: --Display(read)data, Address:0x00E4--CANBT3
回复数据:53 54 03 00 00 01 37            Answer:CANBT3 = 0x37

先选择目标:53 54 06 00 00 03 01 04 00      Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len--3, 01--Select Memory space, Memory space04--Boot Loader Configuration, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 00 00 00Request: 0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len--5, 00--Display(read)data, 0x0000--Start Address, 0x0000--End Address--BSB_DEFAULT in boot_conf
回复数据:53 54 03 00 00 01 FF            Answer:BSB = 0xFF

先选择目标:53 54 06 00 00 03 01 04 00      Request: 04--Boot Loader Configuration, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 02 00 02Request: --Display(read)data, Address:0x0002--EB_DEFAULT in boot_conf
回复数据:53 54 03 00 00 01 FF            Answer:EB = 0xFF

先选择目标:53 54 06 00 00 03 01 04 00      Request: 04--Boot Loader Configuration, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 01 00 01Request: --Display(read)data, Address:0x0001--SSB_DEFAULT in boot_conf
回复数据:53 54 03 00 00 01 FF            Answer:SSB = 0xFF

先选择目标:53 54 06 00 00 03 01 04 00      Request: 04--Boot Loader Configuration, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 08 00 08Request: --Display(read)data, Address:0x0008--SA_H_DEFAULT(Start Application Word Address H) in boot_conf
回复数据:53 54 03 00 00 01 00            Answer:SA_H = 0x00

先选择目标:53 54 06 00 00 03 01 04 00      Request: 04--Boot Loader Configuration, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
再操作地址:53 54 03 00 00 05 00 00 09 00 09Request: --Display(read)data, Address:0x0009--SA_L_DEFAULT(Start Application Word Address L) in boot_conf
回复数据:53 54 03 00 00 01 00            Answer:SA_L = 0x00

先选择目标:53 54 06 00 00 03 01 00 00      Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len--3, 01--Select Memory space, Memory space00--Flash Memory, Page00
回复OK:    53 54 06 00 00 01 00            Answer:--Selection OK
准备Flash Memory操作

说明文档ourdev_614828XDS64J.pdf(文件大小:668K) (原文件名:GCC_CAN_bootloader-rev-1.1.0.pdf)
单片机bootloader代码ourdev_614829OOJ23B.zip(文件大小:7.40M) (原文件名:AT90CAN3264128 Software Library-can_bootloader-2007.zip)

HYFAVR 发表于 2011-2-8 11:48:00

mark

wangzugong 发表于 2011-2-9 20:04:57

今天搞了一个上位机软件,实际是利用pei99888发布的VB软件修改而来。在此特别感谢pei99888先生!
只做了实现上面连接功能的简单修改,很不完善,其中许多是不需要的。也请对VB熟悉的TX不吝指教,谢谢!

http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_615041Y6CR52.JPG
(原文件名:TT截图未命名.JPG)

点击此处下载 ourdev_615043YAOKUR.rar(文件大小:9K) (原文件名:CAN_BootLoader.rar)

前面少传了一个说明文件,这里补上:
点击此处下载 ourdev_615136RT0J1Y.pdf(文件大小:250K) (原文件名:AT90CAN128-64-32_CAN Library.pdf)

zoto 发表于 2011-2-9 20:32:12

zan

ztxfhl 发表于 2011-2-9 20:36:40

先顶一下

wangzugong 发表于 2011-2-10 16:21:09

二、启动应用程序(单片机无回复):
2.1、跳转到地址启动应用程序
53 54 04 00 00 04 03 01 00 00Request: 0x0004((“CRIS”<<4)+4)--ID_START_APPLI, len=4, 03 01 -- Start Application at W-Add., 00 00(0x0000--Jump W-Add.。该地址是前面连接时读取的Start Application Word Address)

2.2、复位启动应用程序
53 54 04 00 00 02 03 00      Request: 0x0004((“CRIS”<<4)+4)--ID_START_APPLI, len=2, 03 00 -- Start Application with reset

bluelool 发表于 2011-2-10 20:20:50

mark

wangzugong 发表于 2011-2-12 15:47:54

三、空检测:
3.1、存储器空
选择页面:53 54 06 00 00 03 02 00 00      Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len=3, 02--Select Page, Memory space00--Flash Memory, Page00
回复OK:53 54 06 00 00 01 00            Answer:0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len=1, 00--Selection OK
检测操作:53 54 03 00 00 05 80 00 00 FF FFRequest: 0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len=5, 80---Blank check, 0x0000--Start Address, 0xFFFF--End Address
回复成功:53 54 03 00 00 00               Answer:0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len=0, Blank check OK
选择页面:53 54 06 00 00 03 02 00 01      Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len=3, 02--Select Page,Memory space00--Flash Memory, Page01
回复OK:53 54 06 00 00 01 00            Answer:0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len=1, 00--Selection OK
检测操作:53 54 03 00 00 05 80 00 00 DF FFRequest: 0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len=5, 80--Blank check, 0x0000--Start Address, 0xDFFF--End Address
回复成功:53 54 03 00 00 00               Answer:0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len=0, Blank check OK

3.2、存储器不空
选择页面:53 54 06 00 00 03 02 00 00
回复OK:53 54 06 00 00 01 00
检测操作:53 54 03 00 00 05 80 00 00 FF FF
回复不空:53 54 03 00 00 02 00 00         Answer:0x0003((“CRIS”<<4)+3)--ID_DISPLAY_DATA, len=2--Error on Blank check, 0x0000--1st Failed Address

注:
1、前面已经存在“目标选择”和“回复OK”:
   选择目标:53 54 06 00 00 03 01 00 00 --- Select Memory space, Memory space00, Page00
   回复OK:53 54 06 00 00 01 00       --- Selection OK
2、操作Flash Memory时,在选择目标后还要选择页面;
3、页面2的结束地址是0xDFFF,对应8K字节的BootLoader;
4、检测完成后因未改变已经选择的目标存储器,不需要再“目标选择”;
5、如果存储器不空,只回复第一个检测到的地址。

strongtang 发表于 2011-2-14 11:10:25

mark

wangzugong 发表于 2011-2-16 11:16:55

四、擦除:
先选择目标:53 54 06 00 00 03 01 00 00Request: 0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len=3, 01--Select Memory space, Memory space00--Flash Memory, Page00
回复OK:    53 54 06 00 00 01 00      Answer:0x0006((“CRIS”<<4)+6)--ID_SELECT_MEM_PAGE, len=1, 00--Selection OK
再执行擦除:53 54 01 00 00 03 80 FF FFRequest: 0x0001((“CRIS”<<4)+1)--ID_PROG_START, len=3, 80 FF FF -- Erasing
回复成功:53 54 01 00 00 01 00      Answer:0x0001((“CRIS”<<4)+1)--ID_PROG_START, len=1, 00

回复成功这条在GCC_CAN_bootloader-rev-1.1.0.pdf里竟然没有找到,其它版本的说明里也没有,很奇怪。但实际上是可用的,已经过验证。

wangrong 发表于 2011-4-6 20:48:55

厉害,建议阿莫给加个酷

Hello_World 发表于 2011-4-6 22:55:45

楼主高手,COOL!

CarlLee 发表于 2011-4-12 18:47:07

mark,有空研究下,期待楼主继续~~~~~

wangzugong 发表于 2011-12-16 22:02:16

因为我今年忙另外一个项目,难道有时间继续研究.

后来把AES加密代码添加进去了,实际就是引用了shao的代码。

可惜shao的上位机代码是用delphi写的,我不懂。默认的加密是PC128,用起来挺麻烦。等有时间我再研究。

希望有更多的人一起研究CAN bootloader。

不知道是否有人使用C++或者VB写过AES加密。

Sky2162 发表于 2019-2-11 14:57:01

先顶一下

horary 发表于 2020-5-23 13:48:11

顶一下,学习学习!
页: [1]
查看完整版本: 春节有空,整理了AVR的CAN Bootloaer,希望抛砖引玉,共同研究