Request for I2C firmware (.hex) for 125kHz RFID Board (ATTINY1604) – UART to I2C conversion

Hello Soldered team,

I am using your 125kHz RFID Tag Reader Board in a commercial security product, and I would like to ask for your help.

I currently have several units of the UART version (product 333154), but my application requires the I2C/easyC variant (product 333272), which communicates over SDA/SCL at address 0x30.

Unfortunately, the I2C version is currently not available for purchase in the quantities I need — your sales team confirmed it cannot be supplied at the moment.

Since both versions share the same hardware (ATTINY1604) and differ only in firmware, I would like to reprogram my UART boards with the I2C firmware via the onboard UPDI connector.

Could you please provide:

The compiled firmware binary (.hex) for the I2C/easyC version of the ATTINY1604, and
Any fuse settings / UPDI flashing instructions required to program it correctly.

Alternatively, if you can share the firmware source code for the I2C version, that would be equally helpful — I understand your products are open-source (GPL), and I am happy to comply with the license terms.

This would allow me to use the boards I already have, on the I2C bus, alongside other I2C peripherals in my system.

Thank you very much for your excellent products and your well-known open-source support.

Hi @ordini

You can find the firmware on the dev branch of our library.

To reprogram the chip you will need an UPDI programmer such as an Atmel ICE device or you could use a microcontroller as a jtag2UPDI device: GitHub - ElTangas/jtag2updi: UPDI programmer software for Arduino (targets Tiny AVR-0/1/2, Mega AVR-0 and AVR-DA/DB MCUs) · GitHub

For Arduino settings, I’m providing (a bit of an older) image of the settings we used to program the boards. It should work with the newest version as well, leave the other settings at default. Be sure to grab the board definitions for the easyC boards.

Let us know if you face any issues with it.

Hello and thank you for the previous reply.

I followed your instructions and flashed the easyC (I2C) firmware from the dev/extras/attiny_firmware_easyC folder onto my UART board (ATtiny1604), using a CH340E SerialUPDI programmer.

Settings used (matching your screenshot):

  • Board: ATtiny1604 (megaTinyCore) / easyC Boards

  • Chip: ATtiny1604

  • Clock: 10 MHz internal

  • millis()/micros() Timer: RTC (no micros)

  • Programming result: “Verify successful. Data in flash matches data in specified hex-file” — so the flash completes correctly.

The problem:

  1. With the original UART firmware, presenting a 125kHz tag made the read LED blink strongly and reliably (whether or not the board was connected to anything).

  2. After flashing the easyC I2C firmware, that same read LED now blinks very weakly, or only occasionally, or not at all when I present the same 125kHz tag. It looks like the 125kHz reading itself is no longer working properly.

  3. On the I2C bus, the board does not respond / gives no ACK at address 0x30 (DIP switches all OFF). I verified the bus is healthy: another I2C device on the same wiring works perfectly, and an I2C scan finds nothing at 0x30.

The board is powered at 3.3V (it worked perfectly at 3.3V in UART mode).

My questions:

  1. Since the read LED behaves so differently (strong in UART, weak/absent in I2C), is there a compile setting I’m missing (BOD level, BOD mode, startup time, or a different clock) that is critical for the 125kHz front-end timing in the easyC firmware?

  2. Is the easyC firmware on the dev branch confirmed working as-is, or should I use a specific commit / different settings?

  3. Does the UART hardware version have the SDA/SCL lines physically routed to the ATtiny, or is a hardware modification (solder jumper) also required to enable I2C — in addition to the firmware?

  4. Could you share the exact fuse settings you use when programming the easyC boards in production?

Any working .hex binary for the I2C version would also be very welcome, so I can rule out a compilation/toolchain issue on my side.

Thank you very much for your support.

Could you try setting to 20MHz?

Hi, yes I tried also 20Mhz and process ends well BUT on the board I2C doesn’t work

Could you try reflashing UART code back and check if everything is working as before to rule out hardware issue?

Hi, yes I did it. I went back to UART version and same board back working well as expected and previously set. But my need is have I2C for my project

Hello, for my trouble, about changes F/W on reader’s board to make it working in I2C in a place of UART mode, is the something to modify hardware board side after software procedure or board doesn’t need anything to apply on the hardware to start communication in I2C mode ?

I have updated the firmware on the dev branch, could you try the latest version?

Hi, I got the last firmware and NOW firmware works well as expected in I2C mode. Really thanks