 hello I even looked at my list and then oh the cat cam is blown out if you're just watching this take a look in the notes or in the description below there will be time codes to get you shifted in I'm a little behind so it'll be a little bit let's see if we can't pop if I can't pop the cat cam here no cats in the window it's quite bright and it's actually very cutely little taller yeah sorry I'll put a timecode in just a second here oh then what I won't do for you oh come on I have a clip that's holding the cat cam to the desk that I'll do sorry folks Moto Timo is asking what kind of cameras do you use 10 new this one of the cat licking her butt is just a C920 it's a 920 just a Logitech webcam and then this one is a Sony I can't remember it now ZV-1 is that what it is so here's the cat cam so cat cams not that great a quality it's just a webcam yep ZV-1 thank you mr. certainly audio is good it's a little weird in my headphones actually but I won't mess with it since it sounds good to you all yeah I was running a little late I've been debugging stuff so I'll let me dump a timecode in for David so it's just a couple seconds off okay before we get started I'll just take a say hi to everybody so hello Braden hello Mark hello Hugo hi unexpected maker hi Jim hi Johnny hi Hugo Johnny asks so when are we moving away from this totally uninteresting 2040 chip it doesn't even have Wi-Fi true hi true and hi Bruce hi Johnny again and Gareth soon hopefully like once we can get everything settled out the overhead is a hover cam ultra 8 and I do have it set up today because I have some stuff to show my desk is really dirty so hopefully that's okay hi Herbert hi David if you can in in case I had another David Bruce says yeah I don't really plan on getting back to the s2 myself anytime super soon I really want to do the BLE workflow stuff which will benefit the longer-term ESP work but for now that's not my plan oh you know let me make sure that whoo I was like really trying to get things sorted out earlier so I I'm like haven't gone through my email I was just like heads down on stuff so let me pause these playbacks that are going yeah like I have both restream and YouTube open and it's just like I don't need don't need to watch myself hi Dave Bruce says I send super thanks to Dan or in whoever else seemed to fix the Wi-Fi I squared C issue yeah I think that's that's that's Dan I know I know a couple other folks looked at it Lucien and Jeff also looked at it probably more people that I forget Gareth says I've been thinking about the BLE workflow feature I'm convinced it's really important yeah Daniel says UPS just delivered a black box with a flower on the outside excited to pull out the feather RP 2040 great you can help me test the stuff that I've been fixing today hello Muhammad okay I didn't say hi to the folks in the discord chat either so let me just do that if you want to join the discord and you haven't yet you can go to the URL adafru.it slash discord so here we've got Gary Z mr. certainly Papa Romeo Mike Hugo Jim Gary Z Bruce S motor Teemo David G Paul SK Hugo mr. certainly Jose David loose there in Telemann Hams labs Big Bob DCD thank you again as always Hams I've just got a new office here deliver but I need to wait to put it together until the end of this oh the tinkerer says there's a cat I approve of the cat she heard you she decided to jump down as a result but today's cleaner day so I doubt she wants to get out of here okay let's see housekeeping I've procrastinated long enough Kaba Kanye says almost never made it to this Sun is out in Seattle I'm in Seattle too and the Sun is out it's nice and bright here slinky Tango says my cats are watching today that's awesome all the more cats watching the better okay so let's do housekeeping hello everyone my name is Scott I work on circuit Python for Adafruit I forgot had to remember circuit Python is a beginner friendly version of Python designed for microcontrollers which are these little tiny computers and they're really inexpensive as well let me just product showcase mode and this is a cutie pie this is just a samd21 cutie pie but the relatively large black chip there is a computer all of itself so that's what a microcontroller is Adafruit is an open source hardware and software company based out of New York City I work remotely for them though so I'm based in Seattle and that's why I announced things in Pacific time because that's my time zone speaking of which I forgot to put this in the notes although David already beat me to it is the US is changing daylight savings this weekend so next week if you're outside the US next week will be at a different time for you so just be aware of that and I think next week's Friday I think next week's Friday let me just double check on my calendar here yes it's gonna I'm gonna I might have to like get out of here a little early because spook has a vet appointment afterwards but yeah next week will be on Friday I talked about Adafruit I tell oh if you want to support me and support Adafruit you can go to Adafruit.com and purchase harder from them there's lots of interesting stuff you want to come up then decided to get some lap time deep times happen every week normally Fridays at 2 p.m. Pacific but occasionally shifted to Thursday at 2 p.m. a couple weeks from now it will be gonna go skiing on or Friday again so I will let you know but next week is on Friday typically go for two hours or more and questions are welcome so if folks have questions now not doing that let me know heads up that spook the other cat there's two cats in here one is on my lap that's Vin and the other one is spook he does he is epileptic so occasionally he has seizures so if I'm like on the stream but not talking and like not paying attention that's why I'm just making sure he's okay he's been doing really well so I don't expect it to happen okay let's do some more hellos yeah it's nice maybe you should change the cleaner day for the cats I don't think so I mean like this is a day that Vin is on that stream because she usually I usually kick her out exactly that's what you guys getting at too yeah next week we'll end a little early probably go a little bit later today yeah it's just nice it's super nice out yeah the cleaners do everything but this room this room I gotta clean it myself okay more hellos from YouTube is Sun in Seattle even possible yes the tank the tinkerer it is but we just don't tell people so they don't move here it does rain often but we do have really nice stretches of weather like we're in the middle of right now hi hi botics hello Charles hi Jim Andrew Reed from Cornwall thanks for staying up and watching and hello Dave Odessa the the clocks go forward there on the March of 28th so there will be a two-week I think we're the 14th so I think it'll be a two-week gap okay so what do we want to talk about I hadn't even oh here's a question so if you have questions let put them in the chats I'm trying to watch them all Sarah see them on twitch asks how do you keep the cats away from the workstation and hot irons so the the soldering station I have is set up in the laundry room which is like a room next to me and they don't just I do have stuff out and they do get up there occasionally but generally they don't generally they follow people around I was doing some soldering earlier this week and reminds me that's what I should start with and oh yeah I'll show that I was like where'd it go so I do I do have to kind of keep them away from that but the soldering iron is not hot that all the often because I don't do a whole lot of soldering I mostly do software loose there and tell them on says that's exactly right it's a secret that Seattle has with good weather is gorgeous don't tell anyone Hamzeb says we got a new tagline here Buffalo that says keep Buffalo secret oh okay we have a couple questions which is great hi tinker from Georgia your dad's watching too that's awesome seriously it says it's an honest problem over here our cat Frito gets over everything yes they do they do get over everything that's why I always have whenever I show PCBs and stuff I have to apologize for the cat hair okay more questions so from Muhammad Hussein says I have a question how far is circuit pythons and momentation of async Rennes IO scheduler micro async IO so that we do have async and await keywords enabled in circuit Python that's thank you to warrior wire within the community and they created a scheduler called TASCO which is what I would recommend looking at I've not actually used it so I can't tell you like exactly where it is with everything but it is enabled so so you know this is something we talked about before where 80 fruit folks may not work on something but like we're happy to incorporate contributions from the community as well right the goal of the project is to be larger than 80 fruit and have a lot of folks all working on it like doing the things that they're interested in like most open-source projects so yeah how far is it it works and the end of the one of the things we did do as we did the PR for async and await was just to make sure that like all the objects that used from the Python side looked like they were normal CPython objects so it's very both bare bones but yeah it's a start it's just not something that we've like poured a lot of hours into Kieran Clark says we don't do daylight savings as the extra hour of sun fades the curtains yeah there's a lot of discussion here in the US not doing that Lancer Tronic says is there a time you'd pick the STM32 F405 feather over the same day 51 feather they seem similarly capable but it seems all in on the same day 51 I've done a ton of work with the same day 51 so I wouldn't I probably wouldn't do that either and I haven't looked at the STM32 F405 to know a whole lot about it I think one thing that's kind of interesting is that for the F405 does has core coupled memory which could make it a bit speedier but generally generally I just I I worked I did a lot of the implementation on the same day 51 so that's just what I'm more comfortable with yeah I think like Mark says STM32 is amazing like that's kind of why we did it the feather I think was to like dip our toes into the STM waters okay big Bob has a question it says my feather RP 2040 are to be delivered today ordered on Monday there was no feather airlift so I ordered one on digikey which is not yet even shipped I'm surprised by that digikey usually ships basically same day for me ordered another airlift yesterday from Adafruit when it came back at stock so which one will show up first I think that depends a bit on where you are in the world as well but I've I generally have really good good luck with digikey from Minnesota to here in Seattle it's usually pretty good USPS though let me tell you I've had I had a lot of trouble with USPS from Osh Park in particular and from digikey as well big Bob says well either of the two feather matrix wings work on the RP 2040 I think so but I can't remember which one I know the person to ask would be Jeff Epler who's tested it so just on your discord just ping at at Jeff Epler and ask which which of the two it is it might be a third one to it there's a weird pinout constraints with the matrix stuff well the two says in the US we need federal change to allow us to ditch daylight savings time even though the entire West Coast is colluding to drop it yep yeah I had a yeah USPS yeah I started doing FedEx Osh Park has really pretty cheap FedEx stuff right now FedEx shipping hi MD roberts yeah I had so I live in Seattle and Osh Park's in Oregon and I had some I had an order from Osh Park like get lost and it like was gone for like two weeks and then it showed up in Tennessee and then made it pretty quickly back as well Mike Mockup says surprisingly few felines in this cat video sorry about that there's one over there and there's one here they're just not she moved she doesn't like when I talk so she gets all upset interesting interesting that the shipping has been slow from Digi maybe they're switching warehouse to the new warehouse Todd but says hey tenu thanks for the feather RP 2040 flash speedfix I think I might have made it too slow and we'll get into that in a bit okay so let's let's show some stuff off MD Robert says got my RP 24 days today by USPS only three days to Canada good okay let's go the overhead so the thing that I was waiting for from Osh Park is you can see my my Osh Park mask thing I think I showed this off last week but this is my USB micro mod design that I did and let me I'll set it down and I'll zoom the camera in so what it was what this design is going for is that I found these USB cases on Digi key from Hammond and you can see that they have like this notch they have a notch here where the USB a connector is supposed to come out now unfortunately I put the USB connector on the wrong side so it doesn't actually like I I I fit checked everything before I soldered the USB down so I know that like my V2 fit will fit correctly but I can't actually fit this fully populated version in the same thing oh and Mark asked are you using debugging debug edge in anything and know anyone and know anyone else who is using it yeah look I actually so debug edge is an open standard that a few of us created for access to SWD connections and Mark did some of the some of the design on it which is awesome so I actually just used it on this board so that I can get access to the SWD lines of of the micromod so what this is is it's a it's a micromod on one side which allows you to change kind of the brains of it it's from spark fun so it's it's kind of a standard pinout now this one is the ARP and not the RP 2040 the NRF 52 840 which my goal is to the reason I picked this is because I want to use the broadcast net stuff I did so beally advertisements to transmit sensor data back so I got that the ticker says my dad says that when our RP 2040 feathers come in I can try circuit Python perfect it's a really good really good board to try with circuit Python and then what I have here is I I actually am using these 10 pin flat flex connectors and I showed this a few weeks ago but I got a different some different versions of it so what you can do is they're quite tiny but you can there's a little flap on most of these so this is a flap this one under here is a flap and this is a flap and I can open it so the idea is to make sensor boards that are very low profile but are still solder free and low and easy to put on so here you can see that I have like five neopixel board this is done on Oshparks flak flex PCB stuff so I have that one and then this one's an SHTC 3 which is a temperature and humidity sensor and they're really small but you can see I actually use different versions of the these things I wanted to kind of like compare how well they worked and how easy they were to hand solder so this is the Herosi one this is the Molochs one this is a TE connectivity one the Herosi is the cheapest and then this one is an amphomall but it's a slider and I hate these ones I'm sure it's like I'm sure it's like much more like solid a much better mechanical fit but I just I can't stand working with them so that what this is this this sensor is a it's a ambient light sensor it's that the Vemmel 7700 and I put two footprints on it so that I can you can orient it different ways now that I think about it yeah you can orient it like right angle all in the same one because of the way it's the way it's done so I'm gonna put these back before I forget where they were I do have code on here and it does work which is great so I ordered a V2 that I just this one that slides it's just a huge pain I I don't like it because like it it slides out unevenly really often and I cut my okay so that one's on there and this one is on the TE one so you lift a little flat and then you just kind of insert it and close the flat that has a like nice locking locking thing and then I'm gonna put it here in the Heros Neopixels here so the pinout is it it's a 10 pin pinout it only has ground and 3.3 volts so I'm running the Neopixels at 3.3 it has one analog pin that is unique to each section it has a one digital pin that's unique to each connector and then it has shared I squared C shared spy all in 10 pins so I think that's kind of the the thing okay nice mark got 250 PCBs today that have the debug edge when it's electronic says what's the best way to get word to the more that Scott deserves a raise for being so awesome I haven't I negotiate with them every year what I what my billing rate will be because I'm a contractor but they pay me really well if you follow my Twitter you probably saw what they pay me it's good to be open about how much people get paid let's see those Ospark do SMT assembly like JLC PCB does no they do not but they do work with Osh stencil to provide stencils let's see Luz asks how does Osh is flex PCB compared to the flex PCB on the Neopixel dot star strips that's a good question I thought about that I didn't grab one I don't think I have I don't have one on me here it feels kind of similar it the feel of it does very a little bit with like how much copper you have and what orientation it is but you can see it does flex a little bit out because I actually have a fourth connector here and then this one here is I put it too close to the hole so I shifted this one in a bit as well Johnny points out that you can support me on github if you if you like to I do have github sponsors open so if you want to do that but really like Adafruit treats me really really well I'm very lucky and my wife works at Google so like it's not a problem okay looks on Twitter they pay you only in cat toys oh well yeah so sorry I don't know a ton about the difference in the flex stuff okay since we have the overhead open let's show what I've been working on so I got two feathers I think I didn't see any other questions let's talk about what I've been been doing so here's one feather RP 2040 that I got and I did actually get these I showed these last week I got this goodie bag from the more that is a bunch of flash chips there are only two different flash chips in here but there's multiple and I also got some RP 2040 chip so I need to re-spin my game point card that's on my to-do list after I finish this drywall I got a finished drywall I made a deal with my partner Becca I really want a new soldering iron but it's kind of expensive so I've got my eye on like a JBC and we've been meaning to finish this drywall in here so the deal is that I can order the soldering iron after the drywalls done so I've got motivation to do it this weekend okay so yeah Gameboy Gameboy Gameboy will be interesting to you but so the reason that she sent me all that stuff is she tried to put the four megabyte on the flat on the feather and it didn't work and so what I've been doing is around the same time that I started doing it Jeff re-did some of the flash stuff and we started to get a lot of reports just in the last couple days of people having like weird reliability issues with the feather RP2040 so luckily what I decided to do was I actually decided to put together I'm just gonna move the camera here this feather so I got two feathers and I sacrificed one of them because Lady Aida had pointed out to me that Adafruit stocks these sockets which I did I talk about these sockets last week I'm not sure so these sockets are pretty neat what you can do is let me make sure that let me unplug it I'll show you so since we're diving deep so I'll unplug it and what you can do there's a little captain tape tab and you can just pull it up and unhook it and then the the two wires go away and you can pull the flash chip out so what it does is it's allowing me to test the RP2040 with a variety of flash chips without having to solder different ones on and off the board so so this is a four and this is an eight so I'll just pop this in and I think the orientation is right the pin one is up here and what you do is you then you just take this thing is to keep it down and it snaps on and now it's connected which is super neat so that's really neat what I did it took me a while I'm not like I've getting better and better at soldering and there's definitely cat hair on here too but not only did I put the socket down that I got a cat hair I got a cat hair stuck in the socket okay got it so what I also did is I because I like to watch over the salier all of the the flash transactions that's a really good way to debug it and we talked about this last week I think Alvaro was like oh you're debugging by observation so I was doing that last week using I think this is what I was doing last week is these clips are awesome so if you ever do spy flash stuff these clips are epic because you can just clip them down right onto the flash can't do that with this socket though because it the flash is in the socket so what I did when I was doing all the soldering is the socket goes on the footprint of the flash and it I had to cheat it a little bit because there's resistors right next to it but then I use wire wrap wire that's like this 30 gauge super tiny wire wrap wire to go from each pin almost all the pins I ignore the power pin but I had these tiny little wires and they run just out to these out to the regular holes and I just I can't do anything else with this feather because well at least these holes of the feather because they're connected to the flash but that's a really good technique if you ever do want to break a signal out is and you're using these tiny wires is like don't break from these tiny wires straight to the thing you're going to read the signal with if you have an intermediary here it makes it a lot more reliable so the tiny wire goes from here like the pin the pin leg to the hole and then the holes I put we we have these awesome I've talked about these on the on the on the deep dive before these silicone wires and they're they're pre-crit they have ends on them but I what I do is I love the silicone so much the silicone wires that I just cut them in half and strip the end and then soldered them down so they are going into the salier and I was trying to keep it short because the longer the wire is the slower you have to clock the flash because you have like more wire to deal with yeah so I got that set up and I was having some reliability issues and there's a couple things I should follow up on last week we left off where I was like not seeing a clock signal and I was really confused it turned out this is so silly on this harness let me switch to not the desktop on this harness here there's two different ends and I had swapped the two ends so that they were in the wrong spot so I was like yellow to yellow and blah blah blah but it was plugged into the wrong thing that wasn't yellow so that was one of the things I found and then the other thing I found was we were working on converting from assembly to see and the other thing I found is that I was doing one control zero register but there's actually two so I got the basic version working with C so that's exciting what I was working on after doing all the soldering was trying to get the more advanced initialization working from C as well and I also I just chatted with Luke a bit as well and it was like I'm converting it see because I don't it doesn't make sense to me why you do it in assembly and he pointed out that like with the C SDK for the Pico they want to support a lot more compilers and compilers are going to vary and how they compile that see down and when you're trying to do it in 252 bytes you really have to look at it and like when we saw last week that like I was I was very much like take my C compile it look at what the assembly is to make sure that I wasn't being like it wasn't being very excessive about it so we were having these reliability issues with the feather and the reason that the more had sent this stuff to me was that she had been unable to get the four megabyte version Mohammed says how big a flash chip can we use with the metro feather M4 express I tried mounting 64 megabit but circuit by that didn't support it so for the M4s for the same D51s you'll have to look and make sure that you change the flash if you're changing your flash you have to rebuild circuit Python because circuit Python will circuit Python does initialization and that's something I want to do when as I'm redoing this is I really would like to move to a model where we don't we don't hard code the size we read the size from the flash chip that will give us a little more wiggle room to like have some interchangeability on flash chips now there's a lot of settings and that reminds me one thing I did do is I also did some improvements to cascade Toml so I have this like nvm Toml I need to push these I haven't actually pushed these let's go to the desktop so here I am in nvm Toml and I need to source my development version of cascade Toml but then what I did is I now have tabulate command which allows me to output all of the settings for all of the chips so I loaded that into Google Docs the CSV version and now what I can do is I can look and see like okay for like for all of the giga device flash chips here's the different sizes here's the capacity values as read out from the flash chip and then so this kind of shows the cascading so like these this row is all the settings that are the same amongst all the giga devices and then you can see that there's differences here based on like size like even though they're the same series the different sizes generally are released at different times which means they might actually have different functionality which is kind of a pain so I've been staring at this a lot and trying to figure out like as we look at like lady it is looking at like what chips to put on the cutie pie and the itsy-bitsy trying to figure out which ones work and like what the optimal size is as well so I was using these to try to figure out like what our ideal targets are so like these windbound chips are gonna be pretty popular that's what's on the pico that's all it's on the pimeroni stuff so like those are probably gonna be closer to what we want anyway so I did that and I need to push it I haven't actually pushed the code if you don't want CSV and you just omit it it uses this library called tabulate which it doesn't really show very well here because it's wrapping for how wide it is but it actually does like a terminal sort of format for the the tables as well so that's I wanted to do that just to get like a be able to like zoom out and see the whole picture of how all the settings relate to another so I did that and then I've been doing a lot of salier stuff so let's salier stuff trying to figure out reliability issues so let me I wonder if I can reproduce should I reproduce it I'll just show it so let me pull up logic hopefully my computer will be okay with all the different things so I think I could do desktop with overhead if it's still alive which it is so what I'm gonna do in the CVA is I already have it set up correctly this time for capturing the the spy flash so you can see here I've got six channels that I'm capturing at 500 mega samples per second and I have a trigger on the yellow channel channel 12 which is the chips lock line so what I'm gonna do is I'm gonna start it and then I'm gonna plug it in and we'll take a look at what it's doing so I'm just gonna plug it in and the light slash like circuit python so circuit python did start up which is good news so let's take a look at what we captured I'm gonna zoom out and there's some interesting stuff here so it starts the capture at the first the first enable and that's interesting that there's this like sporadic enable start so the way that the did we talk about this I think we talked about this last week but it's good to reiterate so the way that the RP 2040 works is these are some spurious clocks which can be done to just like get the flash logic going it's more clocks more clocks here but then there's a read so 0 3 is the most basic read of a flash chip love the factory says is there a good small library for ingesting you art stuff and parsing into variables and circuit python not that I know of pythons usually pretty good for parsing from strings to objects though okay so what happens that the first is that there's this blank so it's a read and then it's three bytes of address 0 0 0 so at the start of flash and then what you get back is the contents of that and it's a 256 byte read and I just zoom out a bit we'll see kind of like how much we're using like consider this the progress bar for how much we've we've taken up so starting here and then at the end here the last four bytes are a checksum and what this does is it makes sure that it allows the bootloader to verify that it loaded the initialization code correctly and then the other thing I want to look at is the clock rate here so in the top right you'll see that it's a duty cycle of forty nine point nine one this is just for an individual one that I've a cycle that I've highlighted and you can see the frequency here is 938 kilohertz so what we're doing is we're actually like it's being very conservative at the start to load that first 256 bytes but what's gonna happen is that as we start up we're gonna see that clock speed accelerate so if we just look here so there's a big gap and this gap is when it's running this first chunk of code and then once it's reinitialized the flash what it's doing is it's jumping into circuit python so what these bursts here are is it's a read three bytes address and then four bytes of data back so you'll see that there's a bunch of different reads and this is the way that the SSI works on the RP 2040 is that for every four for every word every four bytes it has to send the address again and in this configuration it also has to send the command and it's all kind of typical spy process where there's one line sending stuff out and one line sending it stuff in and you can see that channels 11 and 14 are unused so what I'm gonna look for here is so this is all this traffic here is loading the code to initialize the RP 2040 and then circuit python and if we zoom out let's see if we can find so the clock right here we're still under a megahertz so let's keep going so one of the first things that happens as code runs is that clocks get changed and they get initialized so what I'm looking for here is actually the point that clocks get sped up and this point is actually really really interesting because on the feather RP 2040 case this is where crashes were happening so what I was doing is I was using I also have the SWD connector on here and I had my J-Link connected and I'd find that I would enter a hard fault but it the hard fault wasn't exactly in the same spot it was in a variety of spots all around clock initialization and for anyone who's ever brought up a chip and I brought up a number of them now with circuit python it's always the clocks like whenever you're just getting things going is getting the clocks configured correctly so what we're gonna see here is let's take a look at this gap now we can see that like our our enable line here actually speeds up it's kind of hard to see on the video maybe but you can see it's kind of like a solid block here and then not left wise so let's let's dive into this a little bit more so here we can see if we look here we're still under a megahertz but now we can see that this gap is getting shorter so now it's at two megahertz so something some clock change from here to here and then if we go further right we can see that oh now it's getting way fast and so we zoom in and we mouse over here we'll see that we're actually at 21 megahertz or so just on that one and let's actually there's a measurement thing so let's actually use that so add measurement there we go so if I drag from there to there what that's gonna do is it's gonna give me an average so right now it's running at an average of 20.833 megahertz so I think it's configured to be 20 megahertz but especially early on and this is as we plugged in the all of the clocks have to kind of stabilize as things start up and so there's some variation and that variation is gonna be especially great right at the start so what what what I was finding with the reliability stuff for the Feather RP 2040 is that it would get maybe eight eight entries into this kind of fast thing and then it would just stop and the reason was that we were basically running too fast we weren't able to load the correct data from the flash which means we were getting incorrect instructions into the CPU and when the CPU got bad instructions it hard faults and just stops and so you don't see anything else afterwards when that happens but so now we're running it slower and I actually do want to run it at so so there's a divisor in the Luke points out that 20.833 is exactly 125 divided by 6 so I'm I'm right the clocks take time to warm up but at this point they already have warmed up so that is actually exactly the number that we want so what Luke is getting at is that there's a there's a divider that slows that produces the clock signal for the for the spy flash chip based on the course kind of the core speed so the core speed is 125 megahertz and right now in the settings whatever I just loaded it's dividing it by six and the reason that it wasn't working or was like half working for some folks is that it was running at it was running at divided by two so it was running at 62 and a half megahertz and the flash chips that we used it's weird because the flash chip that we used is the 8 mega byte giga device one GCM hello arrived late have been enjoying this RP 2040 series while we're in it again today which is good let me find okay here so I have a ton of tabs open all four different flash chips and in fact I have more flash chip tabs in this other window off screen let me grab this giga device one so this is this is the flash chip that's on the RP 2040 feather when you buy it mine I think I just put it back in as well so mine has it as well and at the bottom of a flash data sheet there is an interesting section that tells you how fast it can go and it can go different speeds at different for different instructions so if we look at here there's zero clock frequency for dual IO quad IO and quad output at 3.0 volts which is what we're at without high performance is 104 megahertz but right now we're doing a read 0 3 which puts us down here and it means it's 80 megahertz which actually should be fine for the feather RP 2040 because we're we should be doing 62 and a half but I think what what's happening is that I suspect that the clocks weren't getting started but maybe I haven't actually been able to prove that but it is possible the other thing to consider is that like I was gonna say I don't know I don't actually know why the feather RP 2040 would not work for the 8 megabyte case because of this number it's also possible this number is a lie that's the other thing to consider so if you look at the 4 megabyte version so I just dragged up the 4 megabyte version here and we go to the same section what it's 80 as well I could have sworn it was 60 we have Luke's attention we'll ask Luke about this Luke says you might need to use RX delay to delay the sampling when running your max flash frequency I think we are but I can't remember because I've been doing a lot of different stuff yeah I so I think RX delay we're not using on the generic 3-verdon so we could try that the problem is that because this has a bunch of wires off it it's actually like not great to test like absolutely top frequency what you can do because you have longer wires than you would on a normal PCB so let's we can play around with this but what I found on the 2 is that the max clock frequency right the max clock frequency for read 0 3 is 60 is that that's what no it's 80 for the for the 4 megabyte 2 I was thinking it was 60 we can play around with that actually we can see if we can't crank it up so let's see where I'm at on Dexter says wires thems and ten is true let's pull up and I don't actually know what version I just loaded so let's take a look so right now we're not using my C version these are just using the assembly versions and in make file we have where did it go I yeah so there's this flash spy clock divider so I set it to four let's set it to let's just see if we can't get to going let me try I was able to reproduce it so I'm gonna make clean I have the window open so it might be sneezes from from pollen all right cleaned let's build everything is out of focus make sure that your your YouTube stream is on the highest setting it looks like it looks okay from here okay we built and I do have it on a cable with a charge and data my and so if it doesn't work remind me to do that let's just try it real fast so this other circuit pie here is the the time-stamp one yeah RX delay but you can't our RX delay doesn't work if you do divided by 2 right because there's no extra clock cycles in between hi fatty to okay so here here look what happened we copied it over but circuit Python didn't come up again so let's logic it and see what happens so this is with the minus 2 so I'm gonna just hit actually I'm gonna flip data off because I don't want USB to really be upset so I'm gonna hold the reset line down I'm gonna hit start on salie and then lift it and we'll get to capture now the LEDs not doing anything which means things stopped okay Luke says it delays your sampling point to the to the point in time where you launch the next clock transition should give you plenty of time hold on okay let's try that so here's what we have so far this is using the generic assembly from the Pico SDK so here's here's what I was talking about right so here's the 256 load here's all of the initialization code and then just everything stops and if we look and look and look and look we can see that we only made it to two cycles in at this frequency let's add a measurement and double check our speeds so we can see here our average is 62 and a half megahertz now I am doing it with the wires right so like it's possible if I load this onto my other feather which I could actually do it might work but as Luke's talking about we can also set our example delay one and that would cause it to wait longer to to read it I think so that that might fix this issue as well because it should be able to like the data sheet says it should be able to go to 80 megahertz of course that does rely on the the PCB layout a bit as well so let's just try on this other feather I have Luke says I bet the second read is the hard fault vector fetch yeah that sounds sounds about right so here I have kind of like this is why if you're ever doing debugging having multiple is great so I'm just holding boot select as I plug it in and I'm just gonna copy the same binary over and oh I have my data switch flipped why isn't it there that shows up copy it over so let's just see if it works but Luke saying we should be able to set the sample delay so we'll see if that fixes it for us so we restarted and look it came up this is funny though because Todd who's in the chat was one of the folks who reported this problem is that it's working fine right now right but that it went from straight from the bootloader to the code and it must have run the stage 2 but I'm not 100% sure that it did but if I unplug it now let's unplug plug it back in and see if it works it didn't right so it's on power up that it didn't work and this is why I was thinking like and we can if I hit reset let's see if it works still didn't work so it's very weird this is why I suspected the thing of like on power up something happens that the clock like just doesn't initialize correctly so now if I if I power cycle it it just doesn't work at all so one thing I was delay I was dividing it down to make it slower to make it work but I'm actually curious now if we can't actually add the sample delay so I'm gonna put this back into let's pull up the assembly and we can steal the sample delay from the other the other one somebody was like I love that you do assembly on the stream let's do single column view and then so here's the fancy one and there's delay here's the baud rate delay offset this is funny there's two different types of stores so move is like moving this value into a register and then stores read the register back out and if the offset's low enough you can do it in one line but if it's not you have to do it in two lines like this so we're gonna want that we might need to modify it and then we'll do it in the generic one so here's the generic one and it defaults to four this is what I was confused by hex phone says is there a good source to understand how PIO was implemented it's not part of the M0 platform right so I'm assuming it's something uniquely developed for the RP2040 correct yeah it is uniquely they like the Raspberry Pi folks designed it it's important to think of like like microcontrollers are really what's called a system on a chip so there's a CPU and then there's all these peripherals around it and those peripherals might be from a lot of different people and I like to think of it in the same way as like if you have like a microcontroller and a bunch of I squared C sensors like it's the same idea except it's all of those things on a chip that are connected via like a memory bus instead of I squared C okay so this is what we're doing here so there's no delay that's being set so let's just do that in here so it looks like our one should be fine to use our three is still the offset so that should just be fine so we're gonna save that and see if that helps us and I should be okay to just do that okay so we have a new version I think it's already in bootloader mode let me copy it over and see if it starts up yeah the data sheets good there's a good I just watch a video on PIO from stack smashing hey look it came up although that was from the bootloader right that it works that way last time let me show it so we did get it so I'm gonna unplug it and in fact I'm gonna switch data lines off and it still works look at that so it looks like we should be able to run at let's try a couple more times yeah that one worked neat very neat so we should be able to run it faster oh that time it didn't work so I think like I think still slowing it down as the safe bet that's the thing right like if it doesn't work and you crash you're done so like it something like this where it works most of the time is just not good enough it's got to work all the time and yeah it'll start up slower but like for speed on a chip like any chip where you're storing your code off the flash you're really relying on caching to to be performant so let's just see if I can do it again like it's pretty reliable but I did get it once right and like that's enough for me to not want to do it does reset button get different behavior I think I don't trust it honestly because like as you plug and unplug you're actually like like you have timing of like how power goes around and how compact like debug capacitors I can try ah there was one so the LEDs no longer ramping and that was just a reset so it's just it's got to be reliable so that delay should be fine we could leave that although that's in the SDK so it'll be removed I'm not going to change the SDK but it's good to know but that's this clock divider I just it's got to be two or it's got to be four it's it needs to be reliable I need some some kind of hardware test bench yeah I mean I'm a software person I definitely like bridge that gap but like that's something the Raspberry Pi folks I'm sure have is ways of checking all this stuff okay so I just built a new version and I'm gonna so this disappeared because I cleaned it so I just got to back out hello I mean I I don't think I normally appear to you on discord right well yeah I see like it's a thingy a thinger oh like my icon or something yeah it's a it's a technical term yeah you're up here folks can see and hear you I think people can confirm they can hear you but they should be able to all right well I thought I just I stopped by I know you're doing more flash I know I said I know flash Luke Luke was in the chat for a bit at least and no one's helping out that's great that's cool yeah I got some prototypes so I can I can just quickly show those off I mean like they're not but I literally just got them this morning yeah so I can just show those off and then maybe my desk lady I'll have one or two assembled cool so I got things comes in this plastic wrap I get my prototypes from Gold Phoenix sometimes because they will do weird routed PCBs which I kind of like so this is the itsy-bitsy let's see if I can get that to focus in on I cannot do it you need you need one of these Sony's I know well they're great I could get the oh yeah I mean it's up the overhead well yeah it's funny it always like works when I don't expect it right well but anyways you can kind of see how big it is so it's there you go there you go so it's the itsy-bitsy RP 2040 so you can see I've got the big flash chip yep on the right right the 4x4 I made room for that yeah that's a 4x4 W son and then I've got a lot of a 402 resistors and capacitors so all that all the non large caps so like the point one microfarad and the you know 10k resistors and the 22 picofarad those are all 0402s so I could keep the 10 microfarads 0805s and then the one microfarads are 0603s and that's because capacitance is affected by the size of the there's a de-weighting that occurs and so you you do want to literally have the physical like physically the largest size you can get the capacitor you'll get better DC capacitance because it otherwise the de-weighting 10 microfarad turns into a 1 or even less like you do it quite a bit huh and then on the back we've got some nice silkscreen which you know maybe it'll show up maybe not but we got this so cursed we got this nice circle and then on the bottom you got the RP 2040 logo it does show you can see that the pie and then on the bottom we have the GPIO pins labeled so on the top we have like the standard itsy bitsy pin so that like all our itsy wings and stuff will fit and also people can like plug-and-play but then on the the bottom you get the GPIO pins and so it's like it's just a ton of pins like you just get a lot and the SWD pins broken out to header so if you want to solder headers on but it's just very very small and very cute and we were chatting earlier today I actually can't find 8 megabyte 4x4 W son chips like there are none I got like the last 40 some arrow so you know until I get more I think I'm probably gonna launch this board with 4 megabyte and then I can know we I said is that okay we can upgrade to 8 and he said yeah you know we can do that so then you have you have a project to do which is you know how do you support two different chip families because it'll probably be good advice for megabytes to start and then it will be a megabyte wind bond later right now I got I'll have to consult my table my table of all the flash chip info I did talk to Luke briefly about the SFDP stuff and he said that he actually like bought 10 random chips off of digikey and like had varied success with how well they were implemented so I think I think yeah it is and yeah we he there's like a sample delay that you can do with it as well and he recommended doing that that's what we were just doing and like most of the time at 62 and a half megahertz it works but like occasionally I could get it where it didn't so I think we're still gonna have to run it like 30 I think it's 30 for for generico 3 or for generico 3 but we'll have to see for quads still I think generico 3 look it's generico 3 is generic it's SPI it's low whatever and then if you know I you know I'll stare they they're chatting about it you know how do you support boards because there's not a lot of people making boards right now because you can't get chips but that's gonna change right and they're going to have to come up with with it with a story how are they going to make development easy for people so I think having custody you know having having it if you look if you come up with something that can support like two or three different families they will probably use it you know the more you know it doesn't matter as long as they get activated in QSPI mode so right and I think hanging on your you I'm definitely looking at it I glance it like just buying a bunch of chips off Dizzy key as well but I don't think I want to go that far yeah yeah it's tricky like you know also there's max megahertz that you can run it and it depends on the routing as well some I'll say I don't think the routing I know that you know I shouldn't say this but the routing doesn't matter as much as you think I think that the the the variation you're seeing on some chips it's really just that edge edge manufacturing of the chip itself mm-hmm because the pin that wires are so short that yes 60 megahertz is fast you know like I have you know the the pi tft right which is showing it connected to the raspberry pi 400 like this you know okay so this is like a nightmare they're routed through here right and then they're routed through here and they're not there's a differential pair there's SPR just routed and then we run the display 80 megahertz and it works so like if you're not on a subtle breadboard I mean like yeah you're supposed to like do the right things I don't think it's the I don't think it's the wires people are always very like neurotic about it and there are some situations where I'm like the routing really does matter yeah don't I don't actually think that's it I think we just really are just running the chip over a past it's clock rate and it actually really does that that limit isn't like a soft limit it's a hard limit they really mean it like really doesn't work right but I was looking at I was looking at the well whether the datasheets a lie or not is a separate question but like yeah I went back and looked at both the four and the eight giga devices and they say they could do oh three at 80 megahertz tops and I'm only doing 62 and a half and I'm still seeing some reliability issues with it yeah I mean it could be the drive strength could be I mean it's tough because you know the moment you put your scope probe on it you're just adding you know pick you know peak of our capacity that's going to that's going to be affecting it right yeah it could be that you know resistance adding you know an inline resistor could help but it could be other things that could be the peripheral the peripheral has some you know minimum setup time for latching and that could be if there could be a couple things like it's not saying it's not the traces but I think that a lot of electrical engineers kind of like blame the traces first and it's it's it can be a lot of things yeah and we don't know what we don't know what the problem is yet right and you know what like I think my point as the software person in this equation was like if our software is designed well enough it doesn't matter right like that whenever you're getting your code from spy flash you really don't want to be getting it from spy flash like you want to rely on the cache you want to rely on the on the RAM and like to get it in there originally you have to worry about it but after that like after that it should be nice and quick yeah so I think that yeah I think we have to pick settings that are just reliable because that's what matters most and then what I haven't shown yet but if you look at the spy traces when circuit Python is running you can see little spikes where it's doing fetches and like we could get rid of those little spikes because we could just add more stuff into RAM which then right so like there's software solutions around like I want to be able to do this thing quickly if you want to if you want to do good software learn to make your own hardware right a hundred percent yeah wise man said I think I think that there yeah there's a lot to be said there I'll say another thing and you know it this is I'm making a lot of assumptions based off of the samd 21 and 51 but you know what's interesting about those chipsets is that the SPI peripheral really was limited like very very limited the max SPI rate on the samd series is 12 megahertz which is ridiculous right for something that's running at 120 and can easily overclock to 200 you were still limited right on the SPI at 12 megahertz and it really wasn't like it really could not clock it any faster we tried you know if you can clock the output in 24 but the input doesn't work at 24 right it's like it's not a tracing it's just setup time just it you the circuitry just couldn't get the data in time you know to get into the peripheral and but then you know if you switch over to QSPI mode right which you'd think like ooh like that must be much more limited or whatever it actually then you could blast it at 60 megahertz or even a hundred I think we did we double clocked it and it worked like you could you could really like not only QSPI four times faster but the peripheral itself yeah can can handle the data much much faster like there I'm not sure the the full details of it but I there's definitely something about like these chips and SPI mode and like our cortex chips like I know I'm like generalizing but the SPI mode really should be just to get it booted and then you immediately blast it into into QSPI mode as quickly as possible I think right you know we do that in circuit Python like we're so like you spy like a moment we can't do it we move we move immediately yeah and in fact I was showing that I did a salient trace earlier where I was like look here's where we're fetching from the flash at 2 megahertz here's where we're at 6 megahertz and now here's like it's it's funny because you know I've we've been talking about this stage 2 stuff but like the stage 2 stuff runs when all the clocks are actually still slow so it's like you get everything set up and then like as you start up and this is why like the 4 megabyte was crashing is that like as you start circuit Python it's in the STK code that's initializing the clocks and the moment that you do you switch to the like high speed CIS clock for your QSPI peripheral like you end up going really fast and if you can't like if you're if it's configured to be too fast you'll like randomly hard fault at that point yeah and I want to argue that I'm getting traces not traces the fact that the 8 megabyte worked fine and the 4 megabyte didn't even at the same clock rate show and they're both rated to run faster than 60 megahertz means it's not the traces most likely right you know I mean like if it really was I mean you have like wires hanging out into a socket right you I do you perform like open heart surgery on this thing too right but I do I do have an unmodified one as well that I'm that I'm comparing yeah I the data sheets line I don't know if they're lying but I think that there could be you know there's there's always like little weird exceptions another thing is you know I was saying about how like you can run these TFT screens that the ILI 9341 is technically specified at 12 megahertz but like we run at 80 megahertz it's like whoa like sure go ahead sometimes I can they can do it but it doesn't like the commands to be run at 8 megahertz like when you do the initialization it's not a delay thing right the commands we send it one megahertz we we I think even on the Raspberry Pi we we try to go down to one megahertz right to send those initialization just to get the gamma table and whatever but then once we put it into address mode like you basically you know set up the window address of the thing and then you just blast pixels right at 80 megahertz and that's fine but the initialization has to be slower even though you're like it doesn't make any sense it's the same peripheral it does matter right it's not a delay thing right we add more delays it doesn't make a difference it's yeah it's like the it's yeah it's like the control circuitry of the display just can't go that fast yeah it's very weird like it really doesn't logically make any sense so I'm not worried about I know you'll figure it out yeah well so Luke Luke did just give another tip because the RP 2040 has input Schmidt triggers for the inputs and on the so basically there's two versions of the flash setup code that we use right there's the W25 Q80 that does the like quad spy stuff and then there's this generic one and the generic one is what the Pico uses and why people haven't really seen issues and now we're starting to see them as we get new designs like we switched to the generic one because we didn't know what flash we were going to use and that's like work on any flash sort of setup but the other we didn't know what flash you're going to use and it didn't work and it didn't work with the W25 Q90 believe me I tried and it didn't work and that's why we switched but yeah right well but that was also quad enable right like we we came down to the quad enables different than that one so hold on the thing right like yeah I put the chip on and it worked and it didn't work for you but yeah so this oh because the quad enable was pre was pre-fixed and that was actually decision that's gone like you know we had this discussion this week for folks and did you tell people about the quad enable bit being non-volatile no go ahead and recap that conversation okay so okay so we're like may may the people who designed this like burn and hell because they made the quad enable bit non-volatile which means that if you successfully set the quad enable bit once you never have to set it again right which I understand but it's also I feel like there's no other status bits that are non-volatile that I know of I think that's the only one there's protection so well and that you can actually write and so you can go those should be non-volatile you can write in a volatile way if you want I think I think you can actually do a volatile right to some of them I don't know if that's something that all spy flashes allow but it would be possible to do that if you have a flash chip which you're like Scott you're like I'm going to just do I'll disorder this flash so I don't I don't have it I'll just auto awful type of a high portal he's like it works for me yeah and I'm taking a fresh chip off of real and I'm like well it's not working for me yeah and then I'm like freaking out like why isn't it working it's because the pipe you know we set the bit in a non-volatile way in circuit Python yep because why not right it doesn't matter to us but that means if you're recycling a chip it works because it has that bit already set whereas if you have a fresh chip it doesn't why would you do such a thing so we actually had the discussion of whether we should make their testers set the non-volatile quad-enable bit right you know I mean so it's like we set the bit and then we don't have to deal with this bullshit right we just we've already been done because we manufacture it right and actually said I don't want to do that and the reason I didn't want to do that is is a very you know in my opinion generous those people would not call me generous that's okay I think it's generous I didn't want people I didn't want people to DIY their own versions of our boards and then wonder why they don't work right like I didn't want people who are like oh I'm hacking my own boards or I'm like modifying and then they're getting a fresh flash chip and they're like I don't understand why the quad enable right it's like it's not like it works slowly it doesn't work at all like your yeah your board doesn't boot and it's really confusing yeah especially because it burns correctly like you have to does an error out right you have to like happy cuz it's not doing quads stuff it's not doing quad so it shows up under USB with the you have to bootloader you drag the file over and then you hit reboot and it's just like dead in the water yeah nothing yeah because it's like waiting holding on this thing so I was like you know I even that would make our manufacturing and coding life easier I just thought like you know the 10 people who are gonna bump into this just now it I'd rather do it and do it right because I feel like we would have to go back and do it so there's a design decision we made right like could we could we could do a shortcut and we decided not to do the shortcut this is why Scott is suffering with you today I don't mind it though it's it's okay I I think we're gonna be in a better place you know like one of the goals with all this work is well one like I'm on a detour right now just making it reliable right but yeah getting back to the like getting all the stage 2 stuff for circuit python setup is like if we can get to a world where we have a set of like six flash chips that we say any of these will work right and they're different sizes but they all like quad enable the same way basically is that like and they have the like megahertz limits and stuff but like if we could say like here's six different chips and you can pick which one you want like we started doing this like here's a spot first by flash on the QT PI for example right like I think that if we tell people look for circuit python I think in general I mean yes there's like a death's dough and there's like mechs tronics and their cypress but like really there's there's only a few flash chips that people in our community tend to use right and that's because they're the three volt safe ones and their low cost and there's like stocked by like digikey and other vendors and like I use giga device because windbond doesn't always in stock and giga device is like it's very affordable to be honest like that you can get giga device chips for under a buck so I think it's okay if we don't support all them but you know and I think if you can even wrap Scott through like all of our board definitions for other chips like you know samdy 51 base ones and you'll just see what chips they use yep and then it'll be like here's the top three you know families and and and that's that yeah I mean I wish I wish there was a universal way but I think I think that's kind of the best thing we can do and then you know hopefully if that the pico SDK I know it's it'll slow things down a lot to move back to generico three but I think that long term there's just gonna be it's it's such a confusion is the reason yeah I mean it's like it's like what it's like optimizing for power use right like don't think about power use until you can measure it and the same thing is true for like worrying about how fast your spy flashes like the default setting should be super reliable and just get you going regardless what chip you are like that's what o3 should do o3 should be slow and reliable and get you going and then once you care about performance now you can get a salier on it and you can take a look at what you're doing you can really yeah and you can do stuff like where I'm cashing like you mentioned like you can start config like there there's a lot of stuff like look even hitting Q spy is gonna be way way slower than hitting 100% yeah you're like going off desk like you're going to the woods so any anything that you want to do with optimizations I think yeah XIP has this issue I mean it's totally solvable yeah like this is the tough part right decisions have to be made about like what are what are the trade-offs you want to make for usability right and performance I get it because people like you have a trade-off of either people saying I put together this board and the default code that I compile on Pico SDK doesn't work right which is bad right and then you have the alternative which is people saying well I compiled this code and it ran but it's like it's so slow the chip sucks like you know you kind of have like jerks on either side yeah that's what code the conductor for jerks but like people having struggles right and they can get pretty snarky about it and you want to make sure they have a good experience how do you balance that mm-hmm you know yeah I think it's tough I think I think having the default be slow and reliable is the way to go like like and that's why I'm that's always been your thing that's your that's like your t-shirt is my t-shirt yeah yeah I mean that's yeah that's that's where I want to get circuit Python is like I should stop worrying about how fast I can get to Jericho three going and I should just like get it super solid I think I just committed it as as divided by six but I think we could do divided by four and still be super reliable so like wonderful beta five is has a 20% speed up I know right so I was actually looking at one thing that's really interesting to me as well as dual data rate because that means all your clocks are going you're getting twice the data for the same clock and the chip has support for that natively so yeah the RP 2040 chip does and some of the flash chips to look at it again yeah I mean like sure it's like why not you get twice I mean that you still if your peripheral can handle pushing the data there's no like that there's no reason why not I mean you still have to watch for your your setup data setup time but right now at worst you just run it a little bit slow you know I mean you have more flexibility in this in the clock divider because I know you're like there's no you can't like set the clock to 44 megahertz it's like 4060 80 right there's gonna be just some even divider so right you might have more flexibility if you do I don't know I think it is interesting you know just thinking about it I wonder if it's also like lifetime of SKUs right like people build a product with a flash and then they want that same flash for 10 years right oh yeah and so you get this like the 2 megabyte GD is like different status registers but the four megabytes different because they like have different generations you have all within the same family yeah I do dad I don't understand I really think that's a crime I understand the protection bits are gonna be different because maybe have more data you want to protect but like goodness why are you changing the status register like what what what benefit like why would you do that just because the flash is larger like really I don't know why they move to it but the wind bonds the wind bonds allow you to do both like either you can send like one status right and then give like two bytes for two set two bytes of status register yeah like the new ones you give it a different command then go straight to the second bite I did see that it's like 0x51 and then 0x55 and 0x15 like a little bit of a hack they kind of like well you know well the thing you're way into digging around the wind bond stuff the thing that blew my mind is they actually have two different versions of like the data sheets for the same exact skew they have the like DTR ones and then the non DTR ones which got me thinking about this like generational thing of like they have the previous version that didn't do all the fancy DTR but now they now all the chips do that but they're backwards compatible so like you have the old you have the old datasheet for the previous ones but all the new ones are new and like they just replace them and the only way to tell is to actually like read some register on the flash itself yeah it's fascinating to me that this conversation it's like it's like we're just gonna hear this conversation a lot but two three months when everyone like it's like this is a preview for what everybody this is like the trailer yeah this is gonna I think it's going to not be shocking but it will definitely I think it's gonna be it's gonna be an issue I mean as people have to you know they're basically they have to load this custom thing and this is one of the trade-offs of having external memory and it's such an unusual thing right most boards do not have external memory right and only like the IMX do and we're in because we that's why we happen to be like we already got like a preview of this with the prequel when we started doing the IMX because again right that quad enable bit was not volatile yours worked mine did somebody did like the bootloader didn't set it yep and we saw it with Sandy 51 as well well like Sandy 51 had Q-Spy just for the external flash that we could do that was that was a preview but at least there it was like you know the code was running like it wouldn't you write the USB just wouldn't show up as a mass storage so we're like okay we know something's going on right right yeah we're gonna get at it so yeah the random heartfelt was like I was doing GDB and it was like oh I'm in the clock configuration code but it's not always the same place and if I look at like the instruction it was like maybe it was like finally like it did I called disassemble and it was like invalid instruction and I was like oh like it's not able to like it's not correctly loading off the flash for all this stuff yeah so yeah we're getting through it it's well worth the effort right like I think circuit Python is well positioned to be very board friendly on the RP 2040 boards you know like I was somebody asked about micro Python support for the feather RP 2040 and I just went like I have this issue open with micro Python but I don't know what their plan is yeah I should add that to like the product page because I didn't even you know test it because it's like it's gonna be so different and honestly there should be a different build for each board because not all the pins are exposed and like they should it should go a fault if you don't you know it should not let you use a pin that doesn't exist which is different and managed differently right you know that's something we've been we've been really like sticklers about making sure that our experience is the same across all our ports and so like when it comes to doing a new port of course we have a boards directory because we have a boards directory for all of the other ports yes we have to think about you know I mean I think what we might ask is is micropathic can you just make a generic of three build or can you make a windbomb build you know I think but definitely as people start making different sized flash memory chips I think micro Python just have to know about them they could do it for other boards right like or other ports right like this is not new for them yeah but then again I don't think there's a whole lot because I made a feather definition for the for the feather STM32 a 405 right right and I did make like you know you configure with a PWL you kind of have to like preconfigure the PWMs and staff and the I squared C peripherals so I think I did it did do that hmm so it should be awesome yeah but I think I mean I think we're well positioned in that there's not a whole lot that you can do with micro Python that you can't do with circuit Python right like the only major thing that I'm aware of like the PIO stuff is kind of all settled out and we have some really good stuff like Jeff did some mods on that and then like the only thing is like using the second core like if you absolutely need that clocks be or that like CPU time for the second core like circuit Python doesn't have that but besides that like I I mean obviously I'm biased and you're biased too but like I just want to tell people like bias but I do I I like to have options yeah yeah and it's good for customers to have options right like yeah because we sell the heart look I mean people I it's funny it's people like you only do circuit Python it's like no actually I do most of my time is an Arduino like I still write an Arduino library and board support for every board we do right pretty much like very few boards don't have Arduino support and usually it's for a very good reason but we still you know we do tons of development in Arduino and eventually when the the RP2040 gets ported over to Arduino IDE we will submit a board definition or we'll have a board definition package for it absolutely yeah yeah I mean it makes sense right like you sell hardware not software I mean like there's sometimes people you know I get it like there's some situations where I really want to have Arduino on there's there's there's existing code you want to run or there's there's some like cool thing like you know emulator and you really do need that that speed I still think circuit Python's a lot more fun but there are situations where yeah and you know has this place like tacted board definitions for the Pico SDK already for our boards as well right yeah it's so nice thank you so much we should double check that because I think I think it might have I think it might have been too aggressive in the flash beat on some of those as well well you don't I mean I think we'd have to do doesn't even work because the board definition is using the generic we didn't we didn't specify a different flash chip oh you know what they could do though so what they could load circuit Python no no no circuit Python's generic right now but once we have quad enable on circuit Python working you can load circuit Python to set quad enable and then use the SDK see this is exactly what I'm talking about not doing and when that I'm gonna go thank you yeah yeah I'll be on Descalade data on Sunday I've got some fun things this is a this is my little keyboard thingy so trying out those kale switches yeah I got the prototypes of course I put the Neopixel on backwards I didn't reverse mount it correctly so like so eventually show up but I had to rewire the Neopixel nice like every wire is we done so that it's it's pointing out the the front awesome I've got the the kale socket and on the back right we'll pin out so yes you can see that it it's flat needs this is flat and then the socket switch sockets in it's like that cool and you can customize it so it's like hello looks which comes out so yeah actually I'm ordering the PCBs because other than the Neopixel being flipped in like a little dimension thing it's pretty much just works and so just order the PCBs and then we can start making keyboard prototype type thing I'd like to do the breakout first yeah that's Descalades come by I might also have the feather wing and maybe some of the other prototypes super exciting to go to show off well thanks again for stopping by I'll handle any questions that came up as we were chatting but I somebody pointed out like it's really cool to see like us have a technical conversation and it's actually great for us as well because we don't always get the time to have these technical chats anyway so yeah no I mean I'm happy to I'm happy to chat you know we have meetings of course but this is this is like the deep dive this is when I get to deep dive I usually don't even go into this kind of detail okay all right thanks everybody have a great Friday go outside if it's warm outside and don't forget to their clocks back on Sunday say hi to Phil for me and have a good weekend all right bye everybody all right yeah we can chat forever this is that that is why we're nor like if we're late to the circuit by the weekly meeting it's usually because we're like chatting too much um yeah I think so I'm gonna go back and look at questions uh david g says does this relate to cutie pie flash yeah it does like relate to like how we initialize stuff um TMZT says so is there a volatile key spy enable I think there is but we're not using it um let me look at what they link to so they link to the settings for the feather rp2040 uh TMZT it's incorrect it needs to be fixed um it should be it should be eight and not four we were thinking for at the very start and then um we couldn't get the four going because of the speed stuff so um so I want to try I want to try the smith thing we got about 20 minutes left so I think that's what we'll try um on this zero three um marx asked uh what's lady it is view a debug edge probably to ask her I think I think generally like somebody pointed out later like the edges are usually pretty full um so I'm not sure that's the right thing but the thing she does for me is put the two by five surface mount on there and nature tronics is still wanting me to get a raise um yep liked the the technical meeting aspect of it Gordy asked can micro python libraries work on circuit python um generally no uh not without some work um it depends on what they use what apis they use if they use like ice crud sea or spy they'll they'll need to be switched over because those apis are different if it doesn't if it's a library that somehow like uses only standard python stuff that both of us have then they will um yeah okay so let's um since we're in in these weeds let's just uh I want to try the schmitt trigger thing that Luke suggested so where is that that's in here so we I think we can just snag all of this so this will let us jam everything out I have a pretty good understanding of what all this is doing because I have tried to convert it to C so I kind of know what it is so let's just give that a shot and we'll set it back to the two to just see if we can get it if it's reliable with it I just be curious and let's clean it again oh um I did notice that uh instruction not supported in thumb 16 mode weird why is that this isn't thumb thumb function is this other one not thumb so thumb thumb function syntax unified I wonder if that doesn't have a unified syntax thing so I wonder if that's it so thumb is uh type of encoding for arm stuff how about X asks how do you get those cool colors and such in your terminal prompt it's uh I run fish and then I use the thing called oh my fish let's try it again oh and uh yeah it was Papa Romeo Mike Mike Papa Romeo Phil was asking what how I'm building so quickly um I am on a AMD 5950x all right well it doesn't like me I don't know why it's not working cannot honor width suffix like I'm just copying it from here to here missing something format I don't know I don't know oh you know what I bet it is I don't think I'm importing or I'm not including the GPIO stuff I think I need to do this I would explain it maybe more power baby notice the dash j32 exactly I was very excited very excited uh to actually be able to snag one of these I was like there was a guy who's streaming on YouTube about when I don't know why it's not working I'm gonna give up I don't care I I think I just want to switch it back to four um I switched six and it was working for folks but if it's so close on um divided by two I think we do I think we do actually want just um so don't give up I've given up I don't know why I want to move to see anyway probably missing the syntax unified I thought I added it though did I not I added it and it still didn't work it was still complaining at me honor width suffix comma zero is there an extra thing I didn't copy over zero plus oh this doesn't have the plus is that why the rest of that file will not build unified syntax okay so that's the problem don't you love it that I'm user testing for you luke all right I don't want to do that I want to move us to see anyway even if the SDK doesn't move to see I'd really like to do see with like I think I'm just going to do templates oh on the bix I'm going to leave this as an exercise to the viewer if you want to see if the the schmitt trigger stuff fixes it um okay I just like I want to be safe with it that's why I want to do four it's actually six right now so I want to set it back to four let's make it four and actually 10 minutes I wonder if I can I do want to move some code like I want all the VM code to actually live in RAM always because so there's 16k of of cache and that's super helpful but that's super helpful for the code that you don't know you're always going to need but it's circuit python we know you're going to be in like this loop running the VM code so it's I would rather just like shove all the VM code in RAM and make the heap smaller in exchange for allowing that 16k of like dynamic cache to be for the things that we really don't know whether you're going to use it or not which is a policy that on the imx we do as well but the imx is cool because it actually has core coupled memory so it's memory that runs at the speed of the core which you may like I assume ram in this case is also running at the speed of the core on the rp2040 but the core is only 125 mega Hertz whereas on the imxrt the cores go like five or six hundred megahertz so there's there's even like a cost like a clock cost to just going outside of like going to normal RAM and then they have core coupled RAM as well and so like we put all the VM stuff in that core coupled memory because if we were to sell a product with the imxrt which I actually have I found my prototype I have a prototype metro with imx if the selling point is 500 megahertz you actually want to be able to run like take advantage of that 500 megahertz so there is like circuit python is going to be going to this tiered memory model anyway and in fact we do the esp32s2 is another example of that because they also use external flash to store code okay let's do one final check with this but I don't want to change the SDK so I'm actually going to check out the SDK so this still has the the rx delay to it and some other stuff and I'm going to remove that rx delay because I don't want to change it here's my debugging for I was actually setting a pin high for when the clocks were being in it so I'm just going to check everything out and let's do one final test build at four uh divided by four instead of the conservative by six that I just checked in and I just remembered I still haven't done my email so I should do that as well all right let's a little build build build build build build and let's see my flips to data and folks I have questions feel free to ask them fish shell yeah I really like fish shell it does more completion than vash which is great so many I get so many spam calls now okay okay mr certainly says did you get the Pomona clip working from last week yes I did and the thing that I messed up was um there's two separate um plugs at the end of it and they were reversed they were reversed that was my problem with the clip that's why I was all confused is they were swapped and that meant all the colors were wrong so I didn't have the right things enabled and stuff so it was it was a bummer um okay circuit pi came up here so I'm gonna unplug and just do that oh I'll show you the overhead it's because I'm so popular now what you are too wide too wide about what okay so we're just gonna so that one test up what are you not allowed to test that tell us at this point there's not a lot it's pretty rare for me to not be able to just talk about what I'm doing um oh all the prank calls it because I'm popular let's see the the rp2040 I knew about knew it because of um I got early access so that was like an example of something I couldn't talk about I got that for the same d51 as well this is me just being rigorous about it um occasionally if if like Lamora's brainstorming her product she doesn't know if she's gonna release um I won't say it either but that's usually like pretty early oh the compiler would not honor my width the compiler it just doesn't like me okay this this seems to be okay so I'm gonna just do another quick pr just to make it a bit faster again this should be still conservative it still should be like you know 30 30 megahertz or so which should be well under the limits of of any of it david g if you want a you can't be so engaged in in ate a fruit land if you don't want to know what's in the ate a box it's always a a lot of tips shawna asks is that two by five swd had our difficult to solder on so I would highly highly highly recommend um picking up these um oh you can't see it these two by fives um this is a two by five where it doesn't have the shroud around it it's like it's it's known as like a keyed two by five and I we saw these on the nrf uh dev kits and I was like a little more we have to get these because um it means that like there's not a huge chunk of plastic around it um and the other thing if you're soldering so I hand solder a lot of stuff right so um the way that I was doing it is I start on the sides because the sides of the pins are kind of like easy to access so like tack it down with like one of the outside ones and then um and then kind of it's pretty challenging on here because there's like components the things you have to worry about melting are like the the neopixel you could like melt the plastic a little bit but if you happen to nudge like any of these capacitors or anything you're probably fine um but yeah I would do the two outside and then just doing the the two middle are kind of just like getting in there uh like so they they do take some skills um they do take some practice um but I I do they're they're super handy so there's the link thank you Patrick for the link to those Gareth asks how many times is a decent test for reliability in this sort of case well um it's not super critical that I get it right because um the way like I'll do a pull request we'll merge it and we'll get artifacts we'll have people test it and like it won't even make it it might end up in a beta um but yeah basically there's there's stages past me just doing that what I did uh to test it so like it doesn't my testing doesn't have to be perfect um and in fact I will never be able to test everything perfectly we we do rely on our community to test stuff so um okay so let's do a pull request and I think I'll call it well let's do a rebase speed up a bit more and I gotta grab my signing key yeah they're super handy I just ordered like 10 of course I I'm oh yeah desktop thank you um I'm lucky I can just order stuff from Adafruit but I don't know a lot of great places to find these particular two-by-five so um it is what it is um okay get fetch Adafruit so I'm going to rebase this just on top of um the merged commit that hasn't so I'll switch branches and I'm going to call it raise default flash speed rebasing is really handy before you make a pr after you make a pr I don't think you should rebase because the comments of a pr are associated with particular commits and when you rebase you are actually rewriting commits um but let me just show how so get rebase dash I so I'm in the branch that has my change that I want and then I rebase I Adafruit main Jim says my card is full so I can't push it anymore um and you can see here it has just that one commit so I can say X and now I'm rebased and oh that's weird that it looks like the IDF was updated and that must have been sub module and it and just do that that will make me green again now I can get push 10 newt to raise Jeff was so quick on the draw that just got it merged in yeah just to say Dell Microsoft IRS FDA will never call you directly and good scammers reverse look up your phone get your name and address essentially literally do not trust any unsolicited call no matter how much they seem legit like if you have a bank issue call the bank don't let them call you if they get angry or intimidate you etc then they are totally they totally aren't legit yeah if you question their legitimacy and they get angry that's the sign that they're not legit um okay we pushed and let me cycle through all the firefox windows I have open I'll have Jeff review this too this is the goldilocks of speeds it's too fast but it needed be visible bye I'm getting ready for a snack any other questions it's four o'clock next week will be a bit shorter because I have to take spook to the vet that it should start at the same time um python script checking for stock for a few days I do kind of leave stuff in my ate a fruit cart too because I don't necessarily know when I'm going to do a new order and at races why are you using mac and why not linux I'm on linux I was using mac for a long time but I switched to linux largely because I switched to my desktop and I I'm not about to pay for a mac desktop no sir I use arch linux which is my favorite linux distribution I always have the latest and greatest TMZT says first time catching it live I've been watching them since january 29th one way cooler this way thank you for not only watching but dropping in the chat as well um okay so if folks want to try it um we should hopefully get a new beta out next week we've just been changing a lot of stuff so it's it's about time to do a beta we'll do one next week um motto team has another question so what are you used to capture the camera feeds so I have the other reason I got a new motherboard and cpu is because this has this motherboard has better usb so the the sony camera goes into a mage well and then that mage well goes into usb into the computer the hover cam is usb straight to the computer and the salie as well and the c920 goes usb to the computer as well and then I'm using obs to do arrange all the windows and stuff if you have more questions feel free to ping me on discord and I'm happy to ask okay couldn't get through the install I like arch because it doesn't have any desktop stuff automatically um true yeah I have I have mac on my laptop I just I've stopped using it as much I used to use the the laptop docked to everything but um the other nice thing about a desktop is that it it can control heat a lot better than a laptop can um I wish I had your media equipment budget thank you eat a fruit they paid for all well they didn't pay for the c920 but they paid for the hover cam the sony and the and the mage well the mage well was a recommendation by phil along with the hover cam as well and then I I I found the sony one and it was like this is a good camera and it's I've been very pleased with it okay let's wrap up I've been chatting thank you all so much for hanging out during this deep dive thanks again to lady adia for stopping by and letting us to uh chit chat all the technical stuff thank you uh to david dcd for taking notes I really appreciate it and um also thank you to Luke for uh helping me out with all the rp20 40 stuff and it's a very cool chip and as always we're just getting started with everything so stay tuned for more improvements on the rp20 40 stuff till we get it kind of like all settled out for all the boards and then we'll move on to some other fun uh circumvent them stuff as well so uh as always um thank you everyone for hanging out and uh next week we'll be on Friday it'll just be a bit shorter because the vet afterwards um and this time I'll I'll give vin some pets here at the end instead so let me switch to cat care hi kitty kitty is it too cold should I close the window all right have a great weekend everyone yeah I'm gonna go get I'm gonna go get outside