-
Notifications
You must be signed in to change notification settings - Fork 1
Home
This page provides all of the information I have figured out about the serial interface. The interface supports both monitoring and control operations.
57600 8N1 | NOR
There are two kinds of monitoring messages received from the device. There is a "CM2024 SUP" message every second which seems to be an overall status and is used to indicate that a battery is ready to charge (and possibly other things I am yet to figure out). The second type of message is a "CM2024 DAT" which returns the status of each slot independently.
First a message like this will arrive
43 4D 32 30 32 34 20 53 55 50 (ASCII: CM2024 SUP)
Followed by another fixed length message like this:
02 00 7B 01 EE 02 0D 00 82 78 78 78 78 78 78 78
78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78
78 98 16 0D 0A
Then when a battery is inserted it will switch to something like:
01 00 7B 01 ED 02 09 00 13 00 01 01 00 02 00 00
00 3C 05 05 00 08 78 78 78 78 78 78 78 78 78 78
78 73 26 0D 0A
78 is a filler value for no data
So far I have figured out the following:
Byte | Description |
---|---|
01 | Unknown |
02 | Unknown |
03 | Unknown |
04 | Unknown |
05 | Unknown |
06 | Unknown |
07 | Unknown |
08 - 09 | Sequence Counter going from 0x0000 to 0x0257 (0-599) in increments of 13 - little endian |
10 | Slot awaiting setup (see slot table) |
11 | Chemistry selected (See chemistry table) |
12 | Program selected (See program table) |
13 | Selected maximum charge current (applicable for NiHM/Cd only) (see charge current table) |
14 | Selected discharge rate (see discharge table) |
15 - 16 | Selected capacity in mAh - little endian |
17 | SD card status (see table) |
18 | Cool time in minutes |
19 | Unknown |
20 | Unknown |
21 | Unknown |
22 | SD Slot status |
23 | Unknown |
24 | Unknown |
25 | Unknown |
26 | Unknown |
27 | Unknown |
28 | Unknown |
29 | Unknown |
30 | Unknown |
31 | Unknown |
32 | Unknown |
33 | Unknown |
34 - 35 | Unknown - likely a CRC16 |
36 - 37 | Always 0D 0A - \r\n |
As the SUP message, First you get this:
43 4D 32 30 32 34 20 44 41 54 (ASCII: CM2024 DAT)
Then the rest:
02 57 03 02 01 06 06 01 05 01 5F 07 39 00 3B 84
00 00 6D 77 00 00 06 00 00 00 0D 3C 00 00 01 01
01 DD 79 0D 0A
Byte | Description |
---|---|
01 - 02 | Sequence Counter going from 0x0000 to 0x0257 (0-599) and resetting (little endian) |
03 | Slot number (see slot table) |
04 | Chemistry (see chemistry table) |
05 | Unknown flag - either 0 or 1 |
06 | Program state - always the same as the next value (in 06) unless the program finishes and then it's 0B |
07 | Program (see program table) |
08 | Activity Step (see activity table) |
09 - 10 | Time in minutes (big endian). When Ready, this will stop. |
11 - 12 | Voltage in units of 0.001 (big endian). e.g. 5F 07 = 1.887 |
13 - 14 | Current in units of 0.001 (big endian). E.g. 17 02 = 0.535 |
15 - 18 | C-CAP stored in units of 0.01 (big endian) |
19 - 22 | D-CAP stored in units of 0.01 (big endian). e.g. 3D 88 01 00 = 1004.13 |
23 | Unknown |
24 | Unknown |
25 | Maximum charge current (see table) |
26 | Unknown |
27 | Unknown |
28 | Pause time in minutes. Windows software allows increments of 30 mins so not sure if other values supported |
29 - 30 | Battery capacity in mAh (big endian) |
31 | Discharge rate (see discharge rate table) |
32 | Unknown - Sometimes the same as previous value in 31 so it’s related |
33 | Unknown |
34 - 35 | Checksum - CRC-16/MODBUS calculated from bytes 02 to 33 |
36 - 37 | Carriage return - always 0D 0A (i.e. \r\n) |
Control messages are send from the PC software to the device. These messages are always 13 bytes long. Not all commands use all of the bytes so any unused values are set to 00. The control messages look like this:
02 00 00 00 00 00 00 00 00 00 01 9D 69
The first byte is always the command type as follows:
Value | Command |
---|---|
01 | Start program |
02 | Cancel |
03 | Set LCD brightness |
04 | Release SD Card |
When the CM2024 SUP message has values in 10 to 18, the charger is indicating that it is ready to receive the start command. In the windows software, this makes the slot blue allowing you to fill out the fields. You cannot choose which slot to start, you can only start the one that the device tells you is ready in the CM2024 SUP message.
Offset | Description |
---|---|
01 | Always 01 for this command |
02 | Selected program (as program table, only 01 to 06) not sure what happen if you send e.g. 07 |
03 | Selected Chemistry |
04 - 05 | Selected Charge capacity in mAh* (little endian) |
06 | Selected charge current maximum (NiHM/Cd only) as table |
07 | Selected discharge current (as table) |
08 | SD Recording on/off (as SD recording table) |
09 | Always 00, probably not used by command |
10 | Unknown - Always 01 for all commands |
11 - 12 | TBC - always returns a value close the what would be CRC-16/MODBUS, but is always different. Need to figure this out. |
*: When setting the value in the UI, the encoded value is always a bit higher. E.g. set 20,000 and the value is 4E 6E (20,078). I'm not sure why so needs testing
Offset | Description |
---|---|
01 | Always 02 for this command |
02 | Slot to cancel (see slots table) |
03 - 09 | Not used (00) |
10 | Unknown - Always 01 for all commands |
11 - 12 | CRC16 TBC - see start command |
Offset | Description |
---|---|
01 | Always 03 for this command |
02 - 09 | Not used (00) |
10 | Unknown - Always 01 for all commands |
11 - 12 | CRC16 TBC - see start command |
I guess this just unmounts the card
Offset | Description |
---|---|
01 | Always 04 for this command |
02 - 09 | Not used (00) |
10 | Unknown - Always 01 for all commands |
11 - 12 | CRC16 TBC - see start command |
This is a set of common enumerated values which appear in various messages.
Value | Description |
---|---|
00 | Slot 1 |
01 | Slot 2 |
02 | Slot 3 |
03 | Slot 4 |
04 | Slot 5 |
05 | Slot 6 |
06 | Slot 7 |
07 | Slot 8 |
08 | Slot A |
09 | Slot B |
Value | Description |
---|---|
01 | NiHM/Cd |
02 | NiZn |
For selection, only up to 06 is used. The rest shows the state which could be no setup/error/complete
Value | Description |
---|---|
00 | None / slot empty |
01 | Recharge |
02 | Discharge |
03 | Procharge |
04 | Cycle |
05 | Alive |
06 | Maximize |
07 | No setup |
08 | Unknown |
09 | Unknown |
0A | Error |
0B | Complete |
Value | Description |
---|---|
00 | Idle |
01 | Charging |
02 | Discharging |
03 | Ready |
04 | Unknown |
05 | Cool Down |
06 | Error |
Value | Description |
---|---|
00 | Auto (this is always used for NiZn) |
01 | 500mA |
02 | 1000mA |
03 | 1500mA |
04 | 2000mA |
05 | 2500mA |
06 | 3000mA |
The values are interpreted differently depending on the chemistry
Value | Description |
---|---|
01 | 150mA |
02 | 300mA |
03 | 450mA |
04 | 600mA |
Value | Description |
---|---|
01 | 125mA |
02 | 250mA |
03 | 375mA |
04 | 500mA |
05 | 625mA |
06 | 750mA |
Value | Description |
---|---|
00 | SD off |
01 | Unknown |
02 | On / Ready |
Value | Description |
---|---|
00 | off |
01 | Unknown |
02 | on |
Value | Description |
---|---|
00 | NO CARD |
01 | Unknown |
02 | Unknown |
03 | Unknown |
04 | Unknown |
05 | Unknown |
06 | Unknown |
07 | Inserted |
08 | Ready |