搜索
bottom↓
回复: 12

AVR芯片DIY高压编程(解熔丝位新方法,不求人!)

[复制链接]

出0入0汤圆

发表于 2009-8-3 19:35:05 | 显示全部楼层 |阅读模式
设置熔丝后芯片无法正常工作?如果是设成了外部晶振的话可以用有源晶振来解决,如果是其他的话,有源晶振就没法了,若用高压编程,买一个又太贵,自己跟据网上做一个又不方便,怎么办?
有个方法,自己看芯片Datasheet编个程序,烧进一块能用的芯片,与被锁芯片连接上,找来个12V电源共地接上,模拟高压编程,OK!
我设置几片mega8和mega128为外部晶振是,设后总是不能工作,用了几次模拟高压编程解回来。
问个问题?为什么我设置的外部晶振不能用?
(原文件名:ourdev_466601.jpg)
我设置的就是这样。那个JTAGEN和103模式去掉过也不得。
我的模拟高压编程程序#include<iom128v.h>
#include<macros.h>
#include<iobit.h>

#define uint unsigned int
#define uchar unsigned char

#define fuse_l 0xe1
#define fuse_h 0xd9
#define fuse_ex 0xff

#define data_out DDRB=0Xff
#define data_in DDRB=0X00
#define data PORTB
#define reset_out DDRE0_1
#define reset0 PORTE0_0
#define reset1 PORTE0_1
#define xtal_out DDRE1_1
#define xtal0 PORTE1_0
#define xtal1 PORTE1_1
#define xa1_1 PORTD6_1
#define xa1_0 PORTD6_0
#define xa0_1 PORTD5_1
#define xa0_0 PORTD5_0
#define pagel_0 PORTD7_0
#define pagel_1 PORTD7_1
#define bs1_0 PORTD4_0
#define bs1_1 PORTD4_1
#define wr_0 PORTD3_0
#define wr_1 PORTD3_1
#define oe_0 PORTD2_0
#define oe_1 PORTD2_1
#define bs2_0 PORTD0_0
#define bs2_1 PORTD0_1


void delay(uint count)
{
for(;count>0;count--);
}

void device()
{
DDRC=0XFF;
PORTC=0X00;
DDRD1_0;      //RDY_IN
PIND1_0;
PORTD1_1;
DDRD2_1;       //OE WR BS1 XA0 XA1 PAGEL out
oe_1;
DDRD3_1;
wr_1;
DDRD4_1;
bs1_0;
DDRD5_1;
xa0_0;
DDRD6_1;
xa1_0;
DDRD7_1;
pagel_0;
reset_out;     //reset引脚为输出
reset1;     
DDRD0_1;
bs2_0;
xtal_out;       //高电平加载信号
xtal0;
data_out;
data=0xff;
}


void in_pro()
{
uchar i;
delay(150);               //延时100us以上
reset0;
for(i=0;i<10;i++)
{
xtal1;
xtal0;
}
xa0_0;
xa1_0;
bs1_0;
pagel_0;
delay(1);
reset1;
}



void remove()
{
uchar a=0;
xa1_1;
bs1_0;
data=0x80;    //擦除芯片
xtal1;
delay(10);
xtal0;
wr_0;
delay(10);
wr_1;
do{
     a=PIND;
   }while(!(a&0x02));
xa1_0;
PORTC=0XFF;
}


void write_fuse()
{
uchar a;
xa1_1;
bs1_0;
data=0x40;
xtal1;
delay(10);
xtal0;
xa1_0;
data=fuse_l;
xtal1;
delay(10);
xtal0;
bs1_0;
bs2_0;
wr_0;
delay(10);
wr_1;
do{
     a=PIND;
   }while(!(a&0x02));
PORTC=0X01;                        //到此fuse_l

xa1_1;
bs1_0;
data=0x40;
xtal1;
delay(10);
xtal0;
xa1_0;
data=fuse_h;
xtal1;
delay(10);
xtal0;
bs1_1;
bs2_0;
wr_0;
delay(10);
wr_1;
do{
     a=PIND;
   }while(!(a&0x02));
bs1_0;
PORTC=0X02;                    //到此fuse_ex

xa1_1;
bs1_0;
data=0x40;
xtal1;
delay(10);
xtal0;
xa1_0;
data=fuse_ex;
xtal1;
delay(10);
xtal0;
bs1_0;
bs2_1;
wr_0;
delay(10);
wr_1;
do{
     a=PIND;
   }while(!(a&0x02));
bs2_0;
PORTC=0X03;                       //到此fuse_ex
}

void main()
{
device();       //端口驱动
in_pro();       //进入并行编程
remove();      //擦除芯片
write_fuse();   //写熔丝位

while(1);
}


这个是高压并行编程的程序,只写了擦除芯片和熔丝位。
有不妥之处请不吝赐教!
还有,帮我解答我的设置外部熔丝位的问题,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-8-3 20:55:13 | 显示全部楼层
好的。OCDEN打钩

出0入0汤圆

发表于 2009-8-3 21:57:39 | 显示全部楼层
好的,顶一下.

出0入0汤圆

 楼主| 发表于 2009-8-10 20:13:53 | 显示全部楼层
得过一次又不得了啊?怎么回事?

出0入0汤圆

发表于 2009-8-10 20:22:49 | 显示全部楼层
DDDDDDDD

出0入0汤圆

 楼主| 发表于 2009-8-10 21:05:24 | 显示全部楼层
有没有告诉一下我怎么设外部晶振啊?

出0入0汤圆

发表于 2009-8-12 17:14:31 | 显示全部楼层
好,顶一下

出0入0汤圆

发表于 2009-8-12 19:23:24 | 显示全部楼层
哪天改成M48的,把手头两片M48也解决一下

出0入0汤圆

发表于 2009-8-23 11:55:22 | 显示全部楼层
支持 我有两片M16看样子像是锁了 但没办法用你的方法 偶刚学看不懂

出0入0汤圆

发表于 2012-7-21 11:21:18 | 显示全部楼层
希望有试过的同学来介绍一下经验。

出0入0汤圆

发表于 2012-7-25 14:50:54 | 显示全部楼层
a7778066 发表于 2009-8-10 20:13
得过一次又不得了啊?怎么回事?

请问像你这种高压并行恢复熔丝位,有些单片机(attiny2313)端口是有两个功能,请问这个应该怎样操作啊?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-11-5 16:33:29 | 显示全部楼层
路过。看不明白。

出0入0汤圆

发表于 2013-4-7 14:48:08 来自手机 | 显示全部楼层
学习一下....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 03:22

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

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