搜索
bottom↓
回复: 11

经验:多动脑多试验,多从自己身上找原因,不要一发现问题就怀疑是AVR的缺陷

[复制链接]

出0入0汤圆

发表于 2007-4-22 08:56:21 | 显示全部楼层 |阅读模式
昨天没事去双龙逛,碰见一个白头发老头,用的也是M169,只使用io功能,扩展了一个128K的sram。PA口低8位地址,PF口高8位地址,PC口数据,还有读写片选啥的等。汇编写的。AVRstudio环境。试验程序如下,将sram的256个地址写入++的数据,然后读取从串口发送出来。表现错误,PA口地址++改变,操作sram读写正常,PF口地址++改变,操作sram读写错误,数据低128个相同,高128个相同。自己搞了10天了,实在搞不定了。老头怀疑M169有bug。偶告知他不能轻易怀疑芯片,他说自己搞了很多年单片机了,没有见过这么难控制的了。PF口肯定有问题。



由于PF口做为了地址输出,故关闭了jtag和ad功能。没有办法仿真,只能spi烧录,串口发送数据验证。首先查看熔丝烧录正确,再查看原理图和pcb,没有问题。然后就开始看程序。



好几年不用汇编了,看起来有点生了,呵呵。看其写的读写程序,感觉也没有啥问题。在其pcb上试验,现象若然如此。修改了一下读写函数,没有效果。然后怀疑是初始化错误了。



io口都进行了初始化,比较长,老头还特意对AD,模拟比较器进行了操作,关闭了AD,模拟比较器。告诉他不用操作AD,缺省就是关闭的。模拟比较器默认是打开的,可以关闭。大致看了一下没有啥问题。取消了对AD寄存器的操作。烧录试验。故障依旧。



拿出来示波器看pf口的波形。果然发现pf口波形特殊,很奇怪的样子。像不规则的锯齿波,不是方波输出。低电平不到0,pf也是一个通用的io的,怎么可能呢。用pa口地址则正常。检测pc口数据输出也正常。



怀疑其pcb板有问题,找了一个开发板试验,关闭jtag功能,烧录试验故障依旧,pf口输出的波形不规则。



至此老头彻底怀疑芯片有bug,pf口有问题。偶不相信。



确认了不是其板子的问题。感觉应该还是软件不对,是pf口设置有问题。哪里出了问题呢。还是从新试验吧。



完全推翻老头的程序,从reset开始改写。只写了一个pf口的初始化,然后就在该口输出高电平,低电平的循环,烧录,示波器显示正确。由此看来芯片本身没有问题,肯定是程序的bug了。老头不服,认为程序没有问题。



将这个电平输出的程序,放在原来的初始化程序末端,烧录试验,pf口没有波形输出。然后依次屏蔽一段程序试验,发现到设置模拟比较器的一句话,关闭则正常,打开则错误。暂时关闭此句再次试验sram读写,完全正常。



老头的模拟比较器关闭这样写:

ldi   r16,$80

sts   ACSR,r16

这才恍然大悟,改成:

ldi   r16,$80

out   ACSR,r16

正常。



看手册,查看M169的ACSR寄存器,发现其在0x30(0x50)位置,括号里的是内存地址。在AVRstudio的M169def.inc里,ACSR=0x30。由于老头没有用out,而用了sts指令,导致其并没ACSR寄存器,而是设置了0x30-0x20位置,这个位置是啥呢?刚好是DDRF寄存器啊,0x10(0x30)。



真相大白了,正是这句看起来没有问题的话,导致设置好的ddrf寄存器,又被改写成了只有pf7输出,其PF其他口输入的现象。



所以才出现了开始描述的前128个字节数据相同,后128个数据字节相同的现象。也是我汇编好几年没用了没有仔细看初始化函数,没有注意到这个out和sts指令。其实我开始看到了这个关闭模拟比较器的语句,没有引起注意。导致查找bug花了一个多小时。



总结经验:

1,不要轻易怀疑芯片。

2、写汇编语言一定要熟悉指令。

3、出了问题要学会如何查找。



写这个也是给初学者一个提醒吧,写程序一定要严谨。与大家共勉!

-----此内容被zsmbj于2007-04-22,09:06:13编辑过
头像被屏蔽

出0入0汤圆

发表于 2007-4-22 09:00:13 | 显示全部楼层
这是zsmbj在某个贴子上的回复。我觉得很有价值,就将它单独处理成一个主题了。



我们在做邮购服务工作时,经常会接到一些语气不太好的质疑电话:“为何用你们的芯片我的程序不行? 使用我原来的就可以?你们卖的芯片是不是假的?!”



可以很负责任地说:所有这些质疑的电话,全部都证实是自己的编程问题。到目前为止,我们没有发现过任何的AVR芯片的质量缺陷报告。

出0入0汤圆

发表于 2007-4-22 10:36:51 | 显示全部楼层
感慨颇深,不过要是老头子用C语言编写的话就不会有问题了。

出0入0汤圆

发表于 2007-4-22 11:24:55 | 显示全部楼层
“老头”这俩字看着别扭,除非你比他岁数大

出0入0汤圆

发表于 2007-4-22 12:19:25 | 显示全部楼层
学习

出0入0汤圆

发表于 2007-4-22 15:56:13 | 显示全部楼层
一般人绝望的时候,总会找一点理由和接口安慰解脱自己,人之常情,老实说,我也经常怀疑芯片是不是坏了,哈哈哈……

出0入0汤圆

发表于 2007-4-22 18:28:17 | 显示全部楼层
“我们在做邮购服务工作时,经常会接到一些语气不太好的质疑电话:“为何用你们的芯片我的程序不行? 使用我原来的就可以?你们卖的芯片是不是假的?!” ”

*******************************************************************************



这客户有些不厚道了,MCU在代理商那里还有remark的么??别的不敢说,阿莫至少不会卖remark的AVR,因为阿莫根本就进不到remark的AVR的货:)

出0入0汤圆

发表于 2007-4-22 20:01:21 | 显示全部楼层
有时就是这样,特别是当我采用的芯片是小厂家的时候,特别容易理直气壮怀疑芯片问题,不过确实也碰到过芯片有问题的情况,烧写都正常,但就是不工作,退回厂家,厂家解释是静电击穿。



所以,我现在也特别注意防静电问题。
头像被屏蔽

出0入0汤圆

发表于 2007-4-22 20:12:22 | 显示全部楼层
我们邮购部的芯片的运输,全部使用了严格的防静电包装 :)

出0入0汤圆

发表于 2007-4-23 21:10:38 | 显示全部楼层
AVR 是不错的芯片!我烧程序从来都带电插拔!用了不少吧,没有坏过

出0入0汤圆

发表于 2007-4-23 21:22:55 | 显示全部楼层
老实说,我很少怀疑编程芯片是不是坏了,而是怀疑"我的程序肯定哪儿有毛病了",可能水平有限,而最终总是找到毛病,确实是程序出错了,邮购部的芯片我买过几次,光论包装,呵呵,怎么可能remark!?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 05:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表