Программный алгоритм для тестирования sram на микроконтроллере на высокой скорости - PullRequest
2 голосов
/ 24 сентября 2019

У меня есть микроконтроллер 8051 с подключенным к нему внешним ОЗУ, и я хочу протестировать ОЗУ, чтобы убедиться, что он может правильно хранить и загружать данные (что, на мой взгляд, на данный момент не выполняется).

В моей программеУ меня есть это, где значение 80h записывается в 1-й байт памяти, и значение увеличивается по мере увеличения каждого адреса памяти, но значение обнуляется каждые 256 байтов, начиная со 128-го байта.

Это мойфункция:

;extended memory test. C=1=memory fault
memtest:
  mov DPTR,#0h
  mov R7,#80h
  ;fill with incrementing values
  post1:
    mov A,R7
    movx @DPTR,A
    inc R7
    inc DPTR
    mov A,DPH
    orl A,DPL
  jnz post1
  ;Test for incrementing values
  mov DPTR,#0h
  mov R7,#80h
  post2:
    clr C
    movx A,@DPTR
    subb A,R7
    setb C
    jnz isbadram
    movx @DPTR,A
    mov A,R7
    inc R7
    inc DPTR
    mov A,DPH
    orl A,DPL
    clr C
  jnz post2
  isbadram:
ret

Но я думаю, что мне нужно сделать более строгий тест.Я думаю, что мне нужно многократно писать и читать разные значения в одних и тех же местах, но я не знаю, сколько раз проверять местоположение, и я не знаю лучших значений, которые можно попробовать.

Япросто боюсь, что если я проверю местоположение слишком много раз, то моя программа потратит вечное тестирование памяти, прежде чем начнет делать что-то полезное.

К счастью, у меня есть несколько микроконтроллеров, которые могут выполнять команды со скоростью около 40 нс каждый.У меня есть другие из того же семейства, которые выполняют инструкции примерно по 0,5 мкс каждый.

Итак, каков наилучший способ тестирования оперативной памяти, уже установленной в системе, не затрачивая слишком много времени на тестирование?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Количество повторений теста ОЗУ зависит от того, что вы хотите проверить, и когда вы проверяете в жизненном цикле вашего продукта.

Если вы проверяете вывод производственной линии, вы можете повторить тест «навсегда», чтобы проверить при других условиях окружающей среды, таких как температура.Но для большинства случаев достаточно одного прогона.

Если вы хотите проверить одну конкретную плату , вы также можете проверить «навсегда», пока не выключите.Это также полезно для проверки проводки с помощью осциллографа.

Если вы хотите проверить в поле во время работы прикладного программного обеспечения, вы можете использовать высокоприоритетное прерывание по таймеру для его проверки.байт за раз.Это работает "навсегда", конечно, тоже.И убедитесь, что ваш тест восстанавливает старое значение.

Но сначала вы должны решить, какие ошибки вы ищете:

  1. Аппаратные ошибки, такие как обрыв или короткое замыкание вэлектропроводка.Это вполне возможно.
  2. Аппаратные ошибки, такие как частично неисправная RAM.У меня никогда не было ничего из этого.ОЗУ, которые я тестировал, работало отлично или не работало вообще, оставив в стороне ошибки, такие как неправильные циклы доступа.

Для типа first я бы протестировал так:

  1. Записать и проверить все 8 шаблонов, используя только один 1-бит в любой адрес (данные 0x01 ... 0x80)
  2. Записать и проверить все 8 шаблонов, используя только один 0-бит в любой адрес (данные 0xFE.... 0x7F)
  3. Запись различных шаблонов (например, увеличивающихся чисел) в адрес со всеми 0-разрядными и всеми (до 16) адресами только с одним 1-разрядным (адреса 0x0000, 0x0001 ... 0x8000)
  4. Проверка шаблонов по адресам
  5. Запись различных шаблонов (например, инкрементных чисел) в адрес со всеми 1-битными и всеми (до 16) адресами только с одним 0-битным (адреса 0xFFFF, 0xFFFE ... 0x7FFF)
  6. Проверьте шаблоны по адресам

Если проверка не удалась, вы можете прервать цикл проверки и сообщить об ошибке.Проверенный бит данных или адресный бит дают некоторую подсказку о фактической ошибке.Если вам нравится проверять проводку, просто сообщите и продолжайте.

Это действительно быстро и выявляет много постоянных ошибок.Для кратковременных ошибок вам нужно повторить тест.

Для секунд вам нужны более сложные тесты.Некоторые из них зависят от реальной физической организации в ОЗУ, касающейся строк и столбцов битов.Возможно, вы захотите поискать в Интернете «заводские тесты ОЗУ», такие как «скачущие шаблоны» («galpat»).

К сожалению, как вы заметили, эти тесты занимают много времени.Но я боюсь, что пути назад нет.

Очень простой тест запишет последовательность псевдослучайных чисел в ОЗУ, а затем проверит последовательность.Убедитесь, что ваш генератор чисел выдает период, по крайней мере, равный размеру ОЗУ, например, используя достаточно широкое число.Однако вы будете использовать только 8 младших битов.Вы можете использовать LFSR .

0 голосов
/ 24 сентября 2019

Доступно много тестов оперативной памяти.Их нужно было использовать для систем безопасности.Просто спросите Google.
Первый документ здесь или здесь

...