 I and MPI brought to you by Digi-Key and Adafruit, this is when we take a look at something new over on Digi-Key, Lady Aida, what is it this week? Okay, this week it's from NXP, now I want to get the part number correct. This is the P3S0200 GMX, this is an I3C bi-directional switch, and you might be like, hey, you know, you just said, and it comes in this package, the XQFN10, and be like, hey, you just made a mistake when you said I3C, you meant I2C, right? Because what is I3C? Well, this is I on MPI and we have an extra I, this is, you know, we're gonna talk about I3C because I thought it was kind of interesting, the differences between I3C and I2C, and there's, yeah, there's an extra I, this is the next generation of what I call I2C, I guess it's I3C, I don't know, we have to come up with a name. I have started to see more sensors and devices with I3C, sometimes called MIPI I3C interfaces, and so I took a little bit of a deep dive and I thought I'd tell you all about it and then you'll know why you need this I3C switch. So first up, this is what it is, it's actually, you know, this is still very useful, don't forget, this is also compatible with I2C devices. You have your mic controller on the left, you can connect the A and B or SCL and SDA, and you also have a select and output enable, output enable is like, you know, is the whole thing active, and select lets you connect either to A1B1 or A2B2. So, you know, we've got an eight-way switch for I2C, but this is like, you know, you're not changing some like sub-adress, and you just, when S is high, you connect to one of the targets, when S is low, you connect to the other. So it's an easy way to connect two devices of the same I2C address without having to do any funky muxing. So this is a useful switch just for like, you have two devices of the same address or maybe for some reason they conflict or whatever, you want to keep them separate, and of course, you can turn off the output enable to save power. And this is what it looks like on the inside, it's, you know, there's like this charge pump, because you have to be able to control up to five-volt logic levels, and the control logic is, port isn't there as well. So it's pretty simple, it's not a very complicated design. And also if you, if you're familiar, it looks a lot like the I2C logic level shifting that we use all the time for converting between three and five-volt logic level. So if you didn't know, which is fine, now you know, today is a day we've learned that the I2C bus specification was written and designed by NXP Phillips, Phillips, which is, you know, owned by NXP now. They wrote the original I2C bus specification, which is written here. And they, I think this was published in like the 80s, and then 1.0 was released in 1992. It's been updated. And this is what the original I2C description was kind of intended to be. You'd have I2C, you know, the SDA line and the SCL line. And look, you can connect, you know, you're my controller driver, and then you've got some RAM, and you've got ADC, and you've got LCD, and a gate array. Look at us, we're having so much fun. Everything is just sharing these two pins. Isn't it wonderful and perfect? Well, that's not actually what ended up happening. So what we wanted was to have all these devices share two pins. But as I'm sure anyone out there who's actually implemented I2C devices, it's never quite that. There's DRETIs, there's IRQs, there's select pins. There's like always more stuff. Because I2C is, you know, a polling interface, and you need interrupts, or you need to have like data RETIs or selects, or there's other, you know, things that you have to connect to or address changes. And so, you know, in intermixing with SPI devices, because you need higher speeds, and then like now you have a chip select for a reline. So what I3C is intended to do is replace all of that with a high speed, again, two pin interface. Well, really, what we intended is what we got. So like for real this time, right? So, you know, MIPI, which you may be familiar because they also published a display and camera specifications and other specifications. They do publish the I3C spec. They do have this annoying-ass thing where you have to log in to download, although you can find it on like Scribd and stuff. And then like if you want the official version, if you remember, I don't completely understand it. I think it's kind of silly. I think if you have a spec, just publish the spec. But this isn't about them. This is about this I2C, I3C switch. So just going to move along, you can get the full specification from the MIPI website. They also have a great fact. And this is basically, you know, comparing contrast. So in the middle, I squared C, and you see there's SDA and SCL, but then there's like interrupt pins. On the right, there is SPI and, you know, they share clock data and data out, but then the chip select lines are separate. And also there's interrupt pins. And then the left, amazing, I3C. No, I, you know, no chip select lines and no interrupt lines. Why? I will talk about that in a moment. So here's the, like, the first I3C spec that was published. And some of the things that they're going for. So some of the things that are interesting, I mean, there's a lot, there's like, first off, it's back compatible with I squared C, which I think is really cool. There's standard data rates and high data rates. You can, you can basically get to SPI type speeds, you know, 12.5 megabits per second, megahertz clock rate. There is, again, you know, backwards compatibility. There's hot join capability. There's in band interrupt capabilities. There's low power and, you know, basically getting rid of like the passive pull up capabilities. Trying to standardize on the command codes. And there's like some more advanced stuff like the Q support, which I'll be honest, I didn't quite read into that. There's also CRC that you can do. But basically, you can put, you know, you use I squared C with I squared C and I3C devices. And then you can like pop into I3C mode. By doing special addressing, you write to the address seven e to kind of tell I3C devices, hey, we're going to put into, we're going to put you into I3C mode. And then you can go into this high speed support. So as you can see, it's meant to be back compatible. Hey, you know that clock stretching is a total pain? Well, they took it out. You can no longer clock stretch an I3C. So that's the one thing that is not supported. And also pull up resistors are done differently. Instead of having these passive pull ups which draw current and slow down the bus because you have to charge the capacitance of the line and the gates. The SDA and SCL lines you can have, you know, they have these pull ups built in, but they switch into active push pull mode. And so that's how you can get those high speeds. Also, they didn't they no longer support 10 bit addresses because basically nothing ever supported the 10 bit addresses. I've never even seen it. And so they just, they just said, hey, nobody use this. So we're tossing out. But I really like that they got rid of clock stretching. But instead they added some things that will help with clock stretching. Oh, this is the address. You're wondering like how do you send I3C commands? They go to address OX7e because OX7e is not a valid. It's a reserved I2C address. In case you didn't know anything, I think above 7.8 is unavailable. Anything below 10 is unavailable. And then of course, zero zero is the all call. I do recommend in the text version of this, INMPI, I'm like, I'm going to link to a really good presentation from NXP about I3C, which goes into low level details of this. One of the things I forgot to, can you go back? Sorry to hear. I forgot there was one thing I wanted to mention. Because I had the detail in the text, but I couldn't find a good, I do have an image, but it's not described well. So you'll notice in the middle image, there's I squared C, and there's the SDA and SCL lines, and there's the interrupts. And then you'll see on the left, there is no interrupt. So when they got rid of clock stretching, right? Clock stretching is often used for you want to read data from a sensor. So you say I'm reading from this address, or you're writing like start a command, and then you want to know when it's time to read the data, because it has to do a humidity sensor check or, you know, take the fusion of some accelerometer data. Clock stretching is what a lot of sensors use to tell the controller, Hey, hold on, I'm going to get that data for you just like, give me, you know, a couple milliseconds to do so. But clock stretching just became a pain because, you know, not all hardware supports it and the timeouts variable and it can hang the bus at some devices don't like it. And so the right thing to do is to have an interrupt line. So you can write to the I squared C peripheral and say, look, I'm going to add you know, I'm asking you for humidity data. And then the interrupt pin toggles to tell you, Okay, it's time for you to pull to read that sensor data that way, you're not pulling constantly using up a lot of power and computation time because you have to be awake to constantly pull when it's ready. And that's because I squared C is, you know, controller run only only you can only only data can be requested by the controller. The peripherals can't push data back. It's not asynchronous like you are. But what's neat about I three C is they have this thing called Oh, this is the wrong, wrong side, but it still this is a good presentation. So they use in band signaling where this shows the high speed stuff where it goes from push pull into active push, sorry, open drain to push pull mode. And that's how you get into higher speeds. But the other thing you can do is in band signaling where the peripheral, sorry, the controller can release the bus and say, Hey, when the peripherals ready, it can signal on the bus that it's ready to be read and then you don't need those interrupt lines anymore. And I think that's quite interesting. Because one of the things that drives me a little nuts about I squared C is like, you've got this dream of only using two pins. But then before you know it, you need like two other pins just to manage interrupts and data ready and wakes and all that good stuff. Well, all that is going to be built into I three C. You're going to start seeing you know, I'm starting to see sensors with I three C, especially ST and NXP devices. I haven't yet seen any low cost mic controls with I three C, but I think you're going to see it soon. And of course, you could implement this in PIL. So if you're, you know, given that I three C is back in paddle with I two C, a chip like this switch, getting back to the INF PI, the P three s zero 200 is really nice because if you do use this switch in your design, it can run at the low frequencies 100 400 kilohertz of I squared C. And then when we all upgrade to I three C over the next decade or so, you know, you won't have to respect the design, it'll be ready to use I three C as your sensors, you know, like I've seen ST sensors, their magnetometer will, the old version is I two C and then the next version is I two C or I I three C. You'll be able to upgrade all your devices and you won't have to switch out the switch part. Because it'll all be ready for that high speed and these funky capabilities of I three C it's available on did you keep? Because that was your lesson. Now you know, because I was like, there's a switch, it's handy. But why do you want to switch? Now you know, there's like five thousand and stock ready for the future. Well, I got five of them. I mean, this just came into stock like yesterday. So I picked some up. Do you want to show anything on the overhead? No, there wasn't any videos. I will say the you know, the only thing is check out, you know, when I post the text, we post a text tomorrow the next day, check out the presentation and XP because it's very nice high level and trace level details between I two C and I three C and it'll be it'll be very helpful as you implement I three C so you know what are the constraints. All right. Good explanation, Lady. I know that's this week's I on MPI