Hello,
I am trying to calibrate my bq27425-g2 (connected through i2c line to my controller) using the attached file.
It seems there is a problem with the time it takes to write the data to the chip.
I will explain.
;--------------------------------------------------------
;Verify Existing Firmware Version
;--------------------------------------------------------
W: AA 00 01 00
C: AA 00 25 04
W: AA 00 02 00
C: AA 00 05 02
;--------------------------------------------------------
;SET_CFGUPDATE
;--------------------------------------------------------
W: AA 00 13 00
X: 1500
W: AA 3E 02 00
W: AA 40 02 26 00 00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 A5
X: 200
W: AA 3E 02 00
C: AA 60 A5
W: AA 3E 24 00
W: AA 40 00 19 28 63 5F 64 62 00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 04
X: 200
W: AA 3E 24 00
C: AA 60 04
W: AA 3E 31 00
W: AA 40 0A 0F 02 05 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 AD
X: 200
W: AA 3E 31 00
C: AA 60 AD
W: AA 3E 44 00
W: AA 40 0A F0 05 00 32 01 C2 14 14 00 03 09 F6 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 E0
X: 200
W: AA 3E 44 00
C: AA 60 E0
W: AA 3E 3A 00
W: AA 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 FF
X: 200
W: AA 3E 3A 00
C: AA 60 FF
W: AA 3E 50 01
W: AA 40 14 60 28 01 F4 00 00 00 00 00 00 43 80 04 01 14 00 0A 0B B8 01 2C 0A 00 C8 02 00 00 00 00 00 00
W: AA 60 C4
X: 200
W: AA 3E 50 01
C: AA 60 C4
W: AA 3E 51 00
W: AA 40 00 A7 00 85 00 FA 00 3C 3C 01 01 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 CF
X: 200
W: AA 3E 51 00
C: AA 60 CF
W: AA 3E 52 00
W: AA 40 46 18 04 00 00 A9 F8 81 0E DB 0E A8 04 1A 0F 2D 05 3C 0D 16 00 C8 00 32 00 14 03 E8 00 01 00 DC
W: AA 60 48
X: 200
W: AA 3E 52 00
C: AA 60 48
W: AA 3E 52 01
W: AA 40 10 04 00 0A 10 5E B3 B3 75 4C 78 E9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 EB
X: 200
W: AA 3E 52 01
C: AA 60 EB
W: AA 3E 56 00
W: AA 40 FF CE FF CE 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 64
X: 200
W: AA 3E 56 00
C: AA 60 64
W: AA 3E 58 00
W: AA 40 00 52 00 52 00 68 00 84 00 5E 00 57 00 57 00 58 00 55 00 56 00 73 00 9D 00 F7 01 D5 02 EB 00 00
W: AA 60 96
X: 200
W: AA 3E 58 00
C: AA 60 96
W: AA 3E 59 00
W: AA 40 00 52 00 52 00 68 00 84 00 5E 00 57 00 57 00 58 00 55 00 56 00 73 00 9D 00 F7 01 D5 02 EB 00 00
W: AA 60 96
X: 200
W: AA 3E 59 00
C: AA 60 96
W: AA 3E 68 00
W: AA 40 FA CC 00 00 00 CF DC 17 F3 3A 36 FD 91 00 25 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 31
X: 200
W: AA 3E 68 00
C: AA 60 31
W: AA 3E 69 00
W: AA 40 80 4A 38 29 0B C2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 07
X: 200
W: AA 3E 69 00
C: AA 60 07
W: AA 3E 6B 00
W: AA 40 EF 03 11 05 01 00 00 10 01 00 3C 00 50 3C 00 64 3C 00 20 94 66 14 AA 00 00 00 00 00 00 00 00 00
W: AA 60 A5
X: 200
W: AA 3E 6B 00
C: AA 60 A5
W: AA 3E 70 00
W: AA 40 36 72 04 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 3F
X: 200
W: AA 3E 70 00
C: AA 60 3F
;--------------------------------------------------------
;Exit CFGUPDATE
;--------------------------------------------------------
W: AA 00 42 00
X: 2000
The file is a sequence of those:
- Select a class
- Write 32 bytes
- Write checksum of the 32 bytes (actually complement to FF of the checksum).
- Wait 200 msec (during this time, if the checksum above is correct, the data is copied to non-volatile memory)
- Select same class as before
- Read checksum, ensure it is same as we wrote before.
Most of the sequences cannot read correct checksum. I will give an example
W: AA 3E 24 00
W: AA 40 00 19 28 63 5F 64 62 00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 04
X: 200
W: AA 3E 24 00
C: AA 60 04
This fails on checksum verification.
However when I change the sequence timeout from 200msec to 5000msec:
W: AA 3E 24 00
W: AA 40 00 19 28 63 5F 64 62 00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 04
X: 5000
W: AA 3E 24 00
C: AA 60 04
Then the sequence is OK, checksum is read correctly.
The workaround did not work with the following sequence:
W: AA 3E 69 00
W: AA 40 80 4A 38 29 0B C2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
W: AA 60 07
X: 200
W: AA 3E 69 00
C: AA 60 07
So, even when I changed the 200msec to 5000msec in this one, it failed.
By the way, the checksum is OK, the calculation is (taking the last 8 bits of the sum): FF-(80+4A+38+29… etc) = 07
The rest of the sequences were OK after changing to 5000. I tried to put 1000 msec instead; it did not help on any of them.
Any idea?
Thanks in advance,
GBL