Jump to content

    
Sign in to follow this  
ViKo

Алгоритм теста внешнего статического ОЗУ.

Recommended Posts

Так точно, можно взяться за ум и сотворить алгоритм. И что же, быть первопроходимцем? Мне думается, где-то это все уже придумано до нас.

Share this post


Link to post
Share on other sites
Так точно, можно взяться за ум и сотворить алгоритм. И что же, быть первопроходимцем? Мне думается, где-то это все уже придумано до нас.

Без сомнения. Когда-то возился с Синклерами, там в тестовом ПЗУ и был сделан тест памяти, который выводил на экран сообщения об ошибках в Адресе или в Данных...

 

Share this post


Link to post
Share on other sites

Вот, клюнул петух, пришлось вернуться к задаче. Делюсь соображениями.

Записываю последовательно по всей памяти данные - младшую часть адреса (16 битов из 18): 0, 1, 2 ... При записи тут же читаю. Это позволяет определить неисправность шины данных (ячейка памяти одна и та же). Или определить, что вообще нет записи или чтения. Затем делаю проход чтения по всей памяти, сравниваю с тем, что должно быть. Поскольку проверка шины данных уже пройдена, здесь ошибки могут быть вызваны только неисправностью шины адреса - не туда было записано, вот и читается не то. Алгоритмом конкретного определения неисправности с точностью до бита не занимался, пока на скорую руку достаточно такого грубого определения. Но, вижу, так можно и конкретно определять, что там со всеми цепями на плате или внутри микросхемы.

Share this post


Link to post
Share on other sites
1 час назад, ViKo сказал:

Записываю последовательно по всей памяти данные - младшую часть адреса (16 битов из 18): 0, 1, 2 ... При записи тут же читаю. Это позволяет определить неисправность шины данных (ячейка памяти одна и та же). Или определить, что вообще нет записи или чтения. Затем делаю проход чтения по всей памяти, сравниваю с тем, что должно быть. Поскольку проверка шины данных уже пройдена, здесь ошибки могут быть вызваны только неисправностью шины адреса - не туда было записано, вот и читается не то. Алгоритмом конкретного определения неисправности с точностью до бита не занимался, пока на скорую руку достаточно такого грубого определения. Но, вижу, так можно и конкретно определять, что там со всеми цепями на плате или внутри микросхемы.

1. Записываете ячейку данными и тут же читаете. Но ведь при этом могут быть кз между проводами и обрывы в шине. КЗ запишет данные в неправильную ячейку и оттуда же эти данные прочтет. Если будет КЗ с линией данных, то хоть как-то можно это поймать. А вот при обрыве будут играть роль только остаточные заряды на шине... И поймать это будет сложно...

Когда-то в Синклерах применяли код Хэмминга. В ячейку писали данные, которые дополняли Адрес+Часть данных. И по искаженным принятым данным можно было вычислить одиночную ошибку.

Share this post


Link to post
Share on other sites

делал такие тесты. много зависит от разводки/распиповки - что на что может залипнуть.

1) тест шины данных - при фиксированном адресе, пишем и читаем данные - перебираем её пины. бегущей единицы и нуля как пправило достаточно.

2) при исправных данных тестируем шину адреса. самый топорный вариант - последовтельно залить всё адресами ячеек, а считывать и сверять только ячейки с бегущей 1 и нулем адреса. это тормозной тест. можно его ускорить - заливать не всё. т.е при заливке можно учесь что читается не всё, а только бегущая 1/0 с её соседними битами. Но это такое усложнение, что на деле этот тест делил на 2 фазы:

а) проверка исправности - пишет по адресам бегущей 1/0 и сверяет.

затем делает такой же проход, но пишет инверсные данные.

Б) поиск неисправности - если не проканало а), то заливаем всё адресами.

впринципе и разрывы оно неплохо ловит, чтобы отлавливать убедительнее,  надо следить чтобы соседние записи/чтения были по различающимся, даже по инверсным состояниям.

Edited by AlexRayne

Share this post


Link to post
Share on other sites
1 час назад, iosifk сказал:

1. Записываете ячейку данными и тут же читаете. Но ведь при этом могут быть кз между проводами и обрывы в шине. КЗ запишет данные в неправильную ячейку и оттуда же эти данные прочтет. Если будет КЗ с линией данных, то хоть как-то можно это поймать. А вот при обрыве будут играть роль только остаточные заряды на шине... И поймать это будет сложно...

На первом этапе важно, чтобы принятые данные совпадали с записанными. С какой ячейкой работали - не важно. При обрыве данных я не прочитаю то, что записывал. Во всяком случае, не всегда.
А когда разберусь с данными, примусь за адреса.

41 минуту назад, AlexRayne сказал:

делал такие тесты. много зависит от разводки/распиповки - что на что может залипнуть.

1) тест шины данных - при фиксированном адресе, пишем и читаем данные - перебираем её пины. бегущей единицы и нуля как пправило достаточно.

2) при исправных данных тестируем шину адреса. самый топорный вариант - последовтельно залить всё адресами ячеек, а считывать и сверять только ячейки с бегущей 1 и нулем адреса. это тормозной тест. можно его ускорить - заливать не всё. т.е при заливке можно учесь что читается не всё, а только бегущая 1/0 с её соседними битами. Но это такое усложнение, что на деле этот тест делил на 2 фазы:

а) проверка исправности - пишет по адресам бегущей 1/0 и сверяет.

затем делает такой же проход, но пишет инверсные данные.

Б) поиск неисправности - если не проканало а), то заливаем всё адресами.

впринципе и разрывы оно неплохо ловит, чтобы отлавливать убедительнее,  надо следить чтобы соседние записи/чтения были по различающимся, даже по инверсным состояниям.

 

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

Share this post


Link to post
Share on other sites
1 час назад, ViKo сказал:

 При обрыве данных я не прочитаю то, что записывал. Во всяком случае, не всегда.

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

Share this post


Link to post
Share on other sites

По теме тестирования памяти:

https://habr.com/ru/post/484026/

Алгоритмы наверное можно подглядеть чтобы велосипед не изобретать.

Share this post


Link to post
Share on other sites
45 минут назад, demiurg_spb сказал:

По теме тестирования памяти:

https://habr.com/ru/post/484026/

Алгоритмы наверное можно подглядеть чтобы велосипед не изобретать.

Видимо, можно. Но в статье я их не нашел, а в исходниках копаться скучно. Я уже написал и встроил в своё ПО. Правда, потестировать не получилось, все недо-пере-пайки уже исправили. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this