реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Прошивка флэш-памяти, есть проблемы...
Legotron
сообщение Jun 28 2007, 06:41
Сообщение #1


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Добрый день!

У меня возникла проблема с прошивкой флэш-памяти Atmel AT49BV322DT.
Алгоритм прошивки представляет собой определенную последовательность обращений по шине.
Среди них есть запись данных по адресу 0х555! У меня 16-разрядный процессор и режим у флэшки и на шине выбран WORD. Я не могу обращаться по нечетным адресам (возникает TRAP). Могу ли я заменить 0х555 на 0х554? Или флэшке четко необходима 1 в младшем разряде адреса?
Подскажите пожалуйста!

Спасибо.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 28 2007, 07:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Вместо 0x555 вам нужно делать обращение по адресу 0xAAA. Соответственно адрес 0xAAA во втором цикле заменяется на 0x1554. Только проверьте правильность подключения этой Flash в вашем устройстве при 16-битном доступе. Адресная линия A0 вашего CPU не должна подключаться к Flash. A1 CPU должна подключаться к A0 Flash, A2 CPU к A1 Flash, A3 CPU к A2 Flash и т.д.
Go to the top of the page
 
+Quote Post
Legotron
сообщение Jun 28 2007, 10:43
Сообщение #3


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Цитата(rezident @ Jun 28 2007, 11:57) *
Вместо 0x555 вам нужно делать обращение по адресу 0xAAA. Соответственно адрес 0xAAA во втором цикле заменяется на 0x1554. Только проверьте правильность подключения этой Flash в вашем устройстве при 16-битном доступе. Адресная линия A0 вашего CPU не должна подключаться к Flash. A1 CPU должна подключаться к A0 Flash, A2 CPU к A1 Flash, A3 CPU к A2 Flash и т.д.


Да, у меня присутствует схемотехническая огреха.
Все адресные ноги соеденены напрямую A0 - A0 , A1 - A1 ... sad.gif
Какие есть предложения по разрешению ситуации?
Если я переведу шину проца в байтовый режим, ножка A0_cpu будет функционировать (смогу я записывать по нечетным адресам)?
Может использовать -BHE_cpu - (A-1)_flash?
Как лучше поступить?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 28 2007, 12:33
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Legotron @ Jun 28 2007, 16:43) *
Как лучше поступить?

Вы не указали тип вашего CPU и поэтому я ничего не знаю про его "байтовый режим шины".
Go to the top of the page
 
+Quote Post
Legotron
сообщение Jun 28 2007, 20:49
Сообщение #5


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Цитата(rezident @ Jun 28 2007, 16:33) *
Вы не указали тип вашего CPU и поэтому я ничего не знаю про его "байтовый режим шины".

Процессор Infineon XC167.
Прикрепленный файл  xc167_um_v2_1_.0_2004_04_sys.pdf ( 5.48 мегабайт ) Кол-во скачиваний: 912
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 28 2007, 23:38
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Legotron @ Jun 29 2007, 02:49) *
Процессор Infineon XC167.

Цитата(Legotron)
Если я переведу шину проца в байтовый режим, ножка A0_cpu будет функционировать (смогу я записывать по нечетным адресам)?

Досконально в 400 с лишним страниц мануала я не вникал, но похоже что можно.
Go to the top of the page
 
+Quote Post
Legotron
сообщение Jul 4 2007, 11:53
Сообщение #7


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Флэшка по-прежнему молчит!

Обрисую полную картину:

Ножки процессора соединены с ножками памяти напрямую, т.е. A0-A0, A1-A1 ... A20-A20.
Флэш жестко подтянута в режим WORD.

При работе шины в WORD режиме, не используется A0(только четные адреса) => никак не выставить требуемый адресс 0x555 sad.gif
При работе шины в BYTE режиме, происходит последовательно 2 цикла шины LOW(A0=0), затем High(A0=1)(0x555 выставить можно)
Но мне кажется, что во время последовательности команд програмирования, другие команды(LOW) вставлять нельзя, иначе собъется цикл, может я неправ!

Какие есть предложения по вопросу,без электрических доработок?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 4 2007, 13:41
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



При таком подключении:
Цитата(Legotron @ Jul 4 2007, 15:53) *
Ножки процессора соединены с ножками памяти напрямую, т.е. A0-A0, A1-A1 ... A20-A20.
Флэш жестко подтянута в режим WORD.

Вы должны жестко подтянуть флеш в режим BYTE,
и дальше работать с байтовыми командами по соответствующим адресам(0x555, и т.д.)
Пример (Am29LV040B):
Код
// типы для работы с flash (подключение по 8 бит шине)
typedef volatile unsigned char TDATA;
typedef volatile unsigned char *PTDATA;

// макросы записи и чтения flash
#define FLASH_WRITE(p, d)          (*((PTDATA)p) = d)
#define FLASH_READ(p)              (*((PTDATA)p))

...........................
  FLASH_WRITE(FLASH_BASE, 0xF0);           // команда Reset

  FLASH_WRITE(FLASH_BASE+0x555, 0xAA);                 // переходим в Autoselect
  FLASH_WRITE(FLASH_BASE+0x2AA, 0x55);
  FLASH_WRITE(FLASH_BASE+0x555, 0x90);

  mId=FLASH_READ(FLASH_BASE)                // читаем Manufacturer ID
..........................................
Go to the top of the page
 
+Quote Post
Legotron
сообщение Jul 5 2007, 05:19
Сообщение #9


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Цитата(singlskv @ Jul 4 2007, 17:41) *
Код
  FLASH_WRITE(FLASH_BASE+0x555, 0xAA);                 // переходим в Autoselect

Какой у вас процессор?

Мне процессор Infineon XC167не дает возможность обращаться таким образом по нечетным адресам(0x555) при любой конфигурации шины.
Другое дело, что в байтовом режиме шины от 1 команды идет 2 цикла записи (1-A0=0 2-A0=1, остальные разряды адресса не изменяются) .
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 5 2007, 09:23
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Legotron @ Jul 5 2007, 11:19) *
Другое дело, что в байтовом режиме шины от 1 команды идет 2 цикла записи (1-A0=0 2-A0=1, остальные разряды адресса не изменяются) .

Придется ставить дешифратор и "вырезать" второе обращение к Flash.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 5 2007, 10:32
Сообщение #11


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Legotron @ Jul 5 2007, 09:19) *
Какой у вас процессор?
Renesas SuperH
Цитата
Мне процессор Infineon XC167не дает возможность обращаться таким образом по нечетным адресам(0x555) при любой конфигурации шины.

в даташите на Ваш проц написано:
Bytes are stored at even or odd byte addresses. Words are stored in ascending memory
locations with the low byte at an even byte address being followed by the high byte at
the next odd byte address.

Цитата
Другое дело, что в байтовом режиме шины от 1 команды идет 2 цикла записи (1-A0=0 2-A0=1, остальные разряды адресса не изменяются) .

откуда 2 цикла при чтении/записи 1 байта ?

У Вас выбран вот этот режим работы шины:
16 … 24-bit Addresses, 8-bit Data, Demultiplexed ???

флеш переключен в байтовый режим работы ?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01509 секунд с 7
ELECTRONIX ©2004-2016