Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Программистам С167


Автор: Swetlana 28.5.2005, 21:28
не совсем мобильная тема, но все-таки рискну...
Помогите понять как сделать:
есть проц С167, есть подключеная флеш к нему:
WE(FLASH) - WR/WRL (C167)
OE(FLASH) - RD(C167)
CE(FLAS) - CS0(C167)
RESET(FLASH) - +5V
код загрузчика в прикрепленном файле
считать получилось, прочитать не могу.... чего не хватает?

Автор: PILOT 29.5.2005, 00:16
Какая флэш? И точно: какой процессор?

СУВ.

Автор: Swetlana 29.5.2005, 09:05
ST10R167 - процессор (полный аналог С167 сименса)
FLASH - 29F400 JAPAN

Автор: PILOT 29.5.2005, 09:43
Ясно.
А как Вы работаете с параллельной флеш в последовательном режиме?

СУВ.

Автор: Swetlana 29.5.2005, 10:17
Вообщето я работаю по последовательному порту с процессором - и он собственно принимает от меня байты для записи, или передает считанные байты...
т.е. при посылке ему например 0x85 - он последовательно по байту отдает содержимое флеши. (работает как часы)
0x84 - должна по идее была переписывать, а 0x33 ведет подсчет КС... все остальное - впринципе - не суть важно...
Собственно всем этим занимаются встроенные устройтсва в процессор - интерфейсом общения выступает ASC0 устройство, а при общении с флеш - начинает свою работу EBC... вот только сигналы c WR не генерятся для доступа на запись к флеш...
видимо конфигурация самого устройства нужна, а что именно - не понимаю... EBC молчит как пень smile

Автор: PILOT 29.5.2005, 10:49
Все равно не понимаю.
Вот тут: http://mcu.st.com/files/mcu/6864.pdf на 48-50 странице есть диаграммы чтения записи. Никакого участия последовательной шины.

СУВ.

Автор: Swetlana 29.5.2005, 11:56
значит у меня организовано так:
есть программа на моем компьютере мною писаная с 2-мя кнопками типа "читать" и "писАть".
при нажатии открываю компорт на который повешен так сказать "адаптер для связи" - грубо говоря преобразователь уровней и все.

в проц зашиваю бутстрап, который был в приложении - в нем есть обрабтка команд 0х84(функция чтения) и 0х85(функция записи) и еще нескольких функций, которые говорят о количестве байтов которые я либо передам или жду на прием (это значит при записи в порт всего одного байта 0х84 или 0х85 - проц активируется на прием байтов или на передачу). С помощью записей типа "mov S0BUF, [r6]" я получаю один байт по адресу r6... ну r6 - это просто счетчик, который последовательно инкреминируется...

А вот команда записи по адресу - уже не проходит... понимаю, что выборка адреса может для записи организовываться только как word - соответственно веду запись в зависимости от того четный байт идет для записи или нет... вот только нипишет он нифига... smile
Добавлено @ 12:05
поясню еще вот что, управлять напрямую сигналами WR или RD я не могу, я могу лишь только как я поняла включить EBC, который сам управляет ими... а вот как его включить - не знаю.... а ASC0 - всего лишь посредник между процом и моим компьтером... к флешке не имеет никакого отношения...

Автор: PILOT 29.5.2005, 12:25
Правильно ли я понял:
итак кусок кода уже сидит в проце, который прогружает внешнюю flash 29F400.
Загрузка ведется по UART, есть несколько команд, котоые инициируют необхдимую операцию для работы с флэш.
При этом чтение проходит на ура, а запись не осуществляется, более того, строб записи не реагирует ни на что.
Так?

СУВ.

Автор: Swetlana 29.5.2005, 12:45
Все правильно.
Данные (тока что на осциллографе посмотрела) идут и адреса выставляются, но запись просто не проходит... при считывании записанного байта приходит старый не модифицированный...
CE - 0V, WE - 5V, OE - 5V()все это на ногах Flash); причем не меняются вообще...

Если войти в обычный режим (работа программы с флеши - она не пустая на данный момент) - все работает как часы... все переключается по диаграммам даташита на проц... В чем засада - не пойму.

Автор: PILOT 29.5.2005, 13:43
Где-то ты не указала каким из нескольких способов ты работаешь с памятью (в доках есть раздел про внешнюю память).... мне так кажется, потому что причина именно в отсутсвии строба WE. Чудес не бывает, нужно разбираться с этими режимами. по-моему причина именно в этом. Хотя я с сименсами не работал и могу ошибаться (но не по поводу строба, конечно, строб должен быть).

СУВ.

Автор: PILOT 29.5.2005, 19:26
Разобрались?

СУВ.

Автор: Swetlana 29.5.2005, 21:49
В общем сравнила с другим подобным случаем - самое странно, что стробы не генерятся. Мне кажется некоторая проблема может быть и действительно с внутренним контроллером флешки. Там есть команда на программирование, защиту и снятие защиты - пытаюсь с этим поиграть, из-за чего возник еще вопрос:
есть еще несколько примеров программирования флешек типа AMD29F400 в том числе и пример с сайта keil - там почему-то в отличии от даташита шлется не на адрес 555 а на 5554 - почему так не могу понять, но стереть пока не удалось smile может дело в протекте

Автор: PILOT 30.5.2005, 00:37
http://www.mobil-diszkont.hu/idis/29f400.pdf
посмотрите на 15-18 страницы, там есть алгоритмы работы с памятью и указан адрес $5555
там же есть алгоритм стирания, записи и чтения. Должно помочь.

СУВ.

Автор: Swetlana 31.5.2005, 22:43
Да не все так просто - там на флеше ноги данных попутаны с проца... потому когда шлешь 55 - то на саму флешь приходит охинея и она выдает просто код из прошивки - вот такая вот беда была... но порешили уже - пишет и стирает моя программка на ура...
Добавлено @ 22:44
Пасибо тебе, за то что не оставил в трудную минуту ;)

Автор: PILOT 31.5.2005, 22:50
Ну... чем мог помог smile
В любом случае чудес не бывает если дело не касается DC-DC преобразователей фирмы ЭлТом.

smile

СУВ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)