コンテンツにスキップ

Aster Protocol

ALEO、AC間通信を確立するための独自プロトコルです。

UART8N1通信を利用し以下の内容で動作します。

UART通信仕様

  • Baudrate : 115200

  • Data : 8bit

  • Parity : None

  • Stop : 1bit

プロトコル構成

START CMD LEN DATA CRC8/ATM
0xAA 1byte 1byte Nbyte 1byte

START

プロトコルの開始は必ず0xAAとする。

CMD

命令コマンド。各値の割当ては以下である。

領域 機能
0x0x 単一モータ
0x1x 全統モータ
0x2x PID処理
0x3x STATUS
0x4x SYSTEM
0x8x ACK,NACK
CMD 機能 LEN 型 DATA
0x01 SET_WHEEL_DIR 3 uint8_t,uint16_t No,DIR(deg)
0x02 SET_WHEEL_SPEED 3 uint8_t,uint8_t No,SPEED(%)
0x10 STOP_ALL_MOTOR 0 - -
0x11 SET_ALL_DIR 2 uint16_t DIR(deg)
0x12 SET_ALL_SPEED 1 uint8_t SPEED(%)
0x20 SET_PID 3 uint8_t,uint16_t PID,val
0x21 GET_PID 0 - -
0x22 RESET_PID 0 - -
0x30 GET_STATUS 0 - -
0x31 GET_MOTOR_STATUS 0 - -
0x32 GET_SENSOR_STATUS 0 - -
0x40 PING 0 - -
0x41 GET_VERSION 0 - -
0x42 RESET 0 - -
0x80 ACK 0 - -
0x81 NACK 1 uint8_t ERROR_CODE

ERROR_CODE

CODE 意味
0x01 CRC_ERROR
0x02 UNKNOWN_CMD
0x03 INVALID_LENGTH
0x04 INVALID_DATA
0x05 BUSY
0x06 NOT_READY
0x07 INTERNAL_ERROR
0x08 TIMEOUT

CRC8/ATM

巡回冗長検査(CRC)でATM方式を利用する。多項式は以下となり、標準は0x07となる。

\[ x8 + x2 + x + 1 \]

CRCのチェックは以下の関数で行い言語は違えどNode.jsでも同様である。

uint8_t Protocol_CalculateCRC8(const uint8_t *data, uint8_t length)
{
    uint8_t crc = 0x00;

    for (uint8_t i = 0; i < length; i++)
    {
        crc ^= data[i];

        for (uint8_t bit = 0; bit < 8; bit++)
        {
            if (crc & 0x80)
            {
                crc = (crc << 1) ^ 0x07;
            }
            else
            {
                crc <<= 1;
            }
        }
    }

    return crc;
}