PCA9564 parallel bus to i2c-bus controller

Here is some more information:

This project’s objective was using modern integrated circuits (ICs) to replace Multiplexer (MUX)logical boards in a circuit continuity verification machine. Specifically, the PCB design and BOM of replacement boards would be developed for production. The change was motivated by the need to detect voltages applied to a larger quantity of inputs than the original MUX boards could handle. The original design consisted of 64 boards connected in series with 160 input pins per board, all reporting to a single interface computer. The 10,240 pins formed a “bed of nails” array whose geometry is indispensable for the operation of the verifier machine necessitating the replacement boards to have a pin footprint similar to the originals.
Antiquated components within the MUX cards limited the number of pins that could be read simultaneously (fanout capability) to 1,500 pins. New uses for the verification machine require a minimum fanout capability of 2,500 simulations pins and requested additional functionality in the design.

The the MC, an ATMega2560 was choosen, using the Arduino to prototype.

Final design can be divided into four discreet sections: the replacement boards, a single master controlling board, communication between boards and the computer interface between the master controlling boards. Each of the replacement boards must be capable of voltage fanout reaching 2,500 pins and be able to detect voltage and source 5 volts at any of its pins on command. Each board is composed of one ATMega 2560 micro controller, which is in I2C bussed communication with eight MCP23017 I/O expanders. The microcontroller acts as a local master of the I/O expander, which are used to add 128 additional interfaces per board, reducing the number of necessary microcontrollers and by effect the cost per board. Furthermore, these I/O expander have high gate impendence, and low current draw, which enables the fan-out of the system to be some 300,000 pins. This protocol is a method of expressing all the read inputs pins as a single absolute number, Absolute Number = (Card Number * 160) + Pin Number + 1, where Card Number is bounded from 0 through 63. From a single integer the excitation status of all pins can be deciphered since every combination of simultaneously excited pins results in a unique value.

One attempted solution was SPI:
The communication strategy allows both the individual replacement boards to communicate with the master, spending data, and for the master card to communicate with each individual replacement board. SPI, or Serial Peripheral Interface bus was chosen for this task, as it is a synchronous communication interface that facilitates this form of communication, without interfering with existing on-board communication.

The master controlling board is responsible for interfacing between a network of 64 individual replacement boards, and the controlling computer. A key specification of this master controlling board is the ability to communicate with modern day computers, using a standard communication interface like USB. To reduce cost, and the number of items on the BOM, the master board is identical to the other 64 boards save for the USB port. The true difference is unique programming on this board that allows it to perform its unique operations. The function of this board is twofold. It takes information from all 64 individual replacement boards and communicates the complied information to a PC over an onboard USB port, and does the reverse, by sending commands from the PC to any individual board.
The interface between the PC, and the master controlling board is a PC based console application. This application requires the master controlling board to have clearly defined commands for operations for sourcing and reading across a given pin. These commands are hardcoded into the firmware of the master controlling board. A simple interface was built using a Java executable, which allows user inputs to control the operating mode of the entire system, send specific inputs and display specific outputs.
The final design phase was testing and validating this design. This was done by mocking up the design on a breadboard with MCP23017 and an Arduino Mega2560, to verify the hardware. In order to verify both the hardware and software this bread board design was tested through a variety of conditions. First voltage was applied to all 160 input pins, to verify they would read. Then voltage was a applied to random pins, to simulate any possible combination of text fixtures. Additionally, voltage was applied to a resistor place inline between two GPIOs.