Como muchas otras personas, me han inspirado la serie de Ben Eater que lo guía a través de la construcción de una computadora de 8 bits en paneles de pan, y quería replicar su trabajo (y tal vez mejorar el diseño con algunas ideas propias en el futuro). Sin embargo, al hacer la lista de componentes que necesitaba comprar, descubrí que los chips de EEPROM son casi inalcanzables en cualquier lugar en estos días y, por lo tanto, me pregunté cómo resolver este problema.
Después de algunas investigaciones, descubrí que los chips flash SST39SF010 son muy similares al 28C16 EEPROM Chip Ben Eater usa, y con una serie de mejoras, como la velocidad de escritura/lectura, el tiempo de retención, el consumo de energía ... por supuesto, esto requiere un programador diferente al escrito por Ben Eater para su serie, beneater/eeprom-programmer , y encontré que encontré. slu4coderSST39SF010-FLASH-Programmer podría ser lo que necesitaba. Sin embargo, en mi opinión, fue escrito en un estilo muy diferente con respecto a la idea de enseñanza que estaba detrás del proyecto de Ben.
Así que decidí escribir mi propio programador que, aunque con seguridad menos optimizado que el de SLU4Coder, creo que es más adecuado para un principiante que quiere acercarse a la programación flash sin tener mucha experiencia en codificación. Por esta razón, intenté comentar el código y ser lo más claro posible en mi estilo. Mi proyecto también se basa en el Arduino Nano en combinación con dos chips 74HC595 al igual que los dos proyectos mencionados.
Podría extender este software para que sea compatible con los chips flash genéricos SST39SF0X0 en el futuro; Aunque si llegó aquí y necesita flashear chips de mayor capacidad, probablemente sea capaz de extender este proyecto por su cuenta. :)
En mi código, también incluí un mecanismo de verificación para la escritura de datos y las funciones de Chip Clear, que se pueden habilitar y configurar en el momento de la compilación.
El Macro WRITE_CHK se define de forma predeterminada como 0 , pero se puede cambiar a 1 para habilitar el cheque. En este caso, cada byte de datos escritos en la memoria se verifica automáticamente y el software aumentará un error si la lectura es diferente de los datos esperados. Para obtener más información, consulte la función writeMem() dentro del código.
El macro CLR_CHK se define de forma predeterminada como 0 , pero se puede cambiar a un número positivo para habilitar la verificación. En este caso, después del comando Clear Chip, el número asignado a la macro será el número de bytes aleatorios leídos del flash y verificado. Si alguno de estos bytes es diferente de 0xFF (valor predeterminado después de un chip Clare), el software aumentará un error. Hay otra macro, llamada CLR_CHK_MAX , que define la dirección más alta posible proveniente de la función aleatoria; Por defecto, se define como 131071 , que es (2^17) -1, el byte más alto direccionable en SST39SF010. Sin embargo, quería dar la posibilidad de configurar esta macro porque en algunos casos la memoria flash se usa solo para los pocos primeros bytes, y por lo tanto es útil verificar solo los bytes que se usaron en el ciclo de escritura anterior. Para obtener más información, consulte la función eraseAll() dentro del código.