Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR32: Flash-память AT49BV6416 на STK1000
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
Busel Roman
Программирую AP7000 в составе STK1000 в среде AVR32 Studio. Программа пишется во внешнюю Flash-память AT49BV6416, находящуюся на STK1000.
Память программировалась нормально, пока не запустил команду "Erase" из меню свойств target-a. Во время выполнения этой операции пропало напряжение в сети 220 В. Когда появилось, снова запустил "Erase". Через некоторое время выдает ошибку

Flash chip erase failed.
Target execution timed out.
Process failed with code 3. See the process console for details.


Считывание с помощью команды "Read" меню свойств target-a (JTAGICE mkII) всех 8 Mb завершается успешно.
Попытка записи во Flash любого кода вызывает ошибку

Filed to erase flash sectors from 0x00000000 to 0x0000ffff.
Target execution timed out.


Пробовал стирать/писать через командную строку в Cygwin - тот же результат.
В datasheet на AT49BV6416 написано, что она имеет 128-Bit Protection Register. Объясните популярно, что это такое и как с ним работать.

P.S. Пора менять Flash, или еще можно ее оживить???
Master
Попробуйте выполнить в AVR32Studio команду Chip erase.
Busel Roman
Пробовал.
Как я понимаю, эта команда стирает ОЗУ на AP7000.
Подозрение на то, что во время отключения питания был записан и заблокирован 128-Bit Protection Register, который теперь не позволяет писать/стирать память
Master
Версия прошивки JTAG ICE II какая? Её можно увидеть в окне консоли AVR32Studio при подключении отладчика.
singlskv
Пин VPP на флешь проверяли ? какой там уровень?
Busel Roman
1) Версия прошивки JTAGICE mkII при выполнении команды "Erase" была 4.33. Пробовал обновлять до версии 4.38. В обоих случаях - та же ошибка.

2) Вывод VPP соединен с WP, VCC, VCCQ и все это подключено к +3.3 V. Напряжение в норме.

Как на счет 128-Bit Protection Register? Облазил весь сайт Atmel, но так ничего вразумительного и не нашел, только везде повторяется примерно одно и то же:

The 128-bit Protection Register can be used for security purposes in system design. The protection register is divided into two 64-bit blocks designated as block A and block B. The data in block A is non-changeable and is programmed at the factory with a random number. The data in block B can be programmed to a random number by the user and then can be locked out such that data in the block cannot be reprogrammed. With this system, a high degree of security in preventing the programming of a device with another device's security code is achieved.
Master
Цитата(Busel Roman @ Sep 11 2007, 15:44) *
2) Вывод VPP соединен с WP, VCC, VCCQ и все это подключено к +3.3 V. Напряжение в норме.
...
Как на счет 128-Bit Protection Register?

Похоже, что залочились сектора. Но, по идее, программатор должен их перед стиранием разлочить.
Ещё раз, что выдаёт команда avr32program chiperase?
Busel Roman
Цитата(Master @ Sep 11 2007, 14:55) *
Похоже, что залочились сектора. Но, по идее, программатор должен их перед стиранием разлочить.

Сектора в AT49BV6416 (современная версия AT49BV642D) залочены при включении питания (At power-up and reset, all sectors have their Softlock protection mode enabled. - из Datasheet).
Программирование Flash должно выполняться в последовательности:
1. Разлочить сектор
2. Стереть сектор (либо весь чип сразу)
3. Запрограммировать в сектор новые значения, причем (из Datasheet) ...Please note that a “0” cannot be programmed back to a “1”; only erase operations can convert “0”s to “1”s.

Сейчас при выполнении команды "Erase" выводит на экран следующее:
Connected to JTAGICE mkII version 4.38, 4.38 at USB:00A00000342C.
%19.2 Unlocking flash
%38.3 Unlocking flash
%57.5 Unlocking flash
%76.6 Unlocking flash
%95.8 Unlocking flash
%100.0 Unlocking flash
%100.0 Unlocking flash
%100.0 Unlocking flash
Failed to erase flash sectors from 0x00000000 to 0x00009fff.
Target execution timed out.

Цитата
Ещё раз, что выдаёт команда avr32program chiperase?

Напоминаю, я работаю с AP7000, в нем нет внутренней Flash. Результат команды следующий:
Connected to JTAGICE mkII version 4.38, 4.38 at USB.
JTAG chip erase performed
Master
Цитата(Busel Roman @ Sep 11 2007, 17:50) *
Сейчас при выполнении команды "Erase" выводит на экран следующее:
Connected to JTAGICE mkII version 4.38, 4.38 at USB:00A00000342C.
%19.2 Unlocking flash
%38.3 Unlocking flash
%57.5 Unlocking flash
%76.6 Unlocking flash
%95.8 Unlocking flash
%100.0 Unlocking flash
%100.0 Unlocking flash
%100.0 Unlocking flash
Failed to erase flash sectors from 0x00000000 to 0x00009fff.
Target execution timed out.
Питание во время всего цикла точно присутствует и не изменяется? Питаемся, надеюсь, не от USB? Хотя и его должно хватить...
Цитата
Напоминаю, я работаю с AP7000, в нем нет внутренней Flash. Результат команды следующий:
Connected to JTAGICE mkII version 4.38, 4.38 at USB.
JTAG chip erase performed
Я в курсе насчёт отсутствия внутренней flash-памяти. Думал, что по этой команде выдаётся последовательность chiperase для стирания всей флеши (п.3.5.1 AT49BV6416(T).pdf).

А что читается из флеши?? И, кстати, при последовательных чтениях читается одно и то же?

P.S. Млин, реальных идей пока нет. Кроме выпаивания и перепрограммирования другим программатором. Спалиться - она вряд ли спалилась, а вот хитро залочиться...
Busel Roman
Flash стоит на плате STK1000, которая имеет свой мощный питатель. JTAGICE питается от USB.
Из памяти читается каждый раз одно и то же, все 8 Mb.

Картина считывания:
в начале памяти записаны все нули (000000000...),
затем некоторое время чередуются группы нулей и едениц (FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFF00000000000000...),
затем сплошные единицы (FFFFFFFFFFFFF...).
Начиная с середины (с адреса 0х00400000) сохранилась картинка в формате BMP, которую я раньше загрузил, когда еще изучал LCD Controller. Картинка считывается один к одному та, которая была записана.
После картинки и до конца снова сплошные единицы (FFFFFFFFFFFFFFFFFF...).

Разобраться бы с 128-Bit Protection Register...

P.S. AT49BV642D уже заказали, будет через 4 недели (В России нигде нет). Придется, наверное вырезать старую и паять новую Flash.
singlskv
Попробуйте стереть из командной строки какой-нибудь сектор не из начала флеш
Цитата(Busel Roman @ Sep 11 2007, 18:53) *
Разобраться бы с 128-Bit Protection Register...
Наскока я ничего не понимаю, это не имеет отношения к работе с основной
флеш, это такое место где вы можете записать раз и навсегда свой ключ для
использования в security приложениях.
Первые 64бит из 128 это серийный номер микросхеммы
Остальные 64бит это пользовательская область, можете перезаписывать ее сколько
хотите пока не дадите команду Lock, после этого поменять эти 64бит нельзя
vesago
Шальная идея - какие-то проблемы чисто на железном уровне. Вообще подобная картина при считвании может быть при соплях на адресных ногах памяти. Возможно действительно какие ноги подгорели. Посмотрите как сигналы на управляющих ногах типа чтения, записи, сброса.
Busel Roman
Цитата
Попробуйте стереть из командной строки какой-нибудь сектор не из начала флеш
Подскажите, как должна выглядеть эта команда.
Пробовал с помощью дополнительного AVR через разъем PCI (на плате STK1000) подавать команды прямо во Flash на стирание сектора/чипа, но ничего не вышло.
Цитата
...это не имеет отношения к работе с основной
флеш, это такое место где вы можете записать раз и навсегда свой ключ для
использования в security приложениях...
Тоже склоняюсь к этой мысли, но хотелось бы, чтобы Atmel такие вещи подробнее описывала.

Цитата(vesago @ Sep 12 2007, 08:30) *
Шальная идея - какие-то проблемы чисто на железном уровне. Вообще подобная картина при считвании может быть при соплях на адресных ногах памяти. Возможно действительно какие ноги подгорели. Посмотрите как сигналы на управляющих ногах типа чтения, записи, сброса.

Да, в первую очередь посмотрел управляющие сигналы - все ОК. Даже свои собственные сформировал - не помогло.
Проблема возникла именно после попытки выполнить команду "Erase". Может она в AVR32Studio некорректно написана.
Master
Цитата(Busel Roman @ Sep 11 2007, 18:53) *
Flash стоит на плате STK1000, которая имеет свой мощный питатель. JTAGICE питается от USB.
Возможно, что в Atmel перестаховались, поставив разъёмы питания на JTAGICEII и STK1000. Лично я на всякий случай запитавыю их от одного и того же источника 12В.
Цитата
Из памяти читается каждый раз одно и то же, все 8 Mb.

Картина считывания:
в начале памяти записаны все нули (000000000...),
затем некоторое время чередуются группы нулей и едениц (FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFF00000000000000...),
затем сплошные единицы (FFFFFFFFFFFFF...).
Начиная с середины (с адреса 0х00400000) сохранилась картинка в формате BMP, которую я раньше загрузил, когда еще изучал LCD Controller. Картинка считывается один к одному та, которая была записана.
После картинки и до конца снова сплошные единицы (FFFFFFFFFFFFFFFFFF...).
Да, похоже, что начало флеши было стёрто(записано) некорректно.
Цитата
Цитата
Попробуйте стереть из командной строки какой-нибудь сектор не из начала флеш
Подскажите, как должна выглядеть эта команда.
Пробовал с помощью дополнительного AVR через разъем PCI (на плате STK1000) подавать команды прямо во Flash на стирание сектора/чипа, но ничего не вышло.
А вы попробуйте не только стереть, но и записать, и именно вближе к концу какую-нибудь часть флеши - это можно даже из оболочки AVR32Studio сделать.
Кстати, надеюсь, перед стиранием сектора с помощью доп.AVR предварительно подавали команду Sector Unlock? Ещё в списке команд есть Program Suspend/Resume, Program ID Entry/Exit... Возможно флешь при программировании вошла в какой-нибудь из режимов защиты.
Цитата
Разобраться бы с 128-Bit Protection Register...
Этот регистр скорее всего не имеет отношения к программированию флешь и нужен только для идентификации. Хотя согласен, в Atmel действительно могли бы и поподробнее описать его назначение, кроме как "...can be used for security purposes in system design".
Цитата
P.S. AT49BV642D уже заказали, будет через 4 недели (В России нигде нет). Придется, наверное вырезать старую и паять новую Flash.
Если верить складу ЭФО, то есть.
IMHO нестоит всё-таки вырезать - лучше выпаять. Китайских станций с феном, не знаю, как у вас в Беларуси, но у нас - навалом. Стоят "копейки". При этом возможно будет воткнуть её во внешний программатор и попробовать перепрограммировать с использованием высокого напряжения на ноге Vpp.
А вообще, идею воткнуть в PCI платку с AVR можно развить - можно добавить туда новую микросхему флеши (а то и две или даже четыре), подняв на установленной на STK1000 только ногу ~CS.
Заодно со временем могут появиться идеи, как оживить старую флешку.
singlskv
Цитата(Busel Roman @ Sep 12 2007, 10:54) *
Подскажите, как должна выглядеть эта команда.
Да, насчет стирания любого сектора это я просмотрел,
нету такой команды у avr32program sad.gif ,
НО, вы можете записать по любому адресу любой файл(например из одних 0xFF smile.gif )
указав при этом что перед записью нужно стирать сектора по адресу записи
типа так:
avr32program -v3 program -Fbin -O0x20000 -v -e -fcfi@0 filename.bin
Busel Roman
Цитата
А вы попробуйте не только стереть, но и записать, и именно вближе к концу какую-нибудь часть флеши - это можно даже из оболочки AVR32Studio сделать.
Из AVR32Studio пробовал писать, ошибку ту же выводит, только диапазон адресов соответствующий (например, Failed to erase flash sectors from 0x00400000 to 0x0040ffff.).
Цитата
Кстати, надеюсь, перед стиранием сектора с помощью доп.AVR предварительно подавали команду Sector Unlock?
Конечно, Datasheet изучил вдоль и поперек, уже почти наизусть знаю. Перед тем, как на форум написал, неделю вдвоем с напарником отмучились.
Цитата
Ещё в списке команд есть Program Suspend/Resume, Program ID Entry/Exit... Возможно флешь при программировании вошла в какой-нибудь из режимов защиты.
При выключении/включении питания Flash, все эти режимы сбрасываются, память переходит в режим Read: п.3.1 "The device powers on in the read mode..."
Цитата
Если верить складу ... ЭФО, то есть.
Звонил туда - срок поставки 3-4 недели, стоит 5,53 у.е.
Цитата
А вообще, идею воткнуть в PCI платку с AVR можно развить - можно добавить туда новую микросхему флеши (а то и две или даже четыре)...
Все было бы хорошо, если бы на этот самый PCI вывели A16...A21 от этой Flash.

Цитата(singlskv @ Sep 12 2007, 11:11) *
avr32program -v3 program -Fbin -O0x20000 -v -e -fcfi@0 filename.bin
Попробовал. Начальный адрес менял - по всему адресному пространству. Размер файла менял. Содержимое файла менял. Ошибка та же:
Failed to erase flash sectors from 0x... to 0x...
Target execution timed out.

Если можно, дайте пожалуйста ссылочку, где можно подробно почитать про команды avr32program, расшифровку всех возможных префиксов.
Master
Цитата(Busel Roman @ Sep 12 2007, 14:02) *
Из AVR32Studio пробовал писать, ошибку ту же выводит, только диапазон адресов соответствующий (например, Failed to erase flash sectors from 0x00400000 to 0x0040ffff.).
Конечно, Datasheet изучил вдоль и поперек, уже почти наизусть знаю. Перед тем, как на форум написал, неделю вдвоем с напарником отмучились.
Ну раз вдвоём, тогда я пас laughing.gif
Цитата
Все было бы хорошо, если бы на этот самый PCI вывели A16...A21 от этой Flash.
Вот я сейчас тупо смотрю на лист 2 из 18 - Top Level 2 (Document Number T0241, Rev. B1). Если я ничего не путаю, PCI - это тот самый разъём, и на него выведена вся внешняя шина, в том числе и адреса 0..25 (EBI_A[0:25]).
Busel Roman
Цитата(Master @ Sep 12 2007, 12:18) *
... PCI - это тот самый разъём, и на него выведена вся внешняя шина, в том числе и адреса 0..25 (EBI_A[0:25]).
А теперь внимательно отыщите линии EBI_A[16...21, 23, 24].
singlskv
Цитата(Busel Roman @ Sep 12 2007, 14:13) *
Если можно, дайте пожалуйста ссылочку, где можно подробно почитать про команды avr32program, расшифровку всех возможных префиксов.
Дык,
Код
>avr32program -h                        <- список опций
>avr32program help commands    <- список команд
>avr32program help CMD             <- сисок опций команды CMD
Busel Roman
To 'singlskv'
Точно, благодарю! Но хотелось бы все это иметь в отдельном файле, чтобы распечатать.
Master
Цитата(Busel Roman @ Sep 12 2007, 14:24) *
А теперь внимательно отыщите линии EBI_A[16...21, 23, 24].

Строго говоря, A16 и A17 присутствуют в виде EBI_B0 и EBI_B1, а вот остальных похоже нет sad.gif Вот засада! crying.gif
Busel Roman
Цитата
Строго говоря, A16 и A17 присутствуют в виде EBI_B0 и EBI_B1
Что-то я Вас не понимаю. EBI_B0 и EBI_B1 используются вроде только для управления SDRAM и явно не соединены с линиями EBI_A16 и EBI_A17.
singlskv
Цитата(Busel Roman @ Sep 12 2007, 16:51) *
To 'singlskv'
Точно, благодарю! Но хотелось бы все это иметь в отдельном файле, чтобы распечатать.
Да вобщем то, не за что.
Ну а в один файл скинуть просто:
>avr32program -h >avr32prog.txt
>avr32program help commands >>avr32prog.txt
>avr32program help program >>avr32prog.txt
>avr32program help verify >>avr32prog.txt
ну и так далее для всех комад

З.Ы. На Вашем месте я бы поступил след образом:
1. проверил что при помощи avr32program можно записать данные в SRAM
2. Если с 1 все ок, написал бы маленькую прогу для стирания флеш которая
запускается из SRAM.
3. собственно записать ее в SRAM и запустить.
4. индикацию работы проги светодиодами

З.З.Ы. А вы кстати перед всеми манипуляциями с флеш не пробовали дать команду halt ?
ИМХО, это вобще первое что нужно попробовать!!!
Busel Roman
Цитата
На Вашем месте я бы поступил след образом:
1. проверил что при помощи avr32program можно записать данные в SRAM
2. Если с 1 все ок, написал бы маленькую прогу для стирания флеш которая
запускается из SRAM.
3. собственно записать ее в SRAM и запустить.
4. индикацию работы проги светодиодами
Идея хорошая, буду пробовать, а то может и SRAM дохлая.
Цитата
А вы кстати перед всеми манипуляциями с флеш не пробовали дать команду halt ?
Пробовал.
singlskv
Цитата(Busel Roman @ Sep 12 2007, 18:04) *
Идея хорошая, буду пробовать, а то может и SRAM дохлая.
SRAM это та которая внутри MCU, она дохлой быть не может! (маловероятно)
просто по пункту 1 вы сможете проверить что у Вас работает вся цепочка общения
MKII - CPU.
А SDRAM еще инитить нужно.
Кстати, еще один тестик, пишите маленькую прогу которая инитит
SDRAM, шьете ее в SRAM и запускаете, далее, с помощью avr32program пытаетесь
прошить чего-нить в SDRAM.
Этим Вы протестируете всю работу EBI.
Удачи.

P.S. Раскажите о результатах

P.P.S Если у Вас есть ByteBlaster то можно просто попробовать шить им.
Busel Roman
Думал про внешнюю SDRAM, по ошибке написал SRAM.
Не совсем понимаю,
1) как нужно инициализировать SDRAM?
2) как можно прошить SDRAM через avr32program?

В IAR в режиме DEBUG запустил программку из стандвртных примеров для STK1000. Бегущий огонь "бежит" нормально.

P.S. ByteBlaster не имею.
Master
Цитата(Busel Roman @ Sep 12 2007, 17:54) *
Что-то я Вас не понимаю. EBI_B0 и EBI_B1 используются вроде только для управления SDRAM и явно не соединены с линиями EBI_A16 и EBI_A17.
Данные линии, судя по всему, разделяются контроллером. Посмотрите описание на процессор, глава 16, рисунок 16-1: вверху справа будут ноги A16/BA0 и A17/BA1. Потом посмотрите схему Dautherboard AT32STK1002: стр.4, слева внизу, контакты разъёма J2A 187, 188. Можете просто мультиметр взять и прозвонить ноги на флешке и контакты разъёма PCI-like.
Но всё это ведь - лишь припарки. Имея 18 адресных линий можно адресовать всего 256кБайт. Если очень нужна будет вся адресная шина, наверное придётся остальные отсутствующие линии тянуть проводом.
singlskv
Цитата(Busel Roman @ Sep 13 2007, 11:32) *
Думал про внешнюю SDRAM, по ошибке написал SRAM.
Не совсем понимаю,
1) как нужно инициализировать SDRAM?
Aplication Note AVR32102
Цитата
2) как можно прошить SDRAM через avr32program?
точно так же как и в любую другую, просто запись по нужным адресам
Цитата
В IAR в режиме DEBUG запустил программку из стандвртных примеров для STK1000. Бегущий огонь "бежит" нормально.
Значит IAR за вас все уже сделал smile.gif
По программированию/стиранию флеш есть пример в BSP, называется flash-upgrade
Busel Roman
Цитата
Можете просто мультиметр взять и прозвонить ноги на флешке и контакты разъёма PCI-like.
Действительно, если в STK1000 вставлена плата STK1002, то данные адресные линии соединяются между собой именно через STK1002.
Busel Roman
Цитата(singlskv @ Sep 13 2007, 11:41) *
По программированию/стиранию флеш есть пример в BSP, называется flash-upgrade

Если можно, поподробнее, как запустить данный "пример" без оболочки Линукса. Мне кажется, что это не совсем пример - это больше похоже на патч функций работы с Flash под Линуксом.

P.S. У Вас есть в наличии комплект STK1000?
singlskv
[quote name='Busel Roman' date='Sep 20 2007, 17:46' post='296902']
Если можно, поподробнее, как запустить данный "пример" без оболочки Линукса. Мне кажется, что это не совсем пример - это больше похоже на патч функций работы с Flash под Линуксом.
[quote]Нет, это совсем не Linux прога.
Это апгрейт u-boot из u-boot.
Просто эта прога грузится например с SDCard по адресу 0x1000000 и там запускается,
образ нового u-boot в нее подлинковывается на стадии сборки.
В Вашем случае нужно просто повыкидывать все лишнее и пересобрать ее просто для стирания
флеш, а точнее, просто запустить ее под отладчиком из AVR32STUDIO
[quote]
P.S. У Вас есть в наличии комплект STK1000?
[/quote]У меня NGW100.
Busel Roman
Наконец-таки приехала новая Flash-память. Заменил. Сразу заработала нормально - и пишется, и стирается, и читается!
singlskv
Ели кто еще вдруг не в курсе, Atmel опубликовала новые ревизии даташита на
AT32AP7000 Ревизия K.
Основное отличие от предыдущих документов в том что они фактически полностью
раскрыли протоколы обмена через JTAG(видимо под давлением общественности...,
дружно шлем пиво Harbour как первопроходцу...)
Так что вроде как никто не мешает написать свои "быстрые" программаторы/отладчики
для AVR32...
Время тока нужно где-то найти для всего этого...
altlogic
Здравствуйте!

Желаю приобрести STK1000+ средство программирования к нему. Сейчас работаю с UC3 на базе EVK1100, программирую микроконтоллер дешёывм JTAG'ом AVRDRAGON.
Собственно вопрос: какими средствами можно запрограммировать работу стенда STK1000. Поддержка efo ответила, что только JTAG ICE mk2 мне поможет. Но там необходимо всего лишь запрограммировать микросхему flash-памяти. Мельком глянул на неё даташит, там не написано какими именно средствами она программируется, но я подозреваю, что не только безумно дорогим ICE mk2. Так ли это? Программировал ли кто-нибудь эту флэш чем-нибудь попроще, подешевле? Про байт-бластер здесь упоминали...
lexx666
Может с опозданием но поделюсь - проблема с программированием флешки решается замыканием сигнала RESET ИМС флеш-памяти на землю во время включения питания. Это приводит к тому, что AVR32 AP7000 не считывает загрузочный код в момент включения. В момент нажатия кнопки Erase в среде AVRStudio32 отпустить замыкание сигнала RESET на землю.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.