I have a possible application for a number of
BBBs and can't find a cogent answer...
Perhaps the collective knowledge and experience
of the group will provide the best answer...
Can the BBB do bytewide I/O under C ??
Here's the situation...
The project is to update an already deployed card
cage based hardware system. It presently uses
a proprietary Z80 based CPU board that was
designed for the job 25 years ago.
I envision a replacement CPU board that plugs into
the existing proprietary socket - the card would be a
designed-for-the-job "mothercard" with a BBB upside
down so that the expansion headers plug into (onto ?)
connector strips on the mothercard.
At the moment, I envision that the BBB computing
environment will be Ubuntu running both a web
host and the custom applications program on startup.
The BBB I/O required will be the ethernet, the
host and client USB, the HDMI port, one I2C, and
UART 0 (for debugging).
I can see the custom application exclusively
accessing the A-to-D, the second I2C, one SPI,
and both UART 1 and 2.
The mothercard would have a 5 volt regulator
(the cage power is 12v), the necessary level
converters (all of the backplane buss signals
switch between 5 volt and ground), buffers / voltage
dividers for the A-to-D lines, an Adafruit clock /
calendar chip, perhaps sensors for temperature,
humidity, barometric pressure (on an i2c buss)...
Plus a few other items... a card ejector tab, a DB9F
connector for the RS-232 debug port, front-facing
HDMI, USB host and client connectors, etc.
Now comes the zinger... the mothercard interfaces
with the backplane data buss and it needs to "look
and feel" like the existing CPU board (from the point
of view of the other cards in the cage).
The existing CPU board is self contained (CPU,
RAM, PROM, EEPROM), except for two data
strobes plus two ports of bytewide I/O. Things
are easier if you want to always send a byte or
always read a byte, but the bidirectional hardware
to get bytes in to and out of the custom applications
program might get tricky.
One port is bytewide output-only and the other is a
bytewide bi-directional port.
One nibble of the first port is used as a 4-bit board
select and the other nibble selects which data register
on that particular board is to be accessed.
Then a bytewide input / output port is used for the
actual data transfer, by way of a "write" strobe or a
"read" strobe that actually triggers the transfers of
the data byte.
The above can't be changed as we want the upgrade
path for over 100 of these systems to be a simple
case of having a non-techie walk up to the card cage,
power it down, swap the CPU card, plug in the new
RJ-45 cord, and power it back up.
I know we can use two of the BBB GPIO bits through
5 volt drivers / buffers for the read and write strobes
but how do I do the actual bytewide I/O ???
One possibility is bytewide I2C expander chips...
The Microchip MCP23008 or MCP23S08 looks
But before I go down that road I'd like to know if
there is a better one.
And I'd like to hear from anyone that has successfully
done bytewide I/O, or has any suggestions on 5 volt
level converters (unidirectional or bidirectional), or
on a better clock / calendar chip, or i2c buss sensors
for temperature, humidity and barometric pressure.
The collective knowledge and experience of this group
Thanks in advance.