用单片机解锁笔记本电池被锁的教程及分析(电池管理芯片为BQ3060)

上个星期看到坛友发了个驱动电池管理芯片BQ40Z50,详情看这里,想起我古老的笔记本电脑的电池被锁了很多年了,现在电芯都它用了。想想现在自己的理解能力,编程能力都有了提升。加上现在的英文翻译软件很牛了,资料也好找了,于是,动起来!

通过上TI的网站,找齐了BQ3060必要的资料,用STC15F104E、TM1651搭建好电路,开始了编程序的艰难过程。说起来很奇怪,我自己写的程序不管怎么改,只能正常读到一个字节。无奈中下了他的程序,改改使程序用于STC15F104E,发现也只能正确读一个字节。又只能用回自己的程序,却惊喜的发现能正确的读到两个字节,同时也发现时而错码,时而正常。反复的阅读SMBus协议文件,感觉是BQ3060没有及时应答造成的。于是改从机应答程序。才终于调通了程序,正确的读到数据。

这个是读电池电压的示波器的波形,读出的电压是(0x2e24)=11812mV=11.812V

接下来,就是要知道BQ3060有哪些命令了,哪些命令导致了锁电池,哪些是解除此命令的命令了
这个是笔记本电脑电池(地址都是0x16)的通用命令了

在这些命令中,要解锁电池,要用到的命令是:
1:0x00,写解锁命令就用它了,这个命令里还有很多子命令。

下面的应该是BQ3060的专用命令了(其它的芯片资料没看过)

在这些命令中,重要的命令都在这了:
b1:0x53:这个命令只能读,它记录了电池被锁的原因,我用单片机给它个命令Read_bq3060(0x53),返回的数据是0x4c02,转成二进制是:0100 1100 0000 0010,这4个1 的意思分 别是1:一个永久性的故障已经产生;1:过流放电;1:过流充电;1:过电压。

b2:0x62:这个命令能读写,是为了消除上面4个1而存在的。它记着的是一串密匙,只要把它通过0x00命令写入到BQ3060中,就能将上面的4个1变为0.给它个命
令Read_bq3060_four(0x62);,返 回的数据是0x17122673,有这个,解锁就两条命令的事:Write_BQ3060_two(0x00,0x2673); //低两位
Write_BQ3060_two(0x00,0x1712); //高两位,当然没这么简单,行不行要看下面的命令看么说。

b3:0x54:这个命令只能读,它记录了BQ3060的运行状态,给它个命令Read_bq3060(0x54),返回的数据是0x8840,   转成二进制是:1000 1000 0100 0000,
1,说明接有电池, 0,表明BQ3060是可以完全访问的,上面的解锁命令是可以执行的;
0,如果这个是1的话,就表明BQ3060是加锁的,是不可以改写数据的; 1,电芯寿命到了;
1,电池状态(0x16),表示正在放电。

b4:0x60:这个命令能读写,也是一串密匙,是当BQ3060被上锁后(不是所说的电池被锁),用来转变成未加锁状态,使用方法同0x62.

b5: 0x61:这个命令能读写,也是一串密匙,是当BQ3060未被上锁,用来转变成完全访问状态,使用方法同0x62.

总结:当b3中的0是0,0也0,b2中的命令就能执行,就能完成电池解锁,将b1的0x53的值全变为0。手册中提示密匙是要倒着写入,也就是0x7326和0x1217,不过实践是不能倒着写的.如果电池解锁后,觉得还是要给BQ3060上锁,保护芯片工作不被干扰,就给它上锁,给个命令Write_BQ3060_two(0x00,0x0020) 就行。至于其它电量校正,也不是什么麻烦事了,麻烦的是手头没有新电池,也就不多说 了。

接下来是程序的编写问题:
c0:在从机应答子程序中,有一个等待从机响应的代码while(SDA);//等待从机拉低数据线,表示不忙,如果从机无响应,程序就会卡在这,不过不会有影响,
有了这个,反而好知道从机正常不 正常。
c1:CMBus总线协议手册1.1版本中只介绍了两个字节的读写,块读写(4个字节以上)并没有给出时序图,2.0版本中也只是给个框图,这对0x62命令很不友好。

通过反复试验,才找到正确的 读写方法,读4个字节的命令是上面的波形图中,在0x17后加上一条读一个字节命令chl=IICreceiveByte();master_ACK();
这个命令能知道要读多少个字节,如4,表示要接着读4个字节。

写4个字节的命令是在命令后告诉BQ3060要写多少个字节,如4个就这样写:
IICSendByte(address);check_ACK();
IICSendByte(4);
check_ACK();
c2:哪又如何知道自己读的数据(如0x62中的)是正确呢?可以用0x22命令来验证!这个命令是读电芯的材质,这BQ3060的默认值是LION,这是字符形的,用命令Read_bq3060_four(0x22);
返回的值是0x4e4f494c,哪这个又是什么意思呢,别急,转到软件STC_ISP就知道了,看图:

c3:程序晶振频率选择6M,12M都能正常运行。选用TM1651显示数据,是因为我有个机顶盒的LED数码管驱动芯片是CS1635,引脚和TM1651一样。
c4:这里我设置的下载程序文件要20M,是因为坛友设置收20m,总不能砸他饭碗吧。本来想设置高点的,但回头发现就是20,不能多
c5:本文中BQ3060中所有资料,均来自https://www.ti.com.cn/.,如有需要,可先下载BQ3060手册:https://www.ti.com.cn/cn/lit/ds/symlink/bq3060.pdf

bq3060.pdf(923.88 KB, 下载次数: 2)其里面提供了电路设计,详细命令,SMBus总线规范的下载地址。
c6:如果你不想用单片机搞,要用电脑搞,请看这里:bq2084主控笔记本电池换电芯+复位电池参数解锁

最后,来张搭建的硬件图:

看来我的文字表达能力还不行,哪再来个框图:作得很烂,见谅

(0)

相关推荐