Ringbuffers en super arrays

Nou het heeft even geduurd, maar de Proof of Concept (POC) werkt!!!!!
De hele software is herschreven omdat ik dacht dat daar toch een probleem in zat. Waar komt het op nier:
Ik gebruik nu SRAM ic's van 128KByte via de SPI bus. Echter ik wil hebben dat ik voor elke chip een aparte IO lijn nodig heb voor de Chip Select. Dus maak ik gebruik van een IO-Expander (8 bits). Ook via de SPI bus waarbij de /CS van de geheugen ic's via de IO Expander lopen.
Dus: Arduino selecteert chip via de IO Expander en heb ik in feite 8 lijnen over dezelfde /CS pin op deArduino.
Tot zover gaat het goed.
Het lezen en schrijven van de SRAM ic's gebeurt in zgn. Sequential mode. Dat betekent dat de memory counter van het ic automatisch een plek ophoogt als er gelezen wordt of geschreven wordt. Echter kom je voorbij de laatste locatie van de chip wordt deze counter automatisch op 0000 gezet.
Nog steeds een problemen.
Totdat je een deel van de data in de ene chip krijgt en de rest in de volgende. Dat gaat prima, maar in de vorige ic (waarbij de counter op 0000 werd gezet werden nog eens 3 extra adressen overschreven met rommel. Tenminste dat dacht ik.

De oorzaak:
Zolang een SRAM IC in Sequential mode zit en de /CS lijn is laag blijft deze gewoon de data doorschrijven.
Als ik een andere chip wil hebben trek ik de /CSPin van de expander laag en schrijf ik de nieuwe data naar de expander (3 bytes). Die schakelt de oude chip uit (/CS wordt hoog) en kiest de nieuwe.
Maar terwijl ik dus die 3 bytes naar die expander schrijf zit die SRAM chip nog gewoon door te luisteren.

De oplossing was vrij eenvoudig. De /CS lijn naar de expander aftappen en inverteren (gewoon met een BC547 in verzadiging) en dat signaal 'OR'en met de uitgang van de expander. Die uitgang gaat daan naar de RAMs.

Nu de pcb ontwerpen en laten maken. Hij loopt als een tierelier. 1K wegschrijven en lezen duurt ongeveer 8ms. Dus stel je maakt een RTOS dan kun je elke taak zijn eigen stuk werkgeheugen geven. Gewoon de oude wegschrijven en de nieuwe binnen halen.

Ook ga ik nog kijken of ik op deze manier meerdere SD kaarten kan koppelen aan een Arduino. Mogelijkheden te over.

Het huidige ontwerp kan straks 4 x 1Mb modules aan op een /CS pin van de Arduino.

Foto van het prototype