|
本帖最后由 guew 于 2013-5-8 16:51 编辑
诸位,小弟想写个的8位avr的bootloader程序。
结合网上流传的那个马老师十年前的程序,和atmega32的datasheet,我有如下几个疑惑:
1. 既然页写(page write)的数据来源是temporary buffer,那么这个buffer在硬件上是不是一个独立于flash,eeprom与ram的储存空间?
如果是,那么每次执行页写时,数据都实实在在的从那个独立的buffer拷贝到了目标页上的?
如果不是,那么页写的操作机制是不是这样的:1. 加载页:数据写到App区(RWW区)2. 页写:仅仅是将已经写好数据的区域(加载页时写的数据)标识(label)一下,告诉单片机:哎,这就是page1了~
2. datasheet上说Z 寄存器在给SPM指令寻址时,是有格式要求的(见附件)如:最低位是0,然后是PCWORD,再是PCPAGE。但马老师的程序中,不管是加载页,还是页写,都没有按这个要求来做,而是直接赋值,比方说下面这个加载页函数。- for(i=0;i<SPM_PAGESIZE;i+=2)
- {
- boot_page_fill(i, data[i]+(data[i+1]<<8));
- }
- void boot_page_fill(unsigned int address,int data)
- {
- asm("mov r30,r16/n"
- "mov r31,r17/n"
- "mov r0,r18/n"
- "mov r1,r19/n");
- SPMSR = 0x01;
- asm("spm/n");
- }
复制代码 希望大伙一起来讨论讨论。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|