以下来自网络,希望有用
下载Bootloader到AT90CAN128后,发现可以使用avrub进行程序下载,只是下载后仍然提升等待命令,就是不能运行用户程序。开始以为像ATmega2560那样,程序不能正常跳转到用户程序。但是读取AT90CAN128中Flash后发现,用户程序虽然下载到Flash中,但是只有低字节成功写入,高字节都是0。
仔细查找AT90CAN128的数据手册,发现它并没有像ATmega2560那样的EIND寄存器,但是有一个RAMPZ寄存器。本来这个寄存器是用于控制访问外部RAM的,但是在AT90CAN128中,它用于控制ELPM/SPM指令访问Flash范围。在AT90CAN128中,RAMPZ寄存器只有bit0有效。
当RAMPZ0为0时,访问低64K范围的Flash;当RAMPZ0为1时,访问高64K的Flash。于是在Flash写入函数中,插入了RAMPZ设置。再测试,Bootloader就可以正常运行了。
改进后的程序在附件中,供大家参考。附件中还有几个小测试程序,用于测试Bootloader。例子中的Bootloader,占用2K words的Boot空间,起始地址从0xF800(word)开始。
|