sshoecraft / jbdtool

JBD BMS Linux utility
BSD 3-Clause "New" or "Revised" License
46 stars 10 forks source link

DesignCapacity and RemainingCapacity must be unsigned. #15

Open dmachadol opened 4 months ago

dmachadol commented 4 months ago

Check the code to evaluate the DesignCapacity and RemainingCapacity uint16 data. Sample debug data for a JBD BMS 22SP 250A. Large capacity BMS are affected

0000: DD 03 00 26 17 3C 00 00 36 C5 90 24 00 00 2E 9C    ...&.<..6..$....
0010: 00 00 00 00 00 00 24 26 03 10 03 0B 91 0B 98 0B    ......$&........
0020: 97 00 00 00 90 24 36 C5 00 00 F9 1E 77             .....$6.....w
jbd.c(55) jbd_verify: start bit: dd
jbd.c(58) jbd_verify: register: 3, wanted: 3
jbd.c(61) jbd_verify: status: 0
jbd.c(66) jbd_verify: data_length: 38, len - 7: 38
jbd.c(37) jbd_crc: len: 40
jbd.c(38) jbd_crc: crc: 0
jbd.c(40) jbd_crc: crc: f91e
jbd.c(73) jbd_verify: my_crc: f91e, pkt_crc: f91e
jbd.c(81) jbd_verify: stop bit: 77
jbd.c(84) jbd_verify: good data!
jbd.c(319) jbd_rw: returning: 38
jbd_info.c(198) jbd_std_get_info: voltage: 59.48
jbd_info.c(199) jbd_std_get_info: current: 0.00
jbd_info.c(200) jbd_std_get_info: capacity: 140.21
jbd_info.c(205) jbd_std_get_info: fullcap: -286.36
jbd_info.c(206) jbd_std_get_info: cycles: 0
jbd_info.c(207) jbd_std_get_info: pctcap: 26
jbd_info.c(222) jbd_std_get_info: balance: 0000000000000000
jbd_info.c(238) jbd_std_get_info: protect: 0000000000000000

The value -286.36 is wrong when interpreted with a signed 16byte, these bytes are not signed and the correct value (and programmed in bms) is 369.00

dmachadol commented 4 months ago

I send a PR to your porject.