Custom PicoCalc BIOS/keyboard firmware

Ah indeed, sorry about that!

Seem I forgot to re-add this reg when cleaned up the callback function…

I’ll push a hotfix bin on the 0.9 release later today.

Just a quick question, does the I2C still work after the timeout (can you read/write another register without issue after INT read)?

NB: I’m working on review of the driver using DMA to allow the 400 kHz I2C.

1 Like

No worries, I stashed the IRQ method until it will make it into new release, as for the timeout thing, nope, can’t recover from 0xFE (pico-sdk timeout flag) power reset needed and I don’t understand that is pico i2c or STM i2c bug, sometimes I see STM led double flash or one flash, but it does not affect keyboard and everything working fine. Also noticed that when I set 100khz then I got random keys sent while idle, I noticed this when NC in my emulator shows screensaver but sometimes it exists, so I lowered the freq to 50khz and everything is fine since then.

You’re not the only one to see I2C issues on the PicoCalc. I get these every so often, particularly after a fresh install of zeptoforth, and the only way out is a full power cycle of the PicoCalc – merely rebooting the RP2350 (via sending control-C over USB-serial) does not fix it. BTW, I am using the 1.2 BIOS.

The (my) 1.6 bios monitors the I2C traffic and does an I2C restart if no traffic is detected for a short period. From my source:

  if (millis() > 10000) { 
    if ( ((millis() - receiveEventTick) > 2500) || ((millis() - requestEventTick) > 2500)  )
    {
      ResetI2CBus();
    }  
  }

There are some activities that may cause the timer to run out but I have not noticed that this causes a problem.

2 Likes