Como muitas outras pessoas, fui inspirado pela série de Ben Eater, que o leva a construir um computador de 8 bits em placas de pão, e queria replicar seu trabalho (e talvez melhorar o design com algumas idéias próprias no futuro). No entanto, ao fazer a lista de componentes que eu precisava comprar, descobri que os chips da EEPROM são quase inatingíveis em qualquer lugar hoje em dia e, portanto, me perguntei como resolver esse problema.
After some researches, I found out that the SST39SF010 flash chips are very similar to the 28C16 EEPROM chip Ben Eater uses, and with also a number of improvements, such as writing/reading speed, retention time, power consumption... Of course, however, this calls for a different programmer than the one written by Ben Eater for his series, beneater/eeprom-programmer , and I found slu4coderSST39SF010-FLASH-Programmer PODE ser o que eu precisava. No entanto, na minha opinião, foi escrito em um estilo muito diferente em relação à ideia de ensino que estava por trás do projeto de Ben.
Por isso, decidi escrever meu próprio programador que, embora com certeza menos otimizado que o SLU4Coder, acho que é mais adequado para um iniciante que deseja abordar a programação flash sem ter muita experiência de codificação. Por esse motivo, tentei comentar o código e ficar o mais claro possível em meu estilo. Meu projeto também é baseado no Arduino Nano em combinação com dois chips 74HC595, assim como os dois projetos mencionados acima.
Posso estender este software para ser compatível com chips flash genéricos SST39SF0X0 no futuro; Embora, se você chegar aqui e precisar piscar chips de maior capacidade, provavelmente será capaz de estender este projeto por conta própria. :)
No meu código, também incluí um mecanismo de verificação para as funções de gravação de dados e chip limpo, que podem ser ativados e configurados no momento da compilação.
O macro WRITE_CHK é definido por padrão como 0 , mas pode ser alterado para 1 para ativar a verificação. Nesse caso, todos os bytes de dados gravados na memória são verificados automaticamente e o software levantará um erro se o readback for diferente dos dados esperados. Para obter mais informações, consulte a função writeMem() dentro do código.
A macro CLR_CHK é definida por padrão como 0 , mas pode ser alterada para um número positivo para ativar a verificação. Nesse caso, após o comando Clear Chip, o número atribuído à macro será o número de bytes aleatórios lidos no flash e verificados. Se qualquer um desses bytes for diferente de 0xFF (valor padrão após um chip claro), o software levantará um erro. Há outra macro, chamada CLR_CHK_MAX , que define o endereço mais alto possível proveniente da função aleatória; Por padrão, é definido como 131071 , que é (2^17) -1, o byte mais alto endereçável no SST39SF010. No entanto, eu queria dar a possibilidade de configurar essa macro, porque em alguns casos a memória flash é usada apenas para os poucos primeiros bytes e, portanto, é útil verificar apenas os bytes que foram usados no ciclo de gravação anterior. Para obter mais informações, consulte a função eraseAll() dentro do código.