本帖最后由 jf201006 于 2021-4-3 18:38 编辑
一、背景 本贴源于去年朋友的一个项目,使用了几千个ATmega168,配置使用内部8M的RC振荡器,低位FUSE为E2,重新编译了bootloader,与程序一起写入单片机。后来有十几二十个产品返回来,当初板子上预留了IPS焊盘,使用progisp1.72不能进入编程模式。更换了168就好了,这些坏的不知是什么问题。 想用以前做的并行编程重写熔丝位,但写FUSE低位为FF(NANO的值)还是62(出厂默认),还是重写E2(开发时的值)?因为每次写入不同的熔丝值都要整改NANO程序中的FUSE值,重新下载到NANO板上,太麻烦了。还有一个就是很想知道不能进入ISP编程模式是不是熔丝位出了问题。今年春节过后,比较空,手就痒痒,总想单片机涨价了,这几片全部都坏了吗? 二、目标 想着能不能每次烧写熔丝值可以随意改变,同时也能读出芯片原来的熔丝值,编个上位机程序来控制NANO?不,我是小白,不会。就会用串口打印个“Hello,world!”,对呀,就用串口来个人机对话吧:显示芯片的熔丝值、输入要写入的熔丝值。 三、硬件 使用烂大街的NANO板,这个之前做过高压并行写熔丝的,源程序有的,打算再做个读取芯片熔丝位的模块和串口读取的模块,集成到一起就可以了。上次是用面包板试验的,想想都烦,反正春节后也不忙,就打个板吧。当时想着ATmega系列的芯片都可以用,就多设计了一点,利用空闲时间画个板子、编个程序。 四、过程 先看看画的图和打的板子,不许笑哦 想想简单,做起来就是一个不断的挖坑、填坑过程,三天打鱼两天晒网的断断续续弄了一个多月。有些照片也没有拍,只能靠描述。主要的难点有两个: 一个是打板出了问题。想用并行编程读取一下坏的168的熔丝位,主要是好奇,想知道这个168为什么在产品上不能工作。按手册PDF的要求设置各引脚后,读回的总是不对,写入默认熔丝值,读回已不是写入的值了,progisp还是不能进入编程模式。什么问题呢?怀疑程序、怀疑手册、直至怀疑人生!分析下:写入程序是以前写的,实战过的,没有问题,那就应该是硬件问题了。经过检查,原来是并行数据DATA[7:0]画反了。只好飞线解决。 原因:由于用立创EDA做的图,知道NANO的模型的A4和A5有问题,自动布线进不会连接的,又懒得修正模型,就随手用线连接,不使用网络标号了。但正是这蛋疼的手工连线,使得对目标芯片的D7-D0线序在转接板的接口上反了,成了D0-D7。 二一个错误是元件参数设置有问题。写入默认熔丝值(0x62 0xDF),progisp能进入编程模式了,读出是默认值(62 DF),但并行编程读出的是63DF。WHAT?又用progisp写入产品中使用的熔丝值:E2DD,但并行编程读出的是E3DD。能读写,说明硬件没有问题了。这又是哪里有错呢?在此又怀疑人生三分钟! 分析了一下, 错在数据D0上,D0始终为“1”。 原因:由于使用物理串口,就是NANO的D0和D1,这和读写芯片时(用NANO的D7-D0)要复用这两个脚,而NANO的D7-D3是直接连接到接口上的,D0、D1是同时接了USB转TTL(CH340)的,有上拉电阻和LED指示灯。所以D0、D1若通过1K电阻连接到目标芯片上,对目标芯片的读写数据会因上接面而误成“1”,解决的方法是适当减小这个串联电阻(实验用470-560都可以),但,直连也是不行的,为啥?聪明的你,想想就明白了! 程序方面就是一个一个模块调试,通过后拼接起来。因为有板子的错误、元件参数的错误,所以为了找出问题,只好一个模块一个功能完成。严格地按手册说明写程序也会带来灾难,上次编写写熔丝程序时,发现手册中给出的波形有错,这次鬼才信的我用了一本“假”手册: 英文原版 BS1置“1”是读取标定字节 为此翻看了好几个芯片的手册,唯有我看的那个中文版的是错的!我是不是应该去买彩票啊:titter: 这期间还打了第二块板,搬板。。。各种填坑 这里可见对两种不同宽度转接板都可支持。 五、说明 1、板子,使用NANO对目标芯片ATmega168进行并行编程,168是AU封装的,使用转接板。另外增加20PIN的接口中,引出并行编程的各信号,可以扩展对别的芯片用。 2、我用的板子说明 因为是断断续续的调试,单位家里带着,还要用个12V的编程电源,感觉不方便,就X宝搞了个DCDC电源,将5V转为12V用了。 原本接12V的两个焊孔也接了一个红LED,观察DCDC电源有没有工作。绿色LED是运行指示灯,进行入并行编程时会熄灭。板子增加了PAGEL和BS1、XA1和BS2两个短路跳线,是想用作对比较特别的芯片ATtiny2313支持的。因为有坛友问到过,当时是在程序里将其定义为并联复用,这里预留物理连接,不知可行否,也请坛友验证。 3、一点资料,通过测试没有问题,PDF中的错误,这里给出正确的时序图: 读取熔丝位和标识位的时序图: 常用ATmega系列芯片的基本参数对比: 4、关于这套装置的使用就不多说了,另外有使用说明。
谢谢观赏!!
对了,好不好的临走前点个赞呗:tongue:
|