there is no real protocol,
it is a frame with a fixed length (depending on the config) in which all necessary data is sent and received in byte blocks.
Here is an example of the default Tangbob config:
Code:
cat Output/Tangbob/DOC/INTERFACE.md
# Interface
## Host to FPGA
| POS | SIZE | NAME |
| --- | --- | --- |
| 0 | 32bits | RX_HEADER |
| 32 | 128bits | VAROUT128_MODBUS0_TXDATA |
| 160 | 32bits | VAROUT32_PWMOUT0_DTY |
| 192 | 32bits | VAROUT32_STEPDIR0_VELOCITY |
| 224 | 32bits | VAROUT32_STEPDIR1_VELOCITY |
| 256 | 32bits | VAROUT32_STEPDIR2_VELOCITY |
| 288 | 32bits | VAROUT32_STEPDIR3_VELOCITY |
| 320 | 1bit | VAROUT1_WLED0_0_GREEN |
| 321 | 1bit | VAROUT1_WLED0_0_BLUE |
| 322 | 1bit | VAROUT1_WLED0_0_RED |
| 323 | 1bit | VAROUT1_BITOUT0_BIT |
| 324 | 1bit | VAROUT1_BITOUT1_BIT |
| 325 | 1bit | VAROUT1_PWMOUT0_ENABLE |
| 326 | 1bit | VAROUT1_STEPDIR0_ENABLE |
| 327 | 1bit | VAROUT1_STEPDIR1_ENABLE |
| 328 | 1bit | VAROUT1_STEPDIR2_ENABLE |
| 329 | 1bit | VAROUT1_STEPDIR3_ENABLE |
## FPGA to Host
| POS | SIZE | NAME |
| --- | --- | --- |
| 0 | 32bits | TX_HEADER |
| 32 | 32bits | TIMESTAMP |
| 64 | 16bits | MULTIPLEXED_INPUT_VALUE |
| 80 | 8bits | MULTIPLEXED_INPUT_ID |
| 88 | 128bits | VARIN128_MODBUS0_RXDATA |
| 216 | 32bits | VARIN32_STEPDIR0_POSITION |
| 248 | 32bits | VARIN32_STEPDIR1_POSITION |
| 280 | 32bits | VARIN32_STEPDIR2_POSITION |
| 312 | 32bits | VARIN32_STEPDIR3_POSITION |
| 344 | 1bit | VARIN1_BITIN0_BIT |
| 345 | 1bit | VARIN1_BITIN1_BIT |
| 346 | 1bit | VARIN1_BITIN2_BIT |
| 347 | 1bit | VARIN1_BITIN3_BIT |
| 348 | 1bit | VARIN1_BITIN4_BIT |
the frames are then filled with zeros so that they are always divisible by 8 bits and RX and TX frames have the same length so that they can be transmitted via SPI full duplex
a hal component (riocomp.c) is also generated for each config, which can read and write the frames and, if necessary, does a few floating point calculations that I wanted to keep away from the FPGA
This makes it possible to manage without SoftCore in the FPGA, i.e. only pure logic