Setting the servo position
A standard I2C transaction at the byte level is simple. First you send the device slave address, and then you send the register to read/write to. After that is sent you can either write some data to the register(s) or read data from those registers. Address reading and writing is incremental, and as such when you read, or write more than one byte to any given start address, it will automatically increment the pointer position.
For example, to set a servo position of 980 (which is the max value I can get from a Stell Servo) you would send this command sequence.
Assuming device address = 0x20
I2C communicates using hex bytes, so position 980 translates to 0x03D4
As with any I2C transaction, this 16 bit value must be split into 2 8 bit bytes. All that is required, is to send the upper and lower nibbles of the byte.
send: 0x20 0x10 0x03 0xD4
Setting the position and speed
When writing a speed to the servo, you don't use the standard seek register. Instead of writing to SEEK_HI/LO (0x10/0x11), you must write to the SEEK_NEXT_HI/LO (0x12/0x13).
The servo will not perform the movement until a valid speed variable is set with either of the two speed algorithms available.
There are two methods of speed control of a servo, Accumulation based speed and Time based speed.
Speed based works this way.