请教有经验的朋友一个关于mega48 isp下载的问题 附逻辑分析仪波形
之前发过一个mega8与mega48的isp下载的求助帖,可能是我没有描述得清楚,没有人回帖,这次附上逻辑分析仪波形,希望有经验的朋友帮忙分析下逻辑分析仪波形中数据线的定义
Chan D0 SCK
Chan D1 MOSI
Chan D2 MISO
Chan D3 XTAL1
Chan D4 RESET
1http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226455.JPG
2http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226456.JPG
3http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226457.JPG
4http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226458.JPG
5http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226459.JPG
6http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226460.JPG
7http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226461.JPG
图片从上到下按照顺序1 2 3 4 5 6 7定义,
图片1中波形内容我标示为5部分,图片2 3 是图片1中第一部分的放大图,图片 4 5为图片1中第二部分的放大图,图片6 7 为图片1中第三部分的放大图
图片1中内容是我在用isp下载方式向flash中0地址开始依次累加地址,并向地址中写入数据55捕捉的波形。
我分析的结果,第一部分为写入0xac,0x53,读取0x53后正确进入编程模式,第二部分为向0地址低地址及高地址写入数据55,第三部分为向1地址低地址及高地址写入数据55,不知我分析的对不对。之后的波形依此类推。具体的我就不列出了,如果哪位朋友帮我分析的时候觉得需要,请告诉我,我再贴上。
现在我存在的问题,对于向flash中写入数据的操作,我对mega8和mega48芯片都进行的试验,发现mega8写入数据正常,mega48数据写入每个扇区的前几个字节都不正确,不等于55,均为ff。请有经验的朋友帮我看看波形哪里有问题 现在我存在的问题,对于向flash中写入数据的操作,我对mega8和mega48芯片都进行的试验,发现mega8写入数据正常,mega48数据写入每个扇区的前几个字节都不正确,不等于55,均为ff。请有经验的朋友帮我看看波形哪里有问题
//===================================================================================================================================
原因是TAmega48进行FLASH页写入时候,数据手册给出的数据有错误。
下面是错误的:
1http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226537.gif
下面是正确的:
2http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226538.gif 感谢 lzf713 的回复
不过有一点我可能没有说清楚,就是M8和M48进行flash写入,我的程序是跑得一样的代码,因为我是先调的M8,后来看到M48的flash的容量以及扇区大小我也意识到可能是手册有误,这里应该是避免掉了的。
另外一点,对于写入eeprom,程序也是跑得同样的代码,M8写入数据没有问题,M48写入数据也有部分数据不正确,之后我将写入eeprom的代码改成一个地址同样数据写入两次,写入eeprom数据就正确了,这个地方我也没有理解,还请明白的朋友解释下,多谢。 1http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_226581.JPG
补充上传我下载到的M48的手册中关于写入flash的命令,看来M48的错误还不少哦 你到底在做什么?是在做AVR下载的PC软件?
M8和M48尽管引脚兼容,但内部结构有差异的,M8的程序在M48上不一定能正常执行的,需要重新改写和编译. 感谢 machao 的回复。
可能是我没有说清楚,我在做的相当于是 Atmega系列单片机的串行下载线。
可能你以为我是在用M8开发产品,然后想把M8的源程序直接烧写到M48中运行,并不是这样的。 恳请马老师再多给些指点。 为什么看的人挺多的,回的人很少呢,我想是不是还是我没有表达清楚自己的意思。
这样说明一下看能不能有人给点建议,另外如果有朋友觉得我应该再具体说明什么,以便分析问题,也请指出,多谢。
其实我就是用单片机的IO口来模拟的AVR单片机串行下载的工作,即SCK ,MOSI ,MISO ,XTAL1 ,RESET 编程信号均是通过IO口模拟来实现的。
在做完我认为符合AVR串行下载时序的单片机程序后我对M8和M48芯片做了测试,向M8芯片的flash及eeprom中写入数据后读出均为要写入内容,即写入成功了,向M48芯片中写入数据后再读出发现,flash中第一个扇区的前8个字节不是要写入内容,为FF,之后每个扇区的前6个字节也不是要写入内容,也为FF,eeprom中数据也比较奇怪,偶数地址的数据均不是要写入内容,全为FF,即0、2、4、……地址均为FF,奇数地址读出后均为要写入内容,即1、3、5、7、……奇数地址均写入成功了 。
为什么单片机执行的是同样的代码,对于M8芯片写入就没有问题,对于M48芯片的写入就有数据不对,困扰了我很久了,希望有经验的朋友指点下
顺便提一下,对于M48 eeprom写入不正确的情况,我把每个地址的数据重复写入一次,即如果我要向0~7地址写入数据55,那么我将硬件程序修改为0地址写入55 0地址写入55,1地址写入55 1地址写入55,2地址写入55 2地址写入55……,向eeprom中的写入数据就成功了。
修改之前的程序如果向0~7地址写入数据55,那么执行的操作就是0地址写入55,1地址写入55,2地址写入55……。
请看到这篇帖子的朋友随便说点什么建议都好,多谢
页:
[1]