One ROM Programmer

Use Chrome, Edge, or another Chromium based browser. See Usage for instructions.


Device Information


Programming


Usage
  1. First time setup:
  2. Plug in your One ROM USB. If this is a factory fresh One ROM USB jump the B0 and 3V3 pads on the underside while plugging it in. If the red LED doesn't light up faintly, try again.
  3. Click the "Connect" button. A popup will appear asking you to select a device. Select "STM32 BOOTLOADER" and click "Connect".
  4. The device's current firmware will be read and analyzed, with information being displayed once complete.
  5. Choose the firmware source: Pre-built, Local or URL.
  6. Select the STM32 variant you are programming, and in the case of the pre-built image, your PCB revision and desired One ROM firmware version. If an ONE ROM firmware was detected on the device you can use the values displayed.
  7. Choose a pre-built config, select a local file, or enter the URL of the One ROM .bin file to program.
  8. Click the "Program" button.
  9. The button text will change to "Erasing". Wait for this to complete.
  10. The button text will change to "Programming". Wait for this to complete.
  11. When done, the device will be re-analyzed to verify the programming operation. Once complete, you can disconnect One ROM and plug it into your retro system.
Problems

If you encounter any issues using this programmer, raise a GitHub issue.

FAQ
      Q: What if I hit problems?
      Q: Why do I have to select the STM32 variant?
      A: So the programmer can ensure the firmware you provided is for your specific STM32 chip, and that your One ROM USB has enough flash space for the firmware image.
      Q: How do I know what STM32 variant my One ROM has?
      A: Read the part number from One ROM's main IC. You are looking for the 6 characters immediately after "STM32".
      Q: Why isn't there a pre-built image for my system?
      Q: Why isn't my STM32 variant listed?
      A: Pre-built images are available for the most commonly used STM32 variants. You can build images for other variants using the One ROM github repo.
      Q: Can I use this with Firefox, Safari, or another non-Chromium browser?
      A: WebUSB, the technology behind this programmer, is only supported in Chromium based browsers like Chrome and Edge.
      Q: Can I use this on Linux or Mac?
      A: Yes, but you must still use a Chromium based browser.
      Q: Can I use this with a non-USB version of One ROM?
      A: This programmer currently only works with the USB version of One ROM.
      Q: Can I use this to program other, non-One ROM, STM32 devices?
      A: This programmer only programs valid One ROM USB firmware - it checks the image before programming. However, the site is based on a generic STM32 DFU implementation, and its code is MIT licensed, so you are free to copy and modify it for your own purposes.
      Q: Can I use this on my phone or tablet?
      A: We have no idea - maybe if you are using Chrome. Let me us know via github if you get this working!
      Q: Is my privacy protected?
      A: We do not collect any personal data. However, your browser may still send some information to the server, such as your IP address.
      Q: Where can I find the source code for this programmer?
      Q: When I press "Connect" why does it sometimes read the One ROM twice?
      A: Firmware versions prior to v0.5.0 stored the ROM metadata in a different location on flash. This tool attempts to read just the first 64KB (metadata location for v0.5.0+) and if the ROM metadata is not present, then re-reads the entire flash to find it.
Windows Setup
  1. Download and install Zadig.
  2. Plug in your One ROM USB. If this is a factory fresh One ROM USB, jump the B0 and 3V3 pads on the underside while plugging it in. If the red LED doesn't light up faintly, try again.
  3. In Zadig, select "Options" > "List All Devices".
  4. In the dropdown, select "STM32 BOOTLOADER".
  5. From the driver selection box on the right of the big green arrow, select "WinUSB (some version number)".
  6. Click "Install Driver". If it says "Replace Driver" or "Reinstall Driver", click that instead.

Zadig showing STM32 BOOTLOADER selected with WinUSB driver ready to install

  1. Wait for the installation to complete. It may take a few seconds for the progress pop-up to appear.

Zadig driver installation progress bar

Zadig driver installation successful completion dialog

  1. You can now close Zadig.
Linux Setup
  1. Create a file called /etc/udev/rules.d/51-one-rom.rules with the following content:
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", MODE="0666"
  2. Then run:
    sudo udevadm control --reload-rules
    sudo udevadm trigger
  3. If you are using Chromium installed via snap, you need to allow Chromium to use USB by running:
    snap connect chromium:raw-usb
    Then restart Chromium.
How It Works
  • The page uses WebUSB to access One ROM USB directly from your browser.
  • For security reasons, WebUSB is only available when this site is served over HTTPS (or from localhost) - you are recommended to use it at https://onerom.piers.rocks. This version is built directly from the main branch of the One ROM github repository.
  • Only the device you select when you hit "Connect" or "Program" can be accessed by this page's javascript code - your other USB devices are not visible to it. None of your devices, including your chosen one, are visible to the server.
  • The page's javascript code implements the STM32 DFU protocol, performing the necessary flash load, erase and programming operations on your One ROM USB.
  • The firmware on your One ROM USB can only be updated when it is in DFU (Device Firmware Update) mode. This is automatically enabled when you plug in One ROM to a USB host, like a PC, unless you have a completely "fresh from the factory", or bricked, One ROM USB.
  • If you have factory fresh, or bricked, One ROM USB, you need to manually put it into DFU mode before flashing, by jumping B0 and 3V3 on the underside of One ROM, while plugging it into USB.
  • One ROM's status LED is lit dimly when in DFU mode.
Privacy

The One ROM Programmer is hosted and served by GitHub Pages. It retrieves One ROM firmware manifest information from GitHub. GitHub may log your browser details and IP address.

Most of the site's functionality runs entirely in your browser, and no personally identifiable data is stored by any server other than the GitHub pages server:

  • When your browser loads this page, it tests whether a piers.rocks server is responding, and enables the pre-built image functionality if so. The piers.rocks server logs your browser's User-Agent string (which typically includes your OS and browser version) and the firmware file being downloaded, but does not log any personally identifiable information like your IP address.
  • If you flash a pre-built image, the image is downloaded from GitHub via a piers.rocks server. This is done to work around javasript limitations when retrieving GitHub release artifacts. The piers.rocks server logs your browser's User-Agent string (which typically includes your OS and browser version) and the firmware file being downloaded, but does not log any personally identifiable information like your IP address.
  • If you flash a local file, it is read directly from your computer, and not sent to any server.
  • If you flash an image from a URL, the image is downloaded directly from that server by your browser. That server may log your IP address and browser details, as any web server might.

If you have any questions about privacy, please raise a GitHub issue.