I2c connection without expander

Is it possible to access the i2c without the expander? I have an ansible I want to hook up but don’t need any of the other features of the expander.

Thanks!

probably related to this post, about diy expanders, and potential for creating your own.

there is a ‘control port’ on the back of the MM, which Id guess is i2c + power.
(Id assume the audio expander is i2s?)

we don’t have pin outs for the expansion points, nor tech details.
what voltage level are used 3v3 or 5v on i2c? master ? pull down?
this is really important, often these expansion ports have NO protection, so easy to blow up your module.
bare in mind, i2c was never designed to be a user-level connection, frankly its adoption in eurorack was a pretty questionable move.

anyway, if 4ms do allow for custom expanders by ‘users’, for diy purposes, they will publish the above.


more generally, as this would also be relevant to an i2c expander…

i2c is just the wire protocol, it does not infer how its used, basically its just a bunch of registers.
this is ok, for things like switches/faders which just have a simple value, that can be almost a ‘generic’ use-case.

however, but more complex use cases require a protocol on top, which would have to be supported by the ‘host’ (e.g. MM)

not sure how 4ms plan to handle this on the MM.
my assumption, is the core firmware wouldn’t do much with it, rather it would just allow ‘user modules’ access to read/write i2c registers (in an abstract way).
this would allow 3rd parties to implement modules for specific use-cases e.g. other eurorack modules.
(we cannot expect 4ms to code for every i2c capable eurorack module)

also… I wonder if it will only handle i2c slave modules?
this would rule out things likes Teletype which are masters.

or will it support i2c multi master, as some chipsets do?
though, Im not sure if this only works if all other masters are also multi master.
Ive been looking at this with another SoC, which has multi master, but to be honest, I decided just supporting slaves was priority, and wont bother with multi master till much later if ever :wink:

We do plan to support I2C devices. Right now there are exposed I2C pins on various headers, but the MetaModule does not send out any useful I2C data, nor will it respond to any incoming data, so there’s no point in hooking something up (without writing custom firmware)

There are several sets of I2C pins that are exposed, some can only function as “follower” and some could function as either “leader” or “follower”, with some restrictions on what other expanders are connected.

For extra protection, we could run it through an I2C<->UART chip so if something blows, it’s a cheap expander chip, not the main MPU. Also that would give us a dedicated I2C follower+leader port.

I’m curious what other SoC you’re working with? The STM32MP1 says it supports multimaster but I haven’t tried that out to see if its as good as it sounds. I imagine there would need to be some extra stuff like dealing with collisions.

1 Like

rockchip rk3288.
I think multi-master is pretty common these days, seems its basically an arbitration system for the bus,
the issue is, because its arbitration, ALL masters have to be setup as multi-master.
that’d usually be fine, as a hardware engineer has control over all the i2c elements.

but in this ‘eurorack free for all’ - its probably not that useful.
e.g. I bet teletype is not a multi master, so all bets are off.

so yeah, like you, Id probably go for one master i2c connection and another for slave.
this is also easier to explain to end users.
ofc, the limitation is, you’ll only be able to be a slave to ONE other module (assuming you have 1 i2c slave port.

all that said… im not sure if this can be dynamic… e.g. on linux do I have to specify master/slave in device tree, or can I do at ‘runtime’, if the later, it can just be a ‘mode’
( I kind of assume, its more kernel parameter, but I dont know…)

yeah, I was similarly thinking about having an intermediary…
partly because Ive noticed some eurorack modules are using 5v on the i2c bus, whereas I want 3v3 ( * )

if the expansion port is connecting ‘directly’ to the STM32MP1, I guess your also wanting 3v3? or are they 5v tolerant (not sure id trust this ;))

btw: did you add pull up resistors on the i2c busses?

but yeah, overall, I think it makes sense to have a ‘cheaper’ i2c module that provides some protection.


( * ) I guess this make sense in eurorack as we have a 5v rail, so easy for i2c peripherals to power directly.


but overall, I think with i2c, I really have to decide what is the main use-case.

for me, Im not that interested in connecting complex modules, esp. as they will require specific support… and I dont have any such modules anyway :wink:

rather its about connecting some simpler i2c devices things
e.g. I have some nice encoders with colour (to show ‘value’), and also some bela trill sensors. these are all pretty simple, and they are also all slaves !

I think for more complex communication, between complex devices - I think Id prefer to use usb - it’s designed for exactly this use-case. esp. as we can have propriety protocols…
or hell, go old school, use a sysex stream between them, if you dont need too high data rates.

Very cool! I looked at some rockchips, good price/performance ratio. Can I ask what you’re making, or is it secret at this stage? (sorry OP for taking this thread totally off-topic)

Yeah, explaining usage is important! Never underestimate the cost of customer support for a complicated feature :slight_smile:

I think being a slave/follower to exactly one other module is what users would expect : as I understand the “monome I2C standard”, a module would only be a slave/follower to exactly one master/leader at a time.

Yeah it’s no problem to switch modes dynamically, just setting a bit in the config register and then toggling another bit to reset it into the new mode. Assuming the other module is OK with this…

Yeah 3.3V. I asked around and it seems like all monome/teletype/etc I2C devices use this voltage…? I’m not 100% positive though. Diode clamps are cheap and easy.

And yeah, we use pull-ups, as required. It won’t work reliably without them.

This chip is the chip I looked into (have not used it yet): https://www.mouser.com/ProductDetail/NXP-Semiconductors/SC16IS750IBS128?qs=LOCUfHb8d9u%252B6gAtDhpGMg%3D%3D

1 Like

nah, no secret - Ive been developing ‘virtual modules’ for the Percussa SSP/XMX for quite a few years.

what can I say, I like ‘open’ virtual modules in eurorack, as they enable me put my code/ideas into hardware ecosystem (eurorack).
I added MM, as not only this, but Id been recently been developing for vcv, so kind of a natural fit to add.

anyway, i2c, 12-18 months ago, I was investigating connecting the bela trill sensors up to the SSP (rk3288) … but given Im a hobbyist at electronics, got cold feet due potential damage (due to the 5v vs 3v3) to the costly SSP!

but started looking into it again recently, when I got the XMX (rk3308) , as thats quite a bit cheaper to experiment with.

I think monome is 5v e.g.

similarly, . I only found a brief reference for the er301
here wrt. mod for tt and here wrt.revisions

But I didn’t do extensive research when I looked into it, but did find a few 5v i2c implementations within eurorack… and often, it wasn’t documented, so a bit of a minefield… but I came to conclusion assume 5v for safety and shift down to 3v3.