|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
У меня есть NAND FLASH память которая организованна блоками и в каждом блоке 64 страницы. Память приходит с заводскими битыми блоками (bad blocks) а также битые блоки могут появиться в процессе работы. Правильно ли я сделал алгоритм поиска следующего хорошего блока? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.
я ничего не упустил? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 10:24 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
NFLASH_BadBlockGet() может вернуть NAND_FLASH_ERROR ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 10:30 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
Dima TNFLASH_BadBlockGet() может вернуть NAND_FLASH_ERROR в принципе я сделал статический масив, так что выход индекса за границы можно исключить. а кроме этого можно принять алгоритм в качестве рабочего? для симуляции я сделал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
получил good block 0 good block 1 good block 2 bad block 3 good block 4 good block 5 bad block 6 good block 7 good block 8 good block 9 bad block 10 good block 11 я правда не могу просимулирувать неудачное стирание блока. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 11:00 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
наверное даже так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
если вышли за while значит overflow - вернуть начальный блок. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 12:02 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
В целом нормально. Непонятно чем цикл for() не устроил? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:12 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
Dima TВ целом нормально. Непонятно чем цикл for() не устроил? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
а что лучше с for? с for выглядит более... аккуратно я бы сказал. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:28 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
jenya7Dima TВ целом нормально. Непонятно чем цикл for() не устроил? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
а что лучше с for? с for выглядит более... аккуратно я бы сказал. правда тут нет if (NFLASH_BadBlockGet(block) == NAND_FLASH_BAD_BLOCK) block++; а я хочу проверить - может текущий блок уже записан в таблице битых блоков - в таком случае я не хочу пытаться выполнить команду стирания а сразу перейти к следующему блоку. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:32 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
jenya7с for выглядит более... аккуратно я бы сказал. Этим и лучше. Код читабельнее, строк меньше. По производительности одинаково. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:33 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
jenya7правда тут нет if (NFLASH_BadBlockGet(block) == NAND_FLASH_BAD_BLOCK) block++; Смотри внимательнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:34 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
Dima Tjenya7с for выглядит более... аккуратно я бы сказал. Этим и лучше. Код читабельнее, строк меньше. По производительности одинаково. ааа. вижу. спасибо. как всегда круто :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:35 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
И если правильно понимаю, то после NFLASH_BlockErase() надо ждать только если он вернул NAND_FLASH_OK. Если так, то Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:39 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
Dima TИ если правильно понимаю, то после NFLASH_BlockErase() надо ждать только если он вернул NAND_FLASH_OK. Если так, то Код: plaintext 1. 2. 3. 4.
нет. время стирания 2-4 милисекунды. вот я и жду после команды стирания. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:47 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
немного модифицировал - таблицу битых блоков нужно сохранить в микроконтролере. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:57 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
Dima TИ если правильно понимаю, то после NFLASH_BlockErase() надо ждать только если он вернул NAND_FLASH_OK. Если так, то Код: plaintext 1. 2. 3. 4.
мда. механизм у меня был кривой. все работало почему то, но ожидание стирания было не там. поправил. как всегда снимаю шляпу, респект :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 15:24 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
Если правильно понял, у тебя в bad_blocks_flags[arr_index] битовые маски. Да, экономит память. А если сделать прозрачней: bad_blocks[] сделать 2(1)-направленным списком? И такой же список OK_blocks[]. Стал блок бэд - просто чикнул из второго списка и добавил в 1-й. Поиск готового бэд - просто поиск в 1-м списке. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 13:32 |
|
Алгоритм поиска битых блоков в памяти
|
|||
---|---|---|---|
#18+
exp98Если правильно понял, у тебя в bad_blocks_flags[arr_index] битовые маски. Да, экономит память. А если сделать прозрачней: bad_blocks[] сделать 2(1)-направленным списком? И такой же список OK_blocks[]. Стал блок бэд - просто чикнул из второго списка и добавил в 1-й. Поиск готового бэд - просто поиск в 1-м списке. не знаю насколько это оправданно. экономия по скорости незначительна. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2019, 20:07 |
|
|
start [/forum/topic.php?fid=16&msg=39806272&tid=1339954]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
137ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 246ms |
0 / 0 |