Communication Protocol
Here are the details about the protocol of the serial communication between Argus Monitor and the Argus Controller hardware.
As long as this protocol is respected, you can develop and use a completely different hardware than our Arduino example together with Argus Monitor.
Command |
Argus Monitor request |
Argus Controller answer |
ProbeDevice |
AA 02 01 crc8 |
C5 <byteCnt> 01 <DEVICE_ID> <TEMP_COUNT> <FAN_COUNT> crc8 |
GetTemp |
AA 02 20 crc8 |
C5 <byteCnt> 20 <tempCount> temp0_H temp0_L temp1_H temp1_L temp2_H temp2_L temp3_H temp3_L crc8 |
GetFanRpm |
AA 02 30 crc8 |
C5 <byteCnt> 30 <fanCount> rpm0_H rpm0_L rpm1_H rpm1_L crc8 |
GetFanPwm |
AA 03 31 <channel> crc8 |
C5 <byteCnt> 31 <channel> <pwm> crc8 |
SetFanPwm |
AA 04 32 <channel> <pwm> crc8 |
C5 <byteCnt> 32/FF crc8 # answer byte2: 32 = ok, FF = error |
EEReadByte |
AA 04 40 <addrH> <addrL> crc8 |
C5 <byteCnt> 40 <VALUE_COUNT> <val> crc8 |
EEWriteByte |
AA 05 41 <addrH> <addrL> <value> crc8 |
C5 <byteCnt> 41/FF crc8 # answer byte2: 41 = ok, FF = error |
Only for the ProbeDevice command, Argus Monitor expects the answer from the device within 200 msec.
This has to do with internal initialization constraints within the HW monitoring modules.
If you write your own software for an Argus Controller device, please make sure you answer the ProbeDevice query fast enough.
Data formats:
Temperature: int16_t, Celsius, scaled by 10
RPM: uint16_t
PWM: uint8_t [0..100 %]
Communication parameters:
57600 Baud, 8N1
CRC8 calculation:
uint8_t crc8(uint8_t crc, uint8_t data) {
crc = crc ^ data;
for (uint8_t i = 0; i < 8; i++) {
if (crc & 0x01)
crc = (crc >> 1) ^ 0x8C;
else
crc >>= 1;
}
return crc;
}