OpenXenium JTAG and Flash Memory programmer

Overview

OpenXenium JTAG and Flash Memory programmer

* Read: "Home Brew" on ORIGINAL XBOX - a detailed article on why and how *

xenium-programmer

The tools in this repo will allow you to use a Raspberry PI or an Onion Omega2+ to program an OpenXenium chip with the Xilinx CPLD Firmware via JTAG and will also upload XeniumOS images into the OpenXenium Flash memory via a custom 4-bit bus NOR Flash programming protocol.

Raspberry PI:

  • This has only been tested on PI Zero W and PI 3B+ models so far.

https://www.pishop.us/product/raspberry-pi-zero-w/

Onion Omega2+:

  • This has been tested and works on the Onion Omega2+.

https://Onion.io/store/omega2p


INSTALLING THE XENIUM PROGRAMMER

  • Connect to the PI or Omega via SSH or Serial terminal
  • Clone this repo by running: git clone https://github.com/kooscode/xenium-programmer.git
  • Then run: ./install

UPDATING XENIUM PROGRAMMER

  • Connect to the PI or Omega via SSH or Serial terminal
  • Pull the latest code with: git pull
  • Then run: ./install

PROGRAMMING A XENIUM CPLD AND FLASH MEMORY

  • Connect to the PI or Omega via SSH or Serial terminal
  • You can program XeniumOS and OpenXenium Firmware in one single step.
  • Run: ./xenium-programmer

jtag-pinout


HOOKING UP THE HARDWARE

  • The JTAG and FLASH pins are configurable by editing the XeniumDefines.h file
  • If you edited the XeniumDefines.h file, make sure to run ./install again

[ RASPBERRY PI ]

jtag-pinout

bitbus-pinout

PC BOARD

Huge thanks to James Bolding for the Eagle PCB hardware design. He made a kick-ass Schematic and PCB that you can make for the Raspberry PI Zero based programmer!

  • You can use the FREE Eagle PCB to load this up or just use the gerber files to have the PCB made at OSH Park!

RPI PXB


[ ONION OMEGA2+ ]

jtag-pinout

bitbus-pinout


CREDITS

  • Koos du Preez - Creator ([email protected] - Comments, improvements, critique, etc. is welcome!)
  • James Bolding - Kick ass awesome hardware design and PCB!
  • Ryzee119 - OpenXenium Firmware and hardware and all round awesomeness!
  • XC3SPROG - Not sure who to thank here, but the source code was pivotal in making this work!
Issues
  • Error: Flash device not found

    Error: Flash device not found

    I have the a Raspberry Pi Zero W with pins that I've wired to an Open Xenium chip. I am trying to write to it using the xenium-programmer script and I keep getting the 'Flash device not found' error. I have checked all of my wiring (multiple times) end to end with a multimeter and the connections appear to be correct. I can also easily pass the initial JTAG portion. Are there any suggestions or is there anything you can tell me from the included output? Many thanks!

    Xenium JTAG Tool - v0.1

    Loading JEDEC File: Loaded: xenium-bin/xeniumflash.jed Found JED file device: XC9572XL-10-VQ64 Scanning JTAG Chain: Devices found: 1 Checking for XC9572XL: [ OK ] JTAG/JED Device Match: XC9572XL-10-VQ64 [ OK ] JTAG Programming Device: Erasing: [ OK ] Programming: [ DONE ]
    Verifying: [ OK ]

    PROGRAMMING FLASH : XENIUM OS


    Xenium Flashing Tool - v0.1

    Checking Hardware: Raspberry Pi Zero W Rev 1.1 Loading Xenium Flash BIN: xenium-bin/xenium_blue.bin Detecting Xenium Flash: ERROR

    ** XENIUM FLASH DEVICE NOT FOUND - Manufacturer:187, Device:187 **

    ERROR Loading XeniumOS into OpenXenium Flash memory! Please double check your LPC Header connection and wires!

    opened by bgillman22 1
  • Race condition in programming

    Race condition in programming

    This write loop never checks the toggle bits to ensure the chip is available to receive the next write command that I can see.

    https://github.com/kooscode/xenium-programmer/blob/f18a304062bf4ae3c06ad1466f5e516858a2a7da/xenium-flash/src/xenium-flash.cpp#L173

    From datasheet in the Word/Byte programming section:

    The system can determine the status of the program operation by using DQ7, DQ6, or RY/BY#. See Section 11. Write Operation Status on page 32 for information on these status bits. Any commands written to the device during the Embedded Program Algorithm are ignored.

    The std::cout you have in the loop may slow be enough to reliably add a delay between each write to not see any issues, but the correct method would to ensure the chip is not busy before each byte I think.

    opened by Ryzee119 1
  • re-mapped GPIO8 and GPIO24

    re-mapped GPIO8 and GPIO24

    We found a wiring mistake on the PCB.. and since a few PCB's was already made, it was easier to just update the GPIO mappings in software..

    Xenium-Flash GPIO24 was re-mapped to GPIO8

    opened by kooscode 0
Owner
Koos du Preez
Koos du Preez
MMCTX (Memory Management ConTeXualizer), is a tiny (< 300 lines), single header C99 library that allows for easier memory management by implementing contexts that remember allocations for you and provide freeall()-like functionality.

MMCTX (Memory Management ConTeXualizer), is a tiny (< 300 lines), single header C99 library that allows for easier memory management by implementing contexts that remember allocations for you and provide freeall()-like functionality.

A.P. Jo. 4 Oct 2, 2021
Custom memory allocators in C++ to improve the performance of dynamic memory allocation

Table of Contents Introduction Build instructions What's wrong with Malloc? Custom allocators Linear Allocator Stack Allocator Pool Allocator Free lis

Mariano Trebino 1.2k May 9, 2022
Memory-dumper - A tool for dumping files from processes memory

What is memory-dumper memory-dumper is a tool for dumping files from process's memory. The main purpose is to find patterns inside the process's memor

Alexander Nestorov 29 Feb 5, 2022
Mesh - A memory allocator that automatically reduces the memory footprint of C/C++ applications.

Mesh: Compacting Memory Management for C/C++ Mesh is a drop in replacement for malloc(3) that can transparently recover from memory fragmentation with

PLASMA @ UMass 1.4k May 7, 2022
STL compatible C++ memory allocator library using a new RawAllocator concept that is similar to an Allocator but easier to use and write.

memory The C++ STL allocator model has various flaws. For example, they are fixed to a certain type, because they are almost necessarily required to b

Jonathan Müller 1.1k May 9, 2022
A simple windows driver that can read and write to process memory from kernel mode

ReadWriteProcessMemoryDriver A simple windows driver that can read and write to process memory from kernel mode This was just a small project for me t

Hypervisor 6 Mar 30, 2022
Tool for profiling heap usage and memory management

vizzy > ./build/vizzytrace /tmp/heapinfo.trace /bin/find /home/zznop -name vizzy _ _ ____ ____ ____ _ _ ( \/ )(_ _)(_ )(_ )( \/ ) \ /

Brandon Miller 29 Mar 19, 2022
STL compatible C++ memory allocator library using a new RawAllocator concept that is similar to an Allocator but easier to use and write.

STL compatible C++ memory allocator library using a new RawAllocator concept that is similar to an Allocator but easier to use and write.

Jonathan Müller 1k Dec 2, 2021
Test cpu and memory speed at linux-vps

Тест скорости процессора и памяти на linux-vps. Занимается бессмысленным перемножением массивов случайных чисел, для определения скорости процессора и

Anton 3 Nov 30, 2021
Using shared memory to communicate between two executables or processes, for Windows, Linux and MacOS (posix). Can also be useful for remote visualization/debugging.

shared-memory-example Using shared memory to communicate between two executables or processes, for Windows, Linux and MacOS (posix). Can also be usefu

null 8 Mar 18, 2022
A simple C++ library for creating and managing bitstreams in memory.

ezbitstream (v0.001) A simple C++ library for creating and managing bitstreams in memory. API & Implementation ezbitstream implements bitstreams with

Unsal Ozturk 2 Feb 4, 2022
Detect strange memory regions and DLLs

MalMemDetect Detect strange memory regions and DLLs Compile as a DLL and inject into a process to identify hollowed DLLs and unmapped memory region ca

null 119 May 5, 2022
Public domain cross platform lock free thread caching 16-byte aligned memory allocator implemented in C

rpmalloc - General Purpose Memory Allocator This library provides a public domain cross platform lock free thread caching 16-byte aligned memory alloc

Mattias Jansson 1.5k May 10, 2022
manually map driver for a signed driver memory space

smap manually map driver for a signed driver memory space credits https://github.com/btbd/umap tested system Windows 10 Education 20H2 UEFI installati

ekknod 71 Apr 9, 2022
Memory instrumentation tool for android app&game developers.

Overview LoliProfiler is a C/C++ memory profiling tool for Android games and applications. LoliProfiler supports profiling debuggable applications out

Tencent 416 May 13, 2022
A single file drop-in memory leak tracking solution for C++ on Windows

MemLeakTracker A single file drop-in memory leak tracking solution for C++ on Windows This small piece of code allows for global memory leak tracking

null 22 Apr 23, 2022
Dump the memory of a PPL with a userland exploit

PPLdump This tool implements a userland exploit that was initially discussed by James Forshaw (a.k.a. @tiraniddo) - in this blog post - for dumping th

Clément Labro 546 May 14, 2022
Implementation of System V shared memory (a type of inter process communication) in xv6 operating system.

NOTE: we have stopped maintaining the x86 version of xv6, and switched our efforts to the RISC-V version (https://github.com/mit-pdos/xv6-riscv.git)

Viraj Jadhav 5 Feb 21, 2022
An In-memory Embedding of CPython

An In-memory Embedding of CPython This repository contains all the build artifacts necessary to build an embedding of CPython 3.8.2 that can be run en

null 100 Apr 26, 2022