loosely resembles what I actually implemented
Framing: SLIP with following payload bytes
* 1 byte: checksum or CRC
* 1 byte: sequence number
* 1 byte: opcode/register
* Want a bit for read/write
* Use I2C convention? "7-bit address of the slave…followed by a single bit representing whether it wishes to write(0) to or read(1) from the slave"
* Prefer that its the high bit so register numbers are un-ambiguous
* A read responds with the register value/response in the same packet format
* 4 byte: value argument
bit 0 is least significant bit. All signed integers are 2's compliment
Opcodes:
^Address ^Mnemonic ^Description |
|0x00 | |Misc block |
|0x00 |MISC_STATUS | |
|0x01 |MISC_CONTROL | |
|0x20 | |X block |
|0x40 | |Y block |
|0x60 | |Z block |
MISC_STATUS:
*
MISC_CONTROL:
* 0: execute emergency stop
=== Axis blocks ===
All addresses offset by block base address
XYZ indicates X/Y/Z as appropriate
^Address ^Mnemonic ^Description |
|0x00 | |Z block |
|0x00 |XYZ_STATUS | |
|0x01 |XYZ_CONTROL | |
|0x02 |XYZ_STEP_SET |Set the step register to value (2's compliment) |
|0x03 |XYZ_STEP_ADD |Adjust the step register by argument |
|0x04 |XYZ_STEP_ADD |Adjust the step register by argument |
|0x05 |XYZ_VELMIN |Minimum velocity in steps/second |
|0x06 |XYZ_VELMAX |Maximum velocity in steps/second |
|0x07 |XYZ_ACL |Acceleration/decceleration in steps/second**2 |
Step register (i32): the number of steps remaining to step. Should probably initiate an automatic read when it hits 0
XYZ_STATUS
XYZ_CONTROL
XYZ_STEP_SET: set the step register to value
* value: i32
XYZ_STEP_ADD: adjust the step register by value
* value: i32
* detect overflows?