微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > 请问用单片机如何进入dataflash进行修改参数?

请问用单片机如何进入dataflash进行修改参数?

时间:10-02 整理:3721RD 点击:

比如我现在想修改design capacity ,那么我怎么才能用单片机直接实现这个功能,我不想用ev2300进行修改!

比如说我正常的进入dataflash都是要先解锁,FAS  SS,那么我是不是只需要用单片机写一串这样的指令就可以完成解锁的功能呢?

不知道是不是参照ti提供的这个example来读写dataflash!

是的,但是需要注意的是有些参数是只能通过EV2300烧写的,比如CHEM-ID的信息,所以对于FLASH类型的电量计EV2400/EV2300是必须的,并且单片机配置过程复杂调试难度高。单节的部分电量计比如bq274XX在对精度要求不高的情况下,可以采用该方式配置(但是强烈不推荐)。

 我不太明白的是,后面的每页32个byte代表的值是怎么算出来的,我现在用逻辑分析仪把波形给弄出来了,我前面写subclass能看懂,但是后面的32个字节我就看不懂了,那个crc效验我知道是怎么回事,

  恩恩, 我现在就是不知道我只写一个数据的话,为什么我用逻辑分析仪抓取的波形好奇怪,上面不是说写一个block吗?32个字节,请问究竟是如何进行写dataflash的!

我现在已经可以写数据了,但是好像只能一个块来写,可是我想只想某一个,比如我现在想写design capacity。是怎么做的。是先发S -0x16(ack)-0x77(ack)-0x30(ack)-0x00(ack)-0x9b(ack)-P  然后S-0X16(ACK)-0X78(ACK)-0X20(ACK)-0X01(ACK)-0XF4(ACK)-P这样的话就写完了REMAIN CAPACITY ALARM 500,但是如果我想写design capac

 ty其他都不改变的话,改怎么操作呢?  我把波形也抓取出来了

Read required block of Gas Gauging-IT Cfg subclass (SubclassID = 80) into RAM:
· Write Subclass ID
– SMB Slave Address (0x17)
– SMB CMD 0x77 with 0x0050 as data (=80 decimal)
· Read Subclass (2nd block is needed as its offset 45)
– SMB Slave Address (0x16)
– SMB CMD 0x79 receiving 32 bytes of data
Overwrite offset (45 - 32 = 13) of received data with 8.7 V:
· Update offset 45 with 0x21fc (= 8700 decimal)
Write the updated block back to the bq20z70/bq20z75:
· Write Subclass ID
– SMB Slave Address (0x17) SMB CMD 0x77 with 0x0050 as data
· Write Subclass
– SMB Slave Address (0x17)
– SMB CMD 0x79 with 32 bytes of data

针对block内某些字节的操作,你可以指定offset,比如DESIGN CAPACITY的class id是48,offset是22,那么CMD 0x77处写入0x30,选定block的CMD是0x78而不是0x79,因为offset 22小于32。

我知道你的意思。也就是说如果offset大于32的话,那就需要2个block,但是我现在在0x78写4400的话,那我怎么知道写的就是design capacity呢?换句话说,我如何写4400到design capacity这个offset呢?

前面应该还有一个数 代表要写入多少个数据的, 我看了的,为什么写1st level safety最后2个数据 CUV recovery 和CUV threshold的时候出现2个0x02呢?

只能对最长32byte的block做读写操作,你确定下要改写内容在block中对应的offset,然后先读出32个byte,根据offset更改相应位置的数据再写回去。

谢谢你的悉心解答,我现在就是写数据到dataflash的话,知道怎么做了,现在就是读取的时序,好像就是说S+0X16(ACK)+0X78(ACK)+S+0X17(ACK)+?(这里是要读取的数据个数,比如我对应的1st level safety 对应的voltage block)那后面有18个byte,那么我这里如果是想读取这18个数据的话。是在?处写0x12还是读取出来的0x12呢?

读1st level safety的话,顺序是S+0X16(ACK)+0X77(ACK)+0X00(ACK)【选定1st level safety所在的classID,该classID为0】+S+0X17(ACK)+0X78(ACK)【1st level safety只有18个byte,0X78对应第一个32byte block】,会返回32个byte数据,前18个byte就是1st level safety的数据。

为什么你说的时序和我用逻辑分析仪抓的波形不一致啊,我抓的读取波形时序是

S+0X16+0X77+0X00+0X00+P     然后

S+0X16+0X78+S+0X17+0X12【这里就是后面有多少个数据】+18个数据【对应的1ST LEVEL SAFETY】+P !

 

 

 如果classid对应的offset有超过32,那么就还有重新写0x79 对应的时序:

S+0X16+0X00+0X00+P  然后

S+0X16+0X78+S+0X17+0X12+offset32个数据+P 

 然后 S+0X16+0X77+0X00+0X00+P 

 然后S+0X16+0X79+S+0X17+0X12【这里就是去掉前面32个数据之后的个数】+余下的数据【去掉前面0X78的数据之后的】+P!

请问你写的这个时序是按照技术手册上的吗?如果是!那么难道我的逻辑分析仪出错了?

 我用你的时序读,还是不行啊?我现在写数据到dataflash已经搞定了,现在就是读取的问题了?

  你的那个时序是错的,我刚才问了我们经理,他说就是逻辑分析仪上的时序,我现在已经可以读取和写入了。 还是感谢你们ti的技术支持,谢谢!

读的完整时序就是你贴的,我贴的只是告诉你要使用0x78来读取不超过32个byte的class。

为什么 CHEMID和DEVICE NAME改不了啊?

查看下手册,没有建议修改的部分不要动,像DEVICE NAME可以改,注意字节长度,没有特别限制。

 请问为什么manufname后面读取还有inst.啊而且前面还有07。devicename前面有个04,我现在写的是按照逻辑分析仪上的时序来的,可是写完再上位机看的时候发现不对啊?

挺不错的逻辑分析软件,羡慕...

寄存器分两类:

 固定长度:比如 voltage , current. 长度一般为 3:  2 个字节数据 + 校验和

Block数据:比如devicename,当度随机,格式为: len + 数据 + 校验和

devicename 就是 block数据, 04表示这个block 段数据个数是4个, 之后4个数据为实际的值

 

终于知道单片机和dsp的差距了,完全不是一个档次的。我用ev2300分析的数据的时候,波形都是以us来的,而我的单片机用ms都有时候出错,看来我只能慢慢去摸索其中的时序了,

应该和这个没关系吧

目前简单的单片机都能做到 1指令/us 吧, 稍微好点的比如 stm32 都可以到 20多了

而且 SMbus 本身时序比较慢,大约在 100K 左右,用单片机足够了

 当然了,这个logic analyse花了几千块钱呢!不过使我们经理的,我借他的在用,用单片机来采集太勉强了,准备用dsp来做一个BMS系统!

呵呵,祝马到功成

咦?为什么bq3060的bq3050的dataflash读写时序不一样啊? 我想把bq3060的dataflash读写移植到bq3050,发现完全不对?

上面所写的rowaddress是怎么计算的,还有为什么我写数据到dataflash的时候还要先读block,

 

请问这其中是什么原理呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top