a thread to discuss and document teletype i2c protocol.
devices/firmwares that currently support it:
- white whale / original
- white whale / orca
- white whale / kria
- ansible / levels
- ansible / cycles
- ansible / meadowphysics
- ansible / kria
- ansible / earthsea (eventually)
- ansible / tt expander (up to 4 devices)
- ansible / midi
- telex txo (up to 8 devices)
- telex txi (up to 8 devices)
- just friends
- w/ (up to 4 devices)
- er-301 (up to 3 devices)
- matrixarchate (up to 3 devices)
- crow (multiple devices?)
i’m listing different firmwares separately, since we want i2c address to be unique per firmware, not per device, to support cases like using 2 ansibles in different modes. that’s over 40 unique addresses.
it appears we’ve been operating with the wrong assumption that the address space is 256 possible addresses - it looks like addresses are 7 bit, so we actually have 128 addresses available. also as i and @bpcmusic discovered, address 0 is reserved as “send to all” (more on this below). one of the questions is - do we want to use any other of the reserved addresses as defined in the specification (0000xxx and 1111xxx)? that’s 16 addresses which still leaves us plenty (but i don’t know how many addresses crows will use).
address 0 - it appears asf already supports it, so we can’t use it for any specific firmware, but we could use it to our advantage to support things like global clock, global reset etc. for such global commands we do need to also standardize/reserve a range, since all followers will respond to them, so if a follower already uses that command for something else it will create a conflict. i propose to reserve a range for such global commands, since we have 256 commands available that should still leave plenty for firmware specific commands (since those wouldn’t need to be unique across all firmwares).
basically, here is what i propose to do:
- assign addresses to all supported devices (keep the currently assigned address wherever possible)
- fix all the incorrect addresses we have right now (by doing &0x7F) - this will need to be tested
- update https://github.com/monome/libavr32/blob/master/src/ii.h 1 - right now it lists both follower addresses and commands, they need to be clearly separated
- document reserved addresses
- define a reserved range for global commands and document
protocol documentation: https://github.com/scanner-darkly/teletype/wiki/Teletype-i2c-protocol