Closed
Description
Issue
Peripheral fails to send bytes when of certain range, spaced out by 128.
0-127 -> Can send
128-254 -> Cannot send
255-511 -> Can send
etc.
I'm using an iMX6UL based linux host as the host to make the requests
while true; do i2cget -y 1 0x0b 0x14 w; sleep 0.05;done
Hardware/Software
Have tried on a GrandCentral M4, and Trinket M0, same results. I've tried v4.3.1, v5.3.1, and latest v6.
Observations
- The span at which the transfers take place and do not are 128 bytes apart
- Changing to big endian bytes seems to alleviate the problem (at least in the low integer ranges, need to go full range)
- When bytes not being sent, I noticed it's getting stuck on
if (!self->sercom->I2CS.INTFLAG.bit.DRDY)
in ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
Code to reproduce
from i2cperipheral import I2CPeripheral
import time
regs = [0] * 16
index = 0
reg_check = 0
def decimalToBinary(n):
return bin(n).replace("0b", "")
while True:
with I2CPeripheral(board.SCL, board.SDA, (0x0b, 0x41)) as slave:
while True:
r = slave.request()
if not r:
# Maybe do some housekeeping
continue
with r: # Closes the transfer if necessary by sending a NACK or feeding the master dummy bytes
if r.address == 0x0b:
# print("address 0x0b")
if not r.is_read: # Master write which is Slave read
b = r.read(1)
elif r.is_restart: # Combined transfer: This is the Master read message
# print("Restart")
n = r.write(int.to_bytes(reg_check,2,'little')) #FAILS TO WRITE PACKETS AFTER 127, BIG endians seems to be OK
reg_check +=1
print("n is ", n, " for regcheck ", hex(reg_check), " ", reg_check, " ", decimalToBinary(reg_check))
# fix to help prevent SDA/SCL lockup after prolonged use
time.sleep(0.01)
r.close()
break
Console Output
when "n is 1", the bytes are not written to I2C bus as observed with a Saleae Logic.
n is 2 for regcheck 0x1 1 1
n is 2 for regcheck 0x2 2 10
n is 2 for regcheck 0x3 3 11
n is 2 for regcheck 0x4 4 100
n is 2 for regcheck 0x5 5 101
n is 2 for regcheck 0x6 6 110
n is 2 for regcheck 0x7 7 111
n is 2 for regcheck 0x8 8 1000
n is 2 for regcheck 0x9 9 1001
n is 2 for regcheck 0xa 10 1010
n is 2 for regcheck 0xb 11 1011
n is 2 for regcheck 0xc 12 1100
n is 2 for regcheck 0xd 13 1101
n is 2 for regcheck 0xe 14 1110
n is 2 for regcheck 0xf 15 1111
n is 2 for regcheck 0x10 16 10000
n is 2 for regcheck 0x11 17 10001
n is 2 for regcheck 0x12 18 10010
n is 2 for regcheck 0x13 19 10011
n is 2 for regcheck 0x14 20 10100
n is 2 for regcheck 0x15 21 10101
n is 2 for regcheck 0x16 22 10110
n is 2 for regcheck 0x17 23 10111
n is 2 for regcheck 0x18 24 11000
n is 2 for regcheck 0x19 25 11001
n is 2 for regcheck 0x1a 26 11010
n is 2 for regcheck 0x1b 27 11011
n is 2 for regcheck 0x1c 28 11100
n is 2 for regcheck 0x1d 29 11101
n is 2 for regcheck 0x1e 30 11110
n is 2 for regcheck 0x1f 31 11111
n is 2 for regcheck 0x20 32 100000
n is 2 for regcheck 0x21 33 100001
n is 2 for regcheck 0x22 34 100010
n is 2 for regcheck 0x23 35 100011
n is 2 for regcheck 0x24 36 100100
n is 2 for regcheck 0x25 37 100101
n is 2 for regcheck 0x26 38 100110
n is 2 for regcheck 0x27 39 100111
n is 2 for regcheck 0x28 40 101000
n is 2 for regcheck 0x29 41 101001
n is 2 for regcheck 0x2a 42 101010
n is 2 for regcheck 0x2b 43 101011
n is 2 for regcheck 0x2c 44 101100
n is 2 for regcheck 0x2d 45 101101
n is 2 for regcheck 0x2e 46 101110
n is 2 for regcheck 0x2f 47 101111
n is 2 for regcheck 0x30 48 110000
n is 2 for regcheck 0x31 49 110001
n is 2 for regcheck 0x32 50 110010
n is 2 for regcheck 0x33 51 110011
n is 2 for regcheck 0x34 52 110100
n is 2 for regcheck 0x35 53 110101
n is 2 for regcheck 0x36 54 110110
n is 2 for regcheck 0x37 55 110111
n is 2 for regcheck 0x38 56 111000
n is 2 for regcheck 0x39 57 111001
n is 2 for regcheck 0x3a 58 111010
n is 2 for regcheck 0x3b 59 111011
n is 2 for regcheck 0x3c 60 111100
n is 2 for regcheck 0x3d 61 111101
n is 2 for regcheck 0x3e 62 111110
n is 2 for regcheck 0x3f 63 111111
n is 2 for regcheck 0x40 64 1000000
n is 2 for regcheck 0x41 65 1000001
n is 2 for regcheck 0x42 66 1000010
n is 2 for regcheck 0x43 67 1000011
n is 2 for regcheck 0x44 68 1000100
n is 2 for regcheck 0x45 69 1000101
n is 2 for regcheck 0x46 70 1000110
n is 2 for regcheck 0x47 71 1000111
n is 2 for regcheck 0x48 72 1001000
n is 2 for regcheck 0x49 73 1001001
n is 2 for regcheck 0x4a 74 1001010
n is 2 for regcheck 0x4b 75 1001011
n is 2 for regcheck 0x4c 76 1001100
n is 2 for regcheck 0x4d 77 1001101
n is 2 for regcheck 0x4e 78 1001110
n is 2 for regcheck 0x4f 79 1001111
n is 2 for regcheck 0x50 80 1010000
n is 2 for regcheck 0x51 81 1010001
n is 2 for regcheck 0x52 82 1010010
n is 2 for regcheck 0x53 83 1010011
n is 2 for regcheck 0x54 84 1010100
n is 2 for regcheck 0x55 85 1010101
n is 2 for regcheck 0x56 86 1010110
n is 2 for regcheck 0x57 87 1010111
n is 2 for regcheck 0x58 88 1011000
n is 2 for regcheck 0x59 89 1011001
n is 2 for regcheck 0x5a 90 1011010
n is 2 for regcheck 0x5b 91 1011011
n is 2 for regcheck 0x5c 92 1011100
n is 2 for regcheck 0x5d 93 1011101
n is 2 for regcheck 0x5e 94 1011110
n is 2 for regcheck 0x5f 95 1011111
n is 2 for regcheck 0x60 96 1100000
n is 2 for regcheck 0x61 97 1100001
n is 2 for regcheck 0x62 98 1100010
n is 2 for regcheck 0x63 99 1100011
n is 2 for regcheck 0x64 100 1100100
n is 2 for regcheck 0x65 101 1100101
n is 2 for regcheck 0x66 102 1100110
n is 2 for regcheck 0x67 103 1100111
n is 2 for regcheck 0x68 104 1101000
n is 2 for regcheck 0x69 105 1101001
n is 2 for regcheck 0x6a 106 1101010
n is 2 for regcheck 0x6b 107 1101011
n is 2 for regcheck 0x6c 108 1101100
n is 2 for regcheck 0x6d 109 1101101
n is 2 for regcheck 0x6e 110 1101110
n is 2 for regcheck 0x6f 111 1101111
n is 2 for regcheck 0x70 112 1110000
n is 2 for regcheck 0x71 113 1110001
n is 2 for regcheck 0x72 114 1110010
n is 2 for regcheck 0x73 115 1110011
n is 2 for regcheck 0x74 116 1110100
n is 2 for regcheck 0x75 117 1110101
n is 2 for regcheck 0x76 118 1110110
n is 2 for regcheck 0x77 119 1110111
n is 2 for regcheck 0x78 120 1111000
n is 2 for regcheck 0x79 121 1111001
n is 2 for regcheck 0x7a 122 1111010
n is 2 for regcheck 0x7b 123 1111011
n is 2 for regcheck 0x7c 124 1111100
n is 2 for regcheck 0x7d 125 1111101
n is 2 for regcheck 0x7e 126 1111110
n is 2 for regcheck 0x7f 127 1111111
n is 2 for regcheck 0x80 128 10000000
n is 1 for regcheck 0x81 129 10000001 #starts failing
n is 1 for regcheck 0x82 130 10000010
n is 1 for regcheck 0x83 131 10000011
n is 1 for regcheck 0x84 132 10000100
n is 1 for regcheck 0x85 133 10000101
n is 1 for regcheck 0x86 134 10000110
n is 1 for regcheck 0x87 135 10000111
n is 1 for regcheck 0x88 136 10001000
n is 1 for regcheck 0x89 137 10001001
n is 1 for regcheck 0x8a 138 10001010
n is 1 for regcheck 0x8b 139 10001011
n is 1 for regcheck 0x8c 140 10001100
n is 1 for regcheck 0x8d 141 10001101
n is 1 for regcheck 0x8e 142 10001110
n is 1 for regcheck 0x8f 143 10001111
n is 1 for regcheck 0x90 144 10010000
n is 2 for regcheck 0x91 145 10010001 #rare pass for previous send of 0x90 above
n is 1 for regcheck 0x92 146 10010010
n is 1 for regcheck 0x93 147 10010011
n is 1 for regcheck 0x94 148 10010100
n is 1 for regcheck 0x95 149 10010101
n is 1 for regcheck 0x96 150 10010110
n is 1 for regcheck 0x97 151 10010111
n is 1 for regcheck 0x98 152 10011000
n is 1 for regcheck 0x99 153 10011001
n is 1 for regcheck 0x9a 154 10011010
n is 1 for regcheck 0x9b 155 10011011
n is 1 for regcheck 0x9c 156 10011100
n is 1 for regcheck 0x9d 157 10011101
n is 1 for regcheck 0x9e 158 10011110
n is 1 for regcheck 0x9f 159 10011111
n is 1 for regcheck 0xa0 160 10100000
n is 1 for regcheck 0xa1 161 10100001
n is 1 for regcheck 0xa2 162 10100010
n is 1 for regcheck 0xa3 163 10100011
n is 1 for regcheck 0xa4 164 10100100
n is 1 for regcheck 0xa5 165 10100101
n is 1 for regcheck 0xa6 166 10100110
n is 1 for regcheck 0xa7 167 10100111
n is 1 for regcheck 0xa8 168 10101000
n is 1 for regcheck 0xa9 169 10101001
n is 1 for regcheck 0xaa 170 10101010
n is 1 for regcheck 0xab 171 10101011
n is 2 for regcheck 0xac 172 10101100 #rare pass for previous
n is 1 for regcheck 0xad 173 10101101
n is 2 for regcheck 0xae 174 10101110 #rare pass for previous
n is 1 for regcheck 0xaf 175 10101111
n is 1 for regcheck 0xb0 176 10110000
n is 1 for regcheck 0xb1 177 10110001
n is 1 for regcheck 0xb2 178 10110010
n is 1 for regcheck 0xb3 179 10110011
n is 1 for regcheck 0xb4 180 10110100
n is 2 for regcheck 0xb5 181 10110101 #rare pass for previous
n is 1 for regcheck 0xb6 182 10110110
n is 1 for regcheck 0xb7 183 10110111
n is 1 for regcheck 0xb8 184 10111000
n is 1 for regcheck 0xb9 185 10111001
n is 1 for regcheck 0xba 186 10111010
n is 1 for regcheck 0xbb 187 10111011
n is 1 for regcheck 0xbc 188 10111100
n is 1 for regcheck 0xbd 189 10111101
n is 1 for regcheck 0xbe 190 10111110
n is 1 for regcheck 0xbf 191 10111111
n is 1 for regcheck 0xc0 192 11000000
n is 1 for regcheck 0xc1 193 11000001
n is 1 for regcheck 0xc2 194 11000010
n is 1 for regcheck 0xc3 195 11000011
n is 1 for regcheck 0xc4 196 11000100
n is 1 for regcheck 0xc5 197 11000101
n is 2 for regcheck 0xc6 198 11000110 #rare pass for previous
n is 1 for regcheck 0xc7 199 11000111
n is 1 for regcheck 0xc8 200 11001000
n is 1 for regcheck 0xc9 201 11001001
n is 1 for regcheck 0xca 202 11001010
n is 1 for regcheck 0xcb 203 11001011
n is 1 for regcheck 0xcc 204 11001100
n is 1 for regcheck 0xcd 205 11001101
n is 1 for regcheck 0xce 206 11001110
n is 1 for regcheck 0xcf 207 11001111
n is 1 for regcheck 0xd0 208 11010000
n is 1 for regcheck 0xd1 209 11010001
n is 1 for regcheck 0xd2 210 11010010
n is 1 for regcheck 0xd3 211 11010011
n is 1 for regcheck 0xd4 212 11010100
n is 1 for regcheck 0xd5 213 11010101
n is 1 for regcheck 0xd6 214 11010110
n is 1 for regcheck 0xd7 215 11010111
n is 1 for regcheck 0xd8 216 11011000
n is 1 for regcheck 0xd9 217 11011001
n is 1 for regcheck 0xda 218 11011010
n is 1 for regcheck 0xdb 219 11011011
n is 1 for regcheck 0xdc 220 11011100
n is 1 for regcheck 0xdd 221 11011101
n is 1 for regcheck 0xde 222 11011110
n is 1 for regcheck 0xdf 223 11011111
n is 1 for regcheck 0xe0 224 11100000
n is 1 for regcheck 0xe1 225 11100001
n is 1 for regcheck 0xe2 226 11100010
n is 1 for regcheck 0xe3 227 11100011
n is 1 for regcheck 0xe4 228 11100100
n is 1 for regcheck 0xe5 229 11100101
n is 1 for regcheck 0xe6 230 11100110
n is 2 for regcheck 0xe7 231 11100111
n is 1 for regcheck 0xe8 232 11101000
n is 1 for regcheck 0xe9 233 11101001
n is 1 for regcheck 0xea 234 11101010
n is 1 for regcheck 0xeb 235 11101011
n is 1 for regcheck 0xec 236 11101100
n is 1 for regcheck 0xed 237 11101101
n is 1 for regcheck 0xee 238 11101110
n is 1 for regcheck 0xef 239 11101111
n is 1 for regcheck 0xf0 240 11110000
n is 1 for regcheck 0xf1 241 11110001
n is 1 for regcheck 0xf2 242 11110010
n is 1 for regcheck 0xf3 243 11110011
n is 1 for regcheck 0xf4 244 11110100
n is 1 for regcheck 0xf5 245 11110101
n is 1 for regcheck 0xf6 246 11110110
n is 1 for regcheck 0xf7 247 11110111
n is 1 for regcheck 0xf8 248 11111000
n is 1 for regcheck 0xf9 249 11111001
n is 1 for regcheck 0xfa 250 11111010
n is 1 for regcheck 0xfb 251 11111011
n is 1 for regcheck 0xfc 252 11111100
n is 1 for regcheck 0xfd 253 11111101
n is 1 for regcheck 0xfe 254 11111110
n is 1 for regcheck 0xff 255 11111111
n is 1 for regcheck 0x100 256 100000000
n is 2 for regcheck 0x101 257 100000001 # starts working consistently here
n is 2 for regcheck 0x102 258 100000010
n is 2 for regcheck 0x103 259 100000011
n is 2 for regcheck 0x104 260 100000100
n is 2 for regcheck 0x105 261 100000101
n is 2 for regcheck 0x106 262 100000110
n is 2 for regcheck 0x107 263 100000111
n is 2 for regcheck 0x108 264 100001000
n is 2 for regcheck 0x109 265 100001001
n is 2 for regcheck 0x10a 266 100001010
n is 2 for regcheck 0x10b 267 100001011
n is 2 for regcheck 0x10c 268 100001100
n is 2 for regcheck 0x10d 269 100001101
n is 2 for regcheck 0x10e 270 100001110
n is 2 for regcheck 0x10f 271 100001111
n is 2 for regcheck 0x110 272 100010000
n is 2 for regcheck 0x111 273 100010001
n is 2 for regcheck 0x112 274 100010010
n is 2 for regcheck 0x113 275 100010011
n is 2 for regcheck 0x114 276 100010100
n is 2 for regcheck 0x115 277 100010101
n is 2 for regcheck 0x116 278 100010110
n is 2 for regcheck 0x117 279 100010111
n is 2 for regcheck 0x118 280 100011000
n is 2 for regcheck 0x119 281 100011001
n is 2 for regcheck 0x11a 282 100011010
n is 2 for regcheck 0x11b 283 100011011
n is 2 for regcheck 0x11c 284 100011100
n is 2 for regcheck 0x11d 285 100011101
n is 2 for regcheck 0x11e 286 100011110
n is 2 for regcheck 0x11f 287 100011111
n is 2 for regcheck 0x120 288 100100000
n is 2 for regcheck 0x121 289 100100001
n is 2 for regcheck 0x122 290 100100010
n is 2 for regcheck 0x123 291 100100011
n is 2 for regcheck 0x124 292 100100100
n is 2 for regcheck 0x125 293 100100101
n is 2 for regcheck 0x126 294 100100110
n is 2 for regcheck 0x127 295 100100111
n is 2 for regcheck 0x128 296 100101000
n is 2 for regcheck 0x129 297 100101001
n is 2 for regcheck 0x12a 298 100101010
n is 2 for regcheck 0x12b 299 100101011
n is 2 for regcheck 0x12c 300 100101100
n is 2 for regcheck 0x12d 301 100101101
n is 2 for regcheck 0x12e 302 100101110
n is 2 for regcheck 0x12f 303 100101111
n is 2 for regcheck 0x130 304 100110000
n is 2 for regcheck 0x131 305 100110001
n is 2 for regcheck 0x132 306 100110010
n is 2 for regcheck 0x133 307 100110011
n is 2 for regcheck 0x134 308 100110100
n is 2 for regcheck 0x135 309 100110101
n is 2 for regcheck 0x136 310 100110110
n is 2 for regcheck 0x137 311 100110111
n is 2 for regcheck 0x138 312 100111000
n is 2 for regcheck 0x139 313 100111001
n is 2 for regcheck 0x13a 314 100111010
n is 2 for regcheck 0x13b 315 100111011
n is 2 for regcheck 0x13c 316 100111100
n is 2 for regcheck 0x13d 317 100111101
n is 2 for regcheck 0x13e 318 100111110
n is 2 for regcheck 0x13f 319 100111111
n is 2 for regcheck 0x140 320 101000000
n is 2 for regcheck 0x141 321 101000001
n is 2 for regcheck 0x142 322 101000010
n is 2 for regcheck 0x143 323 101000011
n is 2 for regcheck 0x144 324 101000100
n is 2 for regcheck 0x145 325 101000101
n is 2 for regcheck 0x146 326 101000110
n is 2 for regcheck 0x147 327 101000111
n is 2 for regcheck 0x148 328 101001000
n is 2 for regcheck 0x149 329 101001001
n is 2 for regcheck 0x14a 330 101001010
n is 2 for regcheck 0x14b 331 101001011
n is 2 for regcheck 0x14c 332 101001100
n is 2 for regcheck 0x14d 333 101001101
n is 2 for regcheck 0x14e 334 101001110
n is 2 for regcheck 0x14f 335 101001111
n is 2 for regcheck 0x150 336 101010000
n is 2 for regcheck 0x151 337 101010001
n is 2 for regcheck 0x152 338 101010010
n is 2 for regcheck 0x153 339 101010011
n is 2 for regcheck 0x154 340 101010100
n is 2 for regcheck 0x155 341 101010101
n is 2 for regcheck 0x156 342 101010110
n is 2 for regcheck 0x157 343 101010111
n is 2 for regcheck 0x158 344 101011000
n is 2 for regcheck 0x159 345 101011001
n is 2 for regcheck 0x15a 346 101011010
n is 2 for regcheck 0x15b 347 101011011
n is 2 for regcheck 0x15c 348 101011100
n is 2 for regcheck 0x15d 349 101011101
n is 2 for regcheck 0x15e 350 101011110
n is 2 for regcheck 0x15f 351 101011111
n is 2 for regcheck 0x160 352 101100000
n is 2 for regcheck 0x161 353 101100001
n is 2 for regcheck 0x162 354 101100010
n is 2 for regcheck 0x163 355 101100011
n is 2 for regcheck 0x164 356 101100100
n is 2 for regcheck 0x165 357 101100101
n is 2 for regcheck 0x166 358 101100110
n is 2 for regcheck 0x167 359 101100111
n is 2 for regcheck 0x168 360 101101000
n is 2 for regcheck 0x169 361 101101001
n is 2 for regcheck 0x16a 362 101101010
n is 2 for regcheck 0x16b 363 101101011
n is 2 for regcheck 0x16c 364 101101100
n is 2 for regcheck 0x16d 365 101101101
n is 2 for regcheck 0x16e 366 101101110
n is 2 for regcheck 0x16f 367 101101111
n is 2 for regcheck 0x170 368 101110000
n is 2 for regcheck 0x171 369 101110001
n is 2 for regcheck 0x172 370 101110010
n is 2 for regcheck 0x173 371 101110011
n is 2 for regcheck 0x174 372 101110100
n is 2 for regcheck 0x175 373 101110101
n is 2 for regcheck 0x176 374 101110110
n is 2 for regcheck 0x177 375 101110111
n is 2 for regcheck 0x178 376 101111000
n is 2 for regcheck 0x179 377 101111001
n is 2 for regcheck 0x17a 378 101111010
n is 2 for regcheck 0x17b 379 101111011
n is 2 for regcheck 0x17c 380 101111100
n is 2 for regcheck 0x17d 381 101111101
n is 2 for regcheck 0x17e 382 101111110
n is 2 for regcheck 0x17f 383 101111111
n is 2 for regcheck 0x180 384 110000000
n is 1 for regcheck 0x181 385 110000001
Metadata
Metadata
Assignees
Labels
No labels