CanServo/Protocol/LongMessage

From HITEC_HELP
Revision as of 08:56, 26 February 2026 by Choiyh (talk | contribs) (→‎Long Message)
Jump to navigation Jump to search

Up

Long Message

  • 각 패킷마다 Tail Byte가 있어서, 1개 혹은 여러개의 패킷으로 보낼 수 있는 방식입니다.
  • This content refers to the message format of UAVCAN.
    • Thanks to UAVCAN
  • Note:
    • CRC16 : byte order : low byte first, little endian
  • 전송
    • 보낼 메시지의 길이를 확인하여, 1개 패킷으로 보낼 수 없다면, CRC16을 계산하여 메시지 끝에 추가합니다.
    • 앞 일부를 잘라, Tail Byte를 붙여 1개의 패킷으로 보내는 것을 반복합니다.
      • 이때, (Tail Byte를 포함한 길이가) 8 바이트를 초과하는 경우에는, 정확한 길이를 첫 바이트에 넣습니다.
    • 주의: FD가 아닌 경우에는, 최대 8바이트이므로, 7 바이트까지 가능합니다.
      • FD인 경우에는 최대 64바이트이므로, 길이 첫 바이트를 제외하면, 62 바이트까지 가능합니다.

CAN 2.0

  • Packaging the message to be sent.
    • If the message to be sent is 8 bytes or more, CRC16 is added.
  • Packet's Data Format
    • < Data : max 7 byte, cut from packed Message >, <Tail Byte>
  • Messages less than 8 bytes long are transmitted as one packet.
  • CRC starting value is 0xFFFF (-1)

CAN-FD

  • CAN-FD는 data가 64바이트까지 확장됩니다.
    • 0~8, 12, 16, 20, 24, 32, 48, 64
  • Packaging the message to be sent.
    • If the message to be sent is 63 bytes or more, CRC16 is added.
    • 메시지의 길이가 62바이트 이하이면, crc16을 붙이지 않고, single packet으로 전송
  • packet data format:
    • CanServo/Protocol/CAN-FD
    • tail byte를 포함한 길이가 8바이트를 초과하면, 첫 바이트에 길이를 넣습니다.
    • data + tail <= 8: < data >, < tail byte >
    • data + tail > 8: < len : 1 byte >, < data >, < tail byte >

Tail Byte

  • Tail Byte
    • bit 7 = first packet
    • bit 6 = last packet
    • bit 5 = 1 if first packet, toggle bit on each packet
    • bit 4:0 = Seq, 0 ~ 31, inc 1 on each message