Firmware for Nucleo boards for the SLab system Description at http://r6500.blogspot.com.es/2018/02/slab-first-release.html All associated files at https://github.com/R6500/SLab
protocol.txt@1:d81bef65eece, 2018-02-11 (annotated)
- Committer:
- vic20
- Date:
- Sun Feb 11 16:14:51 2018 +0000
- Revision:
- 1:d81bef65eece
- Parent:
- 0:39a545e08ccd
Version 1.2 (Halt button added)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vic20 | 0:39a545e08ccd | 1 | This document describes the communication protocol between |
vic20 | 0:39a545e08ccd | 2 | Python and the Hardware Board |
vic20 | 0:39a545e08ccd | 3 | |
vic20 | 0:39a545e08ccd | 4 | Protocol is Client/Server |
vic20 | 0:39a545e08ccd | 5 | The board operates as the server and responds to requests |
vic20 | 0:39a545e08ccd | 6 | from the Python code in n a PC |
vic20 | 0:39a545e08ccd | 7 | |
vic20 | 0:39a545e08ccd | 8 | All communications use a simple XOR on all bytes to generate |
vic20 | 0:39a545e08ccd | 9 | the CRC. The CRC is the last byte send in any transmission. |
vic20 | 0:39a545e08ccd | 10 | |
vic20 | 0:39a545e08ccd | 11 | Format of data: |
vic20 | 0:39a545e08ccd | 12 | byte : 1 Byte |
vic20 | 0:39a545e08ccd | 13 | u16 : 2 Bytes little endian ( L followed by H) |
vic20 | 0:39a545e08ccd | 14 | float : 3 Bytes : Byte : Exponent Offset 128 |
vic20 | 0:39a545e08ccd | 15 | u16 : Mantissa Offset 20000 |
vic20 | 0:39a545e08ccd | 16 | |
vic20 | 0:39a545e08ccd | 17 | Before each command: |
vic20 | 0:39a545e08ccd | 18 | |
vic20 | 0:39a545e08ccd | 19 | P : init P-TxCRC,P-RxCRC |
vic20 | 0:39a545e08ccd | 20 | B : init B-RxCRC,B-TxCRC |
vic20 | 0:39a545e08ccd | 21 | |
vic20 | 0:39a545e08ccd | 22 | COMMANDS --------------------------------------------------- |
vic20 | 0:39a545e08ccd | 23 | |
vic20 | 0:39a545e08ccd | 24 | Command 'F' Get Firmware String |
vic20 | 0:39a545e08ccd | 25 | This command is the only one without CRC |
vic20 | 0:39a545e08ccd | 26 | |
vic20 | 0:39a545e08ccd | 27 | P -> B : byte('F') |
vic20 | 0:39a545e08ccd | 28 | B -> P : Firmware String than ends with "\n\r" |
vic20 | 0:39a545e08ccd | 29 | |
vic20 | 0:39a545e08ccd | 30 | |
vic20 | 0:39a545e08ccd | 31 | Command 'M' Get Magic Code |
vic20 | 0:39a545e08ccd | 32 | |
vic20 | 0:39a545e08ccd | 33 | P -> B : byte('M') |
vic20 | 0:39a545e08ccd | 34 | P-TxCRC |
vic20 | 0:39a545e08ccd | 35 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 36 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 37 | B -> P : B-TxCRC |
vic20 | 0:39a545e08ccd | 38 | P : Check CRC |
vic20 | 0:39a545e08ccd | 39 | else |
vic20 | 0:39a545e08ccd | 40 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 41 | B -> P : 4 byte magic code |
vic20 | 0:39a545e08ccd | 42 | B-TxCRC |
vic20 | 0:39a545e08ccd | 43 | P : Check CRC |
vic20 | 0:39a545e08ccd | 44 | P : Check Magic |
vic20 | 0:39a545e08ccd | 45 | |
vic20 | 0:39a545e08ccd | 46 | |
vic20 | 0:39a545e08ccd | 47 | Command 'I' Get Board Capabilities |
vic20 | 0:39a545e08ccd | 48 | |
vic20 | 0:39a545e08ccd | 49 | P -> B : byte('I') |
vic20 | 0:39a545e08ccd | 50 | P-TxCRC |
vic20 | 0:39a545e08ccd | 51 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 52 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 53 | B -> P : B-TxCRC |
vic20 | 0:39a545e08ccd | 54 | P : Check CRC |
vic20 | 0:39a545e08ccd | 55 | else |
vic20 | 0:39a545e08ccd | 56 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 57 | B -> P : byte(Number of DACs) |
vic20 | 0:39a545e08ccd | 58 | byte(Number of ADCs) |
vic20 | 0:39a545e08ccd | 59 | u16(Unified Buffer Size) |
vic20 | 0:39a545e08ccd | 60 | float(Max Sample Time) |
vic20 | 0:39a545e08ccd | 61 | float(Min Sample Time) |
vic20 | 0:39a545e08ccd | 62 | float(VDD) |
vic20 | 0:39a545e08ccd | 63 | float(Max Sample Freq) |
vic20 | 0:39a545e08ccd | 64 | float(VREF) |
vic20 | 0:39a545e08ccd | 65 | byte(dac_bits) |
vic20 | 0:39a545e08ccd | 66 | byte(adc_bits) |
vic20 | 0:39a545e08ccd | 67 | B-TxCRC |
vic20 | 0:39a545e08ccd | 68 | |
vic20 | 0:39a545e08ccd | 69 | |
vic20 | 0:39a545e08ccd | 70 | Command 'L' Get Pin List |
vic20 | 0:39a545e08ccd | 71 | |
vic20 | 0:39a545e08ccd | 72 | P -> B : byte('L') |
vic20 | 0:39a545e08ccd | 73 | P-TxCRC |
vic20 | 0:39a545e08ccd | 74 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 75 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 76 | B -> P : B-TxCRC |
vic20 | 0:39a545e08ccd | 77 | |
vic20 | 0:39a545e08ccd | 78 | else |
vic20 | 0:39a545e08ccd | 79 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 80 | Pin list String that ends with $ |
vic20 | 0:39a545e08ccd | 81 | B-TxCRC |
vic20 | 0:39a545e08ccd | 82 | |
vic20 | 0:39a545e08ccd | 83 | Command 'A' ADC Read |
vic20 | 0:39a545e08ccd | 84 | |
vic20 | 0:39a545e08ccd | 85 | P -> B : byte('A') |
vic20 | 0:39a545e08ccd | 86 | byte(channel) |
vic20 | 0:39a545e08ccd | 87 | P-TxCRC |
vic20 | 0:39a545e08ccd | 88 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 89 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 90 | B-TxCRC |
vic20 | 0:39a545e08ccd | 91 | |
vic20 | 0:39a545e08ccd | 92 | else if not valid channel |
vic20 | 0:39a545e08ccd | 93 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 94 | B-TxCRC |
vic20 | 0:39a545e08ccd | 95 | |
vic20 | 0:39a545e08ccd | 96 | else |
vic20 | 0:39a545e08ccd | 97 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 98 | U16(Read ADC Value) |
vic20 | 0:39a545e08ccd | 99 | B-TxCRC |
vic20 | 0:39a545e08ccd | 100 | |
vic20 | 0:39a545e08ccd | 101 | |
vic20 | 0:39a545e08ccd | 102 | Command 'D' DAC Write |
vic20 | 0:39a545e08ccd | 103 | |
vic20 | 0:39a545e08ccd | 104 | P -> B : byte('D') |
vic20 | 0:39a545e08ccd | 105 | byte(channel) |
vic20 | 0:39a545e08ccd | 106 | u16(value) |
vic20 | 0:39a545e08ccd | 107 | P-TxCRC |
vic20 | 0:39a545e08ccd | 108 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 109 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 110 | B-TxCRC |
vic20 | 0:39a545e08ccd | 111 | |
vic20 | 0:39a545e08ccd | 112 | else if not valid channel |
vic20 | 0:39a545e08ccd | 113 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 114 | B-TxCRC |
vic20 | 0:39a545e08ccd | 115 | else |
vic20 | 0:39a545e08ccd | 116 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 117 | B-TxCRC |
vic20 | 0:39a545e08ccd | 118 | |
vic20 | 0:39a545e08ccd | 119 | |
vic20 | 0:39a545e08ccd | 120 | Command 'R' Set Sample Time |
vic20 | 0:39a545e08ccd | 121 | |
vic20 | 0:39a545e08ccd | 122 | P -> B : byte('R') |
vic20 | 0:39a545e08ccd | 123 | float(Sample Time) |
vic20 | 0:39a545e08ccd | 124 | P-TxCRC |
vic20 | 0:39a545e08ccd | 125 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 126 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 127 | B-TxCRC |
vic20 | 0:39a545e08ccd | 128 | |
vic20 | 0:39a545e08ccd | 129 | else if not valid sample time |
vic20 | 0:39a545e08ccd | 130 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 131 | B-TxCRC |
vic20 | 0:39a545e08ccd | 132 | |
vic20 | 0:39a545e08ccd | 133 | else |
vic20 | 0:39a545e08ccd | 134 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 135 | B-TxCRC |
vic20 | 0:39a545e08ccd | 136 | |
vic20 | 0:39a545e08ccd | 137 | |
vic20 | 0:39a545e08ccd | 138 | Command 'S' Set Storage |
vic20 | 0:39a545e08ccd | 139 | |
vic20 | 0:39a545e08ccd | 140 | P -> B : byte('S') |
vic20 | 0:39a545e08ccd | 141 | byte(Number Analog) |
vic20 | 0:39a545e08ccd | 142 | byte(Number Digital) |
vic20 | 0:39a545e08ccd | 143 | U16(Number Samples) |
vic20 | 0:39a545e08ccd | 144 | P-TxCRC |
vic20 | 0:39a545e08ccd | 145 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 146 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 147 | B-TxCRC |
vic20 | 0:39a545e08ccd | 148 | |
vic20 | 0:39a545e08ccd | 149 | else if not valid |
vic20 | 0:39a545e08ccd | 150 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 151 | B-TxCRC |
vic20 | 0:39a545e08ccd | 152 | |
vic20 | 0:39a545e08ccd | 153 | else |
vic20 | 0:39a545e08ccd | 154 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 155 | B-TxCRC |
vic20 | 0:39a545e08ccd | 156 | |
vic20 | 0:39a545e08ccd | 157 | |
vic20 | 0:39a545e08ccd | 158 | Command 'Y' Async Read |
vic20 | 0:39a545e08ccd | 159 | |
vic20 | 0:39a545e08ccd | 160 | P -> B : byte('Y') |
vic20 | 0:39a545e08ccd | 161 | P-TxCRC |
vic20 | 0:39a545e08ccd | 162 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 163 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 164 | B-TxCRC |
vic20 | 0:39a545e08ccd | 165 | else |
vic20 | 0:39a545e08ccd | 166 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 167 | <Dump In Buffer> |
vic20 | 0:39a545e08ccd | 168 | B-TxCRC |
vic20 | 0:39a545e08ccd | 169 | |
vic20 | 0:39a545e08ccd | 170 | |
vic20 | 0:39a545e08ccd | 171 | Command 'G' Triggered Read |
vic20 | 0:39a545e08ccd | 172 | |
vic20 | 0:39a545e08ccd | 173 | P -> B : byte('G') |
vic20 | 0:39a545e08ccd | 174 | U16(Trigger) |
vic20 | 0:39a545e08ccd | 175 | Byte(mode) |
vic20 | 0:39a545e08ccd | 176 | Byte(timeout) |
vic20 | 0:39a545e08ccd | 177 | P-TxCRC |
vic20 | 0:39a545e08ccd | 178 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 179 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 180 | B-TxCRC |
vic20 | 0:39a545e08ccd | 181 | |
vic20 | 0:39a545e08ccd | 182 | else if bad mode |
vic20 | 0:39a545e08ccd | 183 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 184 | B-TxCRC |
vic20 | 0:39a545e08ccd | 185 | |
vic20 | 0:39a545e08ccd | 186 | else |
vic20 | 0:39a545e08ccd | 187 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 188 | <Dump Triggered In Buffer> |
vic20 | 0:39a545e08ccd | 189 | B-TxCRC |
vic20 | 0:39a545e08ccd | 190 | |
vic20 | 0:39a545e08ccd | 191 | |
vic20 | 0:39a545e08ccd | 192 | |
vic20 | 0:39a545e08ccd | 193 | Command 'P' Step Response |
vic20 | 0:39a545e08ccd | 194 | |
vic20 | 0:39a545e08ccd | 195 | P -> B : byte('P') |
vic20 | 0:39a545e08ccd | 196 | U16(Step Value) |
vic20 | 0:39a545e08ccd | 197 | P-TxCRC |
vic20 | 0:39a545e08ccd | 198 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 199 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 200 | B-TxCRC |
vic20 | 0:39a545e08ccd | 201 | |
vic20 | 0:39a545e08ccd | 202 | else |
vic20 | 0:39a545e08ccd | 203 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 204 | <Dump In Buffer> |
vic20 | 0:39a545e08ccd | 205 | B-TxCRC |
vic20 | 0:39a545e08ccd | 206 | |
vic20 | 0:39a545e08ccd | 207 | |
vic20 | 0:39a545e08ccd | 208 | |
vic20 | 0:39a545e08ccd | 209 | Command 'W' Load Wavetable |
vic20 | 0:39a545e08ccd | 210 | |
vic20 | 0:39a545e08ccd | 211 | P -> B : byte('W') |
vic20 | 0:39a545e08ccd | 212 | U16(Table Size) |
vic20 | 0:39a545e08ccd | 213 | |
vic20 | 0:39a545e08ccd | 214 | if bad Table Size |
vic20 | 0:39a545e08ccd | 215 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 216 | B-TxCRC |
vic20 | 0:39a545e08ccd | 217 | |
vic20 | 0:39a545e08ccd | 218 | else |
vic20 | 0:39a545e08ccd | 219 | P -> B : Table of U16 values |
vic20 | 0:39a545e08ccd | 220 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 221 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 222 | B-TxCRC |
vic20 | 0:39a545e08ccd | 223 | |
vic20 | 0:39a545e08ccd | 224 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 225 | B-TxCRC |
vic20 | 0:39a545e08ccd | 226 | |
vic20 | 0:39a545e08ccd | 227 | Command 'w' Load Secondary Wavetable |
vic20 | 0:39a545e08ccd | 228 | |
vic20 | 0:39a545e08ccd | 229 | P -> B : byte('W') |
vic20 | 0:39a545e08ccd | 230 | U16(Table Size) |
vic20 | 0:39a545e08ccd | 231 | |
vic20 | 0:39a545e08ccd | 232 | if bad Table Size |
vic20 | 0:39a545e08ccd | 233 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 234 | B-TxCRC |
vic20 | 0:39a545e08ccd | 235 | |
vic20 | 0:39a545e08ccd | 236 | else |
vic20 | 0:39a545e08ccd | 237 | P -> B : Table of U16 values |
vic20 | 0:39a545e08ccd | 238 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 239 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 240 | B-TxCRC |
vic20 | 0:39a545e08ccd | 241 | |
vic20 | 0:39a545e08ccd | 242 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 243 | B-TxCRC |
vic20 | 0:39a545e08ccd | 244 | |
vic20 | 0:39a545e08ccd | 245 | Command 'V' Wave Response |
vic20 | 0:39a545e08ccd | 246 | |
vic20 | 0:39a545e08ccd | 247 | P -> B : byte('V') |
vic20 | 0:39a545e08ccd | 248 | U16(Number of Waves) |
vic20 | 0:39a545e08ccd | 249 | P-TxCRC |
vic20 | 0:39a545e08ccd | 250 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 251 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 252 | B-TxCRC |
vic20 | 0:39a545e08ccd | 253 | |
vic20 | 0:39a545e08ccd | 254 | else |
vic20 | 0:39a545e08ccd | 255 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 256 | <Dump In buffer> |
vic20 | 0:39a545e08ccd | 257 | B-TxCRC |
vic20 | 0:39a545e08ccd | 258 | |
vic20 | 0:39a545e08ccd | 259 | Command 'v' Dual Wave Response |
vic20 | 0:39a545e08ccd | 260 | |
vic20 | 0:39a545e08ccd | 261 | P -> B : byte('V') |
vic20 | 0:39a545e08ccd | 262 | U16(Number of Waves) |
vic20 | 0:39a545e08ccd | 263 | P-TxCRC |
vic20 | 0:39a545e08ccd | 264 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 265 | B -> P : ECRC |
vic20 | 1:d81bef65eece | 266 | B-TxCRC |
vic20 | 0:39a545e08ccd | 267 | else |
vic20 | 0:39a545e08ccd | 268 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 269 | <Dump In buffer> |
vic20 | 0:39a545e08ccd | 270 | B-TxCRC |
vic20 | 0:39a545e08ccd | 271 | |
vic20 | 1:d81bef65eece | 272 | Command 'Q' Wave Play |
vic20 | 1:d81bef65eece | 273 | |
vic20 | 1:d81bef65eece | 274 | P -> B : byte('Q') |
vic20 | 1:d81bef65eece | 275 | U16(Number of Waves) |
vic20 | 1:d81bef65eece | 276 | P-TxCRC |
vic20 | 1:d81bef65eece | 277 | B : if P-CRC != B-RxCRC |
vic20 | 1:d81bef65eece | 278 | B -> P : ECRC |
vic20 | 1:d81bef65eece | 279 | B-TxCRC |
vic20 | 1:d81bef65eece | 280 | else |
vic20 | 1:d81bef65eece | 281 | B -> P : ACK |
vic20 | 1:d81bef65eece | 282 | if halt TRAN_HALT |
vic20 | 1:d81bef65eece | 283 | else TRAN_OK |
vic20 | 1:d81bef65eece | 284 | B-TxCRC |
vic20 | 1:d81bef65eece | 285 | |
vic20 | 1:d81bef65eece | 286 | Command 'q' Dual Wave Play |
vic20 | 1:d81bef65eece | 287 | |
vic20 | 1:d81bef65eece | 288 | P -> B : byte('q') |
vic20 | 1:d81bef65eece | 289 | U16(Number of Waves) |
vic20 | 1:d81bef65eece | 290 | P-TxCRC |
vic20 | 1:d81bef65eece | 291 | B : if P-CRC != B-RxCRC |
vic20 | 1:d81bef65eece | 292 | B -> P : ECRC |
vic20 | 1:d81bef65eece | 293 | B-TxCRC |
vic20 | 1:d81bef65eece | 294 | else |
vic20 | 1:d81bef65eece | 295 | B -> P : ACK |
vic20 | 1:d81bef65eece | 296 | if halt TRAN_HALT |
vic20 | 1:d81bef65eece | 297 | else TRAN_OK |
vic20 | 1:d81bef65eece | 298 | B-TxCRC |
vic20 | 1:d81bef65eece | 299 | |
vic20 | 0:39a545e08ccd | 300 | Command 'X' Single Wave Response |
vic20 | 0:39a545e08ccd | 301 | |
vic20 | 0:39a545e08ccd | 302 | P -> B : byte('X') |
vic20 | 0:39a545e08ccd | 303 | Byte(Channel to read) |
vic20 | 0:39a545e08ccd | 304 | U16(Number of Waves) |
vic20 | 0:39a545e08ccd | 305 | P-TxCRC |
vic20 | 0:39a545e08ccd | 306 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 307 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 308 | B-TxCRC |
vic20 | 0:39a545e08ccd | 309 | |
vic20 | 0:39a545e08ccd | 310 | else |
vic20 | 0:39a545e08ccd | 311 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 312 | <Dump In buffer> |
vic20 | 0:39a545e08ccd | 313 | B-TxCRC |
vic20 | 0:39a545e08ccd | 314 | |
vic20 | 0:39a545e08ccd | 315 | Command 'E' Soft Reset |
vic20 | 0:39a545e08ccd | 316 | |
vic20 | 0:39a545e08ccd | 317 | P -> B : byte('E') |
vic20 | 0:39a545e08ccd | 318 | P-TxCRC |
vic20 | 0:39a545e08ccd | 319 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 320 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 321 | B-TxCRC |
vic20 | 0:39a545e08ccd | 322 | else |
vic20 | 0:39a545e08ccd | 323 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 324 | B-TxCRC |
vic20 | 0:39a545e08ccd | 325 | |
vic20 | 0:39a545e08ccd | 326 | Command 'H' Digital I/O Mode |
vic20 | 0:39a545e08ccd | 327 | |
vic20 | 0:39a545e08ccd | 328 | P -> B : byte('H') |
vic20 | 0:39a545e08ccd | 329 | byte(line) |
vic20 | 0:39a545e08ccd | 330 | byte(mode) |
vic20 | 0:39a545e08ccd | 331 | P-TxCRC |
vic20 | 0:39a545e08ccd | 332 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 333 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 334 | B-TxCRC |
vic20 | 0:39a545e08ccd | 335 | |
vic20 | 0:39a545e08ccd | 336 | else if not valid channel or mode |
vic20 | 0:39a545e08ccd | 337 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 338 | B-TxCRC |
vic20 | 0:39a545e08ccd | 339 | else |
vic20 | 0:39a545e08ccd | 340 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 341 | B-TxCRC |
vic20 | 0:39a545e08ccd | 342 | |
vic20 | 0:39a545e08ccd | 343 | Command 'J' Digital I/O Write |
vic20 | 0:39a545e08ccd | 344 | |
vic20 | 0:39a545e08ccd | 345 | P -> B : byte('J') |
vic20 | 0:39a545e08ccd | 346 | byte(line) |
vic20 | 0:39a545e08ccd | 347 | byte(value) |
vic20 | 0:39a545e08ccd | 348 | P-TxCRC |
vic20 | 0:39a545e08ccd | 349 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 350 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 351 | B-TxCRC |
vic20 | 0:39a545e08ccd | 352 | |
vic20 | 0:39a545e08ccd | 353 | else if not valid channel |
vic20 | 0:39a545e08ccd | 354 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 355 | B-TxCRC |
vic20 | 0:39a545e08ccd | 356 | else |
vic20 | 0:39a545e08ccd | 357 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 358 | B-TxCRC |
vic20 | 0:39a545e08ccd | 359 | |
vic20 | 0:39a545e08ccd | 360 | Command 'K' Digital I/O Read |
vic20 | 0:39a545e08ccd | 361 | |
vic20 | 0:39a545e08ccd | 362 | P -> B : byte('J') |
vic20 | 0:39a545e08ccd | 363 | byte(line) |
vic20 | 0:39a545e08ccd | 364 | P-TxCRC |
vic20 | 0:39a545e08ccd | 365 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 366 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 367 | B-TxCRC |
vic20 | 0:39a545e08ccd | 368 | |
vic20 | 0:39a545e08ccd | 369 | else if not valid channel |
vic20 | 0:39a545e08ccd | 370 | B -> P : NACK |
vic20 | 0:39a545e08ccd | 371 | B-TxCRC |
vic20 | 0:39a545e08ccd | 372 | else |
vic20 | 0:39a545e08ccd | 373 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 374 | byte(line value) |
vic20 | 0:39a545e08ccd | 375 | B-TxCRC |
vic20 | 0:39a545e08ccd | 376 | |
vic20 | 0:39a545e08ccd | 377 | Command 'N' Number of ADC readings |
vic20 | 0:39a545e08ccd | 378 | |
vic20 | 0:39a545e08ccd | 379 | P -> B : byte('N') |
vic20 | 0:39a545e08ccd | 380 | u16(n) |
vic20 | 0:39a545e08ccd | 381 | P-TxCRC |
vic20 | 0:39a545e08ccd | 382 | B : if P-CRC != B-RxCRC |
vic20 | 0:39a545e08ccd | 383 | B -> P : ECRC |
vic20 | 0:39a545e08ccd | 384 | B-TxCRC |
vic20 | 0:39a545e08ccd | 385 | else |
vic20 | 0:39a545e08ccd | 386 | B -> P : ACK |
vic20 | 0:39a545e08ccd | 387 | B-TxCRC |
vic20 | 0:39a545e08ccd | 388 | |
vic20 | 0:39a545e08ccd | 389 | <Dump In Buffer> |
vic20 | 1:d81bef65eece | 390 | if halt |
vic20 | 1:d81bef65eece | 391 | B -> P : TRAN_HALT |
vic20 | 1:d81bef65eece | 392 | |
vic20 | 0:39a545e08ccd | 393 | if overrun |
vic20 | 0:39a545e08ccd | 394 | B -> P : TRAN_OVERRUN |
vic20 | 0:39a545e08ccd | 395 | |
vic20 | 0:39a545e08ccd | 396 | else |
vic20 | 0:39a545e08ccd | 397 | B -> P : TRAN_OK |
vic20 | 0:39a545e08ccd | 398 | Byte(Number Analog) |
vic20 | 0:39a545e08ccd | 399 | Byte(Number Digital) |
vic20 | 0:39a545e08ccd | 400 | U16(Number Samples) |
vic20 | 0:39a545e08ccd | 401 | All Samples in U16 |
vic20 | 0:39a545e08ccd | 402 | |
vic20 | 0:39a545e08ccd | 403 | <Dump Triggered In Buffer> |
vic20 | 1:d81bef65eece | 404 | if halt |
vic20 | 1:d81bef65eece | 405 | B -> P : TRAN_HALT |
vic20 | 1:d81bef65eece | 406 | |
vic20 | 0:39a545e08ccd | 407 | if overrun |
vic20 | 0:39a545e08ccd | 408 | B -> P : TRAN_OVERRUN |
vic20 | 0:39a545e08ccd | 409 | |
vic20 | 0:39a545e08ccd | 410 | if timeout |
vic20 | 0:39a545e08ccd | 411 | B -> P : TRAN_TIMEOUT |
vic20 | 0:39a545e08ccd | 412 | |
vic20 | 0:39a545e08ccd | 413 | else |
vic20 | 0:39a545e08ccd | 414 | B -> P : TRAN_OK |
vic20 | 0:39a545e08ccd | 415 | Byte(Number Analog) |
vic20 | 0:39a545e08ccd | 416 | Byte(Number Digital) |
vic20 | 0:39a545e08ccd | 417 | U16(Number Samples) |
vic20 | 0:39a545e08ccd | 418 | All Samples in U16 |
vic20 | 0:39a545e08ccd | 419 |