|
Непонятная работа AT45DB161D |
|
|
|
Mar 19 2011, 10:09
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
В прошлом году тестировал м/с AT45DB161B (28 pin). Все работало нормально (то что мне было необходимо). Сейчас решил поставить эту м/с в один проект. Вместо DB161B поставил DB161D (8 pin). Согласно информации Atmel никаких изменений вносить не надо. Снизу вверх эта м/с полностью поддерживается. Программу полностью перенес с макета в этот проект. Но AT45 ведет себя странным образом. Записываю 528 байт, читаю тоже 528. А на RS232 получаю 528, 529, 792, 880 байт в зависимости от записываемого байта. Т.е. при записи в ту же страницу разных чисел получаю различную длину данных. Ну и информация в ячейках совершенно другая от записываемой. Программу еще раз проверил на макете - все OK. В Proteus'е тоже моделируется все нормально. В проекте предусмотрено 4 таких м/с. Запаял остальные - тоже самое. Кто что может посоветовать или кто-то уже встречался с чем-то подобным. У меня питание AT45 - 3,3V - 74HCT125 - ATMega128. Приложил файлы полученные при чтении. P.S. Хочу уточнить. В макете AT45 питается 5V. Я где-то здесь читал, что такое возможно. Под рукой не было 3V стабилизатора и я запитал от 5 V. Да, действительно все работало. Я отладил работу с этой м/с и занялся другими узлами на этой же макетке. Но вот сейчас, когда я попробовал вернуться к этим м/с на макете, оказалось что они не работоспособны. Одна из AT45 (их 2 шт ) повесила выход глухо на "0". Вторая выдавала всякий мусор. После замены м/с все снова зарабтало на макете. Так что, НЕ ЗАПИТЫВАЙТЕ AT45 5V, как кое-кто советует. Работайте по datasheet  Вот только-что попробовал прочитать р-р состояния. На макете (DB161B) - 0xAC, что соответствует документации У меня на плате (DB161D) - 0xF0 0xF3 на всех 4-х м/с Почему два байта?
Сообщение отредактировал IF_P - Mar 19 2011, 09:45
|
|
|
|
|
Mar 19 2011, 14:28
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(_Артём_ @ Mar 19 2011, 16:17)  Что-то у Вас в программе не так: непонятно как mega в режиме SPI-мастера может считывать на запрос статуса 2 байта, а не один. Так я же написал, что с другой м/с (AT45DB161B) эта же программа считывает один байт и он отвечает документации. А тут два байта, причем, ни один из них не подходит. Да и в Proteus'е эта же программа выводит один байт.  Вот выкладываю тестовый пример. Проект в IAR 4.30A, Proteus 7.5 SP3. У меня на плате LCD 4х20 и клавиатура 4х4. Поэтому в программе есть соответствующие модули и операторы. Все что касается этих программ, я сдвинул подальше (test_AT45.c) P.S. В файле "instruction.txt" порядок работы
Сообщение отредактировал IgorKossak - Mar 19 2011, 19:17
|
|
|
|
|
Mar 20 2011, 15:49
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(uriy @ Mar 19 2011, 22:42)  SPI это вам не I2C. Сколько байт вы просите столько микросхема вам и выдаст. Если вы даете клоки она выдает данные, нет клоков нет данных на ее выходе. Раз она вам два байта возвращает, значит вы два байта и просите. Да знаю я это. Выше я привел тестовый пример. Там можна увидеть, что я запрашиваю один байт (р-р статуса), а получаю 2. И эта же программа на другой плате, но с другой м/с (DB161B) работает нормально. Proteus тоже выдает один байт. Вот скриншот Proteus'а. Если в программе ошибка, то и здесь будет тоже.
Сообщение отредактировал IF_P - Mar 20 2011, 15:50
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 20 2011, 20:21
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(SysRq @ Mar 20 2011, 22:05)  Поставьте в виртуальном терминале бодовую скорость этак раза в два больше чем надо (ну или на МК меньше чем надо), и тоже будет ошибка  К чему бы это?
|
|
|
|
|
Mar 20 2011, 21:35
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(SysRq @ Mar 20 2011, 22:23)  К тому, что вместо одного байта станет два. Байт, посланный на 9600, превратится в два (или больше), если ожидать его как посланный на 57600. Проверьте работу RS-канала, вам же намекнули... Это мне объяснять не надо. Не первый год работаю с COM-портом. Для сомневающихся выкладываю скриншот настроек терминала. Настройки AVR можно увидеть в тестовом примере. Что касается разводки, то я перед подачей питания всегда делаю прозвонку. С этим там все в порядке. А что касается аппаратной части, то у меня тоже возникли сомнения. RS232-это единственный узел, который я не проверил на плате. Просто у меня никогда с этим не было проблем. Если нет ошибок в монтаже, то все всегда работало. Попробую глянуть осциллографом. Если нет, то заменю MAX232. На AVR пока не думаю. P.S. Правда, завтра уезжаю на пару дней в командировку. По приезду все это проверю.
Сообщение отредактировал IF_P - Mar 20 2011, 21:50
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 20 2011, 23:25
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(SysRq @ Mar 21 2011, 00:00)  Fuse bits не видать же ж, они в МК. Вот они. Цитата(SysRq @ Mar 21 2011, 00:00)  Fuse bits не видать же ж, они в МК. Я прошу извинить за неточность. Я привел картинку с Fuse, которые я обычно записываю в AVR. Но при чтении там было что-то другое (видимо, заводские установки). Я их не анализировал, т.к подумал, что это ошибка чтения. Просто записал еще раз то, что надо. И все заработало. Спасибо SysRq за подсказку про Fuse. С AVR я еще серьезно не работал. Поэтому всех тонкостей не знаю. Видимо Fuse=M103C был установлен, а я использовал как раз UART1. Больше, вроде нечему мешать. Еще раз спасибо. Пора баиньки. Есть еще вопрос по работе с AT45. Но это, возможно, программная ошибка, т.к. проявляется одинаково в обоих платах. После приезда опишу более детально. Буду благодарен, если сможете помочь.
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 20 2011, 23:50
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(IF_P @ Mar 21 2011, 02:25)  Видимо Fuse=M103C был установлен, а я использовал как раз UART1. Больше, вроде нечему мешать. Установка M103C меняет очень многое, сразу бы заметили. А вот тактирование от 1МГц не так видно Цитата(IF_P @ Mar 21 2011, 02:25)  После приезда опишу более детально. Пишите, сообразим.
|
|
|
|
|
Mar 24 2011, 17:15
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(SysRq @ Mar 21 2011, 01:50)  Пишите, сообразим. Вот приехал из командировки и возвращаюсь к своей теме. Вопрос в следующем. Чтение из страницы AT45 я делаю с использованием прерывания RS232. Там все нормально. А вот запись-чтение буфера я попробовал сделать по опросу флага. После включения питания и инициализации SPI (у меня в тестовой программе "*" "3") я выполняю запись-чтение буфера ("Shift" "1"). Получаю 528 байт. (см. ekr_norm). Если еще раз послать эту же команду, то получаю 31 байт (см. ekr_1). И так до тех пока не выключу питание. P.S. Вот сейчас допаял кнопку RESET. Она у меня заведена и на CPU и на AT45. После RESET тоже самое. Первый раз нормально, а потом 31 байт.
Сообщение отредактировал IF_P - Mar 24 2011, 17:38
Эскизы прикрепленных изображений
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|