Skip to main content
Production EEPROM and SPI flash programming with the Binho Nova and Python, supported in India by GSAS

Production EEPROM and Flash Programming with Binho Nova and Python

GSAS Engineering · · 5 min read

Production EEPROM and Flash Programming with Binho Nova and Python

Many embedded products include external EEPROM or SPI flash memory alongside the main microcontroller. The MCU runs the application firmware, but the EEPROM stores configuration data, device calibration constants, factory settings, network credentials, or product identity information. The SPI flash may hold firmware update images, data logs, web server assets, or voice prompts.

Programming these external memories during production is a separate step from MCU programming. The MCU programmer handles the microcontroller’s internal flash. The EEPROM and SPI flash need their own programming solution, and the Binho Nova with its Python SDK provides exactly that.

I2C EEPROM Programming

I2C EEPROMs (24LC256, 24C02, AT24CM02, and similar) are the most common external non-volatile memory in embedded products. They store small amounts of configuration data, typically 256 bytes to 2 MB, at I2C addresses that depend on the device and its address pin configuration.

The Binho Nova’s I2C interface, running at up to 3.4 MHz, provides direct access to these EEPROMs through the Python SDK. A basic write-and-verify script looks like:

from binho.interfaces.i2cDevice import I2CDevice

## Connect to Nova
from binho import binhoHostAdapter
binho = binhoHostAdapter.binhoHostAdapter()
binho.setOperationMode(0, 'I2C')
binho.setI2CFrequency(0, 400000)  # 400 kHz

eeprom_addr = 0x50  # 7-bit address

## Write configuration data starting at address 0x00
config_data = [0x01, 0x02, 0x03, 0x04]  # Example
binho.writeToAddress(0, eeprom_addr, config_data)

## Read back and verify
readback = binho.readFromAddress(0, eeprom_addr, len(config_data))
assert readback == config_data, "Verification failed"
print("EEPROM programming verified")

For production use, the script extends to handle page-aligned writes (respecting the EEPROM’s page write size), write cycle delays (typically 5 ms per page), and error handling with retry logic.

SPI Flash Programming

SPI NOR flash devices (Winbond W25Q, Macronix MX25L, ISSI IS25LP, GigaDevice GD25Q) are used for larger storage, firmware update images, web assets, voice prompts, and data logs. These devices communicate through SPI at speeds from 1 MHz to the Nova’s maximum of 12 MHz.

A typical SPI flash programming workflow involves:

  1. Read JEDEC ID to confirm the flash device is present and identify its type
  2. Erase the target sectors or perform a full chip erase
  3. Program data in page-sized chunks (typically 256 bytes per page)
  4. Verify by reading back the programmed data and comparing against the source
## Read JEDEC ID
binho.setOperationMode(0, 'SPI')
binho.setSPIFrequency(0, 8000000)  # 8 MHz

jedec_id = binho.spiTransfer(0, [0x9F, 0x00, 0x00, 0x00])
manufacturer = jedec_id[1]
device_type = jedec_id[2]
capacity = jedec_id[3]
print(f"Flash: MFG={hex(manufacturer)}, Type={hex(device_type)}, Cap={hex(capacity)}")

## Chip erase
binho.spiTransfer(0, [0x06])        # Write enable
binho.spiTransfer(0, [0xC7])        # Chip erase
## Wait for erase to complete (poll status register)

The programming script handles the erase-program-verify cycle for the full flash image, with progress reporting and error handling suitable for production use.

Production Workflow Integration

For production floors in Chennai and Pune, the Python script integrates into the manufacturing workflow through several approaches:

Standalone station. A PC with the Nova connected runs the programming script. The operator loads a board into a bed-of-nails fixture, initiates the script (button press, barcode scan trigger, or MES signal), and waits for the pass/fail result. The script programs both the I2C EEPROM and SPI flash in sequence.

Integrated with MCU programming. After the MCU is programmed by a dedicated MCU programmer (such as an Elprotronic S-GANG), the board moves to the Nova station for external memory programming. The serial number assigned during MCU programming can be read from the MCU and cross-referenced with the EEPROM data.

Calibration data injection. For products that undergo calibration during production test (temperature sensors, pressure sensors, power meters), the calibration constants measured at the test station are written to EEPROM by the Nova as the final production step.

Per-Unit Serialization

The Nova’s Python SDK enables per-unit data customization. Each board can receive unique data written to EEPROM or flash:

  • Serial numbers for traceability
  • MAC addresses for network-connected devices
  • Encryption keys for secure products
  • Calibration constants measured during production test
  • Configuration parameters specific to the product variant or customer order

The script reads the unique data from a CSV file, database, or MES API, writes it to the target memory, and verifies the write. Production logs record the per-unit data alongside the programming result for traceability.

Scaling Considerations

The Nova programs one board at a time, making it suitable for production volumes up to a few thousand units per month. For higher volumes, the Binho Supernova provides faster SPI speeds (50 MHz vs 12 MHz) and can reduce per-unit programming time for large SPI flash images.

For productions lines in Bengaluru and Hyderabad running moderate volumes across diverse product types, the Nova’s flexibility, supporting both I2C EEPROM and SPI flash from one tool, with Python scriptability for custom per-unit data, makes it a practical production tool that adapts to changing product requirements without hardware changes.

Why Buy from GSAS

GSAS Micro Systems is an authorized Binho engineering partner in India. We provide the Nova and Supernova with INR invoicing, local inventory, and applications engineering support. Our team in Bengaluru, Hyderabad, Chennai, Pune, Mumbai, and Delhi NCR helps production teams develop Python programming scripts, design test fixtures, and integrate Binho adapters into manufacturing workflows. Contact us for evaluation units or production integration consulting.

Interested in Binho tools?

Talk to our application engineers for personalized tool recommendations.

Frequently asked questions

Why does external memory need a separate production programming step?
An MCU programmer writes the microcontroller's internal flash. External I2C EEPROMs and SPI NOR flash sit on their own buses and are not reached by that tool, yet they hold the data that differs per unit: configuration, calibration constants, serial numbers, MAC addresses and network credentials. That makes external memory programming a distinct station with its own verify step.
How do I verify an EEPROM write in production?
Read the data back over the same bus immediately after writing and compare it byte for byte against the source. A production script should also respect the device's page write size, wait out the write cycle time, typically around 5 ms per page, and retry on failure before declaring the unit bad.
How do I identify an unknown SPI flash device?
Issue the JEDEC ID command, 0x9F, and read three bytes back: manufacturer ID, device type and capacity code. Doing this as the first step of a programming run confirms the part is present, correctly wired and the type you expect, before any erase destroys anything.
Which Binho adapter is faster for SPI flash programming?
Binho specifies the Nova at a 12 MHz max SPI clock speed, and both the Supernova and the Pulsar at a 50 MHz SPI controller with up to four chip selects. For large flash images, where run time is dominated by clock rate, the faster controller materially reduces per-unit programming time.
Can a Binho adapter write a different serial number to each board?
Yes. Because the workflow is a Python script rather than a fixed utility, per-unit data can be pulled from a CSV file, a database or an MES API, written to the target memory, verified, and logged against the unit for traceability.

Stay in the Loop

Get monthly compliance updates, product insights, and engineering best practices delivered to your inbox.

Related Articles

FPGA in the loop verification workflow between Simulink and a Zynq-7000 development board
Technical Guides Digilent

ZedBoard FPGA-in-the-Loop: HDL Verifier vs HDL Coder

Teams asking for FPGA-in-the-Loop on a ZedBoard usually name HDL Coder and SoC Blockset. FIL is actually HDL Verifier. Here is the correct product split, the JTAG versus Ethernet decision, and the 2015-era advice that is still sending Indian teams down the wrong path.

5 Aug 2026 · 9 min read
FADOS MUX test station on an Indian EMS line generating a board test report, GSAS FADOS reporting workflow
FADOS CBT Electronic

FADOS Test Reports and GSAS Agent: Turning Board Test Results into an Auditable Record

A pass or fail on the FADOS screen is not a record. This guide covers what the FADOS test report contains, what GSAS Agent does with it, and how offline, Google Drive and LAN modes put a QR-linked report on the job card for repair shops and EMS lines in India.

4 Aug 2026 · 8 min read
Classification tree and combination table used to design embedded unit test cases in Razorcat's Classification Tree Editor for TESSY, available in India from GSAS Micro Systems
Compliance & Safety Razorcat Automotive & Mobility

Test Case Design with the Classification Tree Method: Deriving Unit Tests You Can Defend in an Audit

Ad-hoc test cases can be perfectly good tests and still fail an audit, because nothing on file records why that particular set was sufficient. The Classification Tree Method derives test cases from the input space instead: identify the test-relevant aspects as classifications, partition each into equivalence classes, then combine leaf classes in a combination table. Razorcat implements CTM in the Classification Tree Editor, available integrated into TESSY or standalone. GSAS Micro Systems is the authorized Razorcat engineering partner for India, the UAE and Sri Lanka.

1 Aug 2026 · 10 min read