I think that you guys nailed the code for i2c; it is solid for both reads and writes with a small number of devices. In this configuration, if you type the wrong address for an output or input - no foul. Things just keep on running.
As the device count grows - the performance starts to diverge. I’m assuming that this has to do with the aggregate bus resistance and the pull-up resistor value that is in the Teletype. Here is what I am seeing:
-
Writes are solid at high rates up to a large number of devices. I was able to PUMMEL 6 TXo devices while 8 total TX devices were on the bus (+2 TXi). Writes were fast with hardly any perceivable timing discrepancies. We’re talking 24 Triggers and 24 CV values updating every 10ms. Runs and runs and runs. Wow.
-
The stability of read operations decreases with the addition of devices to the bus.
-
The odds that the TT will freeze on the input of an address that is not available (for read or write) goes up precipitously with the number of devices on the bus.
TESTS (all TX units hard-set to 400mHz i2c bus)
2xTXi + 1xTT [AWESOME FOR READS]
- no hanging on bad ports
- 10ms reads from 4 pots to CV 1-4
2xTXi + 1xTXo + 1xTT [GOOD FOR READS]
- no hanging on bad ports
- 10ms pulses to TO.TR 1-4
- 10ms reads from TI.PARAM 1-4 to TO.CV 1-4
- 10ms reads from TI.PARAM 5-8 to CV 1-4
- froze only after ~5 min
2xTXi + 2xTXo + 1xTT [FAIL FOR READS AND MISTAKES]
- hangs on bad ports
- only got to test 1000ms reads from TI.PARAM 1-4 to CV 1-4
- froze after 2s
I am running the shortest cables I have between units.
This doesn’t seem to be a software thing anymore - it is rock solid for 2 external devices plus the TT. It is only when you add units on the bus that things go downhill. I saw the same behavior with the Ansible the other day; I don’t think it matters what is connected - just how many devices.