spare никак не отличается от обычной области. Можно сразу писать все в page (2048+64), а можно и по частям, а можно установить адрес на 2048 и писать только в spare. Также и читать: все, только spare или часть spare.
Для выделения инвалидного блока, предварительно (или уже после всей операции) чтением анализуйте первый байт spare, если плохой - то на следущий блок.
ECC считается (и выбирается тип кода) самим пользователем, NAND только как тупой носитель (2048+64) байт с возможностью битовых ошибок после длительного использования (У себя битовых ошибок пока не заметил, а вот битых блоков несколько штук, но это только начало использования). Наверно, когда последовательно пишите в NAND, то и считайте ECC, и после 2048 байта, пишите байт FF(как статус хорощего блока), затем подсчитанный ECC. А вот как потом при чтении исправить плохой бит - для ПЛИС наверно очень много геморроя.
R/B в нуле максимум 3ms при стирании, и при записи или чтении гораздо меньше. Залипаний не замечал, правда у меня там таймаут на превышение этого предела.
Думаю что для ПЛИС, использование ECC уже слишком, много ресурсов отъест, да и аппарат состояний не простой, может проще, если алгоритм использования в устройстве позволяет, при ошибке записи пометить страницу как стертую(программно, например байт 2 в spare) и перейти к следующей. Потом при чтении предварительно анализировать этот байт, и сделать такой же переход. Будет проще, при тойже надежности, правда емкость "израсходуется" быстрее.
|