Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Микроконтроллеры
Перезагрузить страницу Программирование флэш типа AT49F010
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Бим Бим вне форума
Member
 
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.08.2005
По умолчанию 16.12.2009, 17:51

Здравствуйте.

У меня не получается ничего записать в эту хрень, видимо потому, что она с защитами.

Для отработки фрагмента создал отдельный исполняемый файл, ассемблерный листинг такой

Код:
ljmp begin
org 300
begin:
clr p1.7; zapret xOZU
mov r0, #20
mov r2, #002Fh
mov r3, #0
nn:
call seqwr
mov dph, r2
mov dpl, r3
mov a, #5
clr p1.4; выбор флэш
movx @dptr, a
setb p1.4; запрет флэш
inc r3
djnz r0, nn
nnn: nop
jmp nnn

seqwr:
mov a, #00AAh 
mov dptr, #5555h
clr p1.4; выбор флэш
movx @dptr, a
setb p1.4; запрет флэш

mov a, #0055h
mov dptr, #2AAAh
clr p1.4; выбор флэш
movx @dptr, a
setb p1.4; запрет флэш

mov a, #00A0h 
mov dptr, #5555h
clr p1.4; выбор флэш
movx @dptr, a
setb p1.4; запрет флэш
ret
Фрагмент пишет начиная с 2F00 (на всякий случай, если бут-область запрещена) 20 байт по 0х05h - чисто для пробы. Но в микросхеме на программаторе читаю - остается пустой.

Че ей надо еще? Сверился с дисассемблированной прогой, там точно такой же фрагмент, так что с селектами микросхемы все в порядке, проверил и на осциллографе, обращения есть. Причем на этой проге работают AM29F010 AT49F010 A290011T (прекрасно взаимозаменяемы и пишут в себя нормально), хотя по докам управляющие последовательности у последней идут по другим адресам (2АА и 555).

Наставьте на путь истинный!
Ответить с цитированием
  (#2 (permalink)) Старый
deckard deckard вне форума
Member
 
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 5 сообщениях
Регистрация: 04.03.2008
По умолчанию 16.12.2009, 23:57

Есть небольшой фрагмент в _каждом_ руководстве Atmel, который
русские инженеры почему-то забывают прочитаь. Дело в том,
что программирование байта а Атмеловских м.с. FLASH
занимает время от порядка 10ков микросекунд до 10ков миллисекунд (см таблицы !)

Код:
DATA POLLING: The AT49F512 features (inverted) DATA polling to
indicate the end of a program cycle. During a program
cycle an attempted read of the last byte loaded will result in
the complement of the loaded data on I/O7. Once the program
cycle has been __completed__, true data is __valid__ on all
outputs and the next cycle may begin. DATA polling may
begin at any time during the program cycle.

TOGGLE BIT: In addition to (inverted) DATA polling the AT49F512
provides another method for determining the end of a program
or erase cycle. During a program or erase operation,
successive attempts to read data from the device will result
in I/O6 toggling between one and zero. Once the program
cycle has __completed__, I/O6 will ___stop___toggling___ and ___valid data___
will be read. Examining the toggle bit may begin at any time
during a program cycle.
Что в переводе на русский означает примерно следующее
Код:
После того, как Вы успешно долбанули американскую м.с.
байтом, надо попытаться прочитать этот байт. И читать
надо до тех пор, пока бит I/O7 будет оставаться _инверсным_
к значению, которое записали.

Дополнительно: бит I/O6 будет переключаться из 0 в 1
при последовательных операциях чтения
(прыгающий бит) пока идет процесс программирования.
__Правильные данные__ появятся при чтении только после 
___завершения цикла программирования___
Проще говоря:
После 

    clr p1.4; выбор флэш
    movx @dptr, a; пишем
    setb p1.4; запрет флэш

пишем что-то вроде

    mov B,A
waithere:
    clr p1.4; выбор флэш
    movx a,@DPTR; читаем с того же адреса
    setb p1.4; запрет флэш
    cjne A,B,waithere; ждем появления записанных данных, те __valid__data__

    inc R3; итд
Смысл видимо ясен - movx @dptr,a занимает 2 микросекунды (стандарт), а программирование
байта - порядка 10-50 микросекунд. Если процессор достаточно "стандартно тормозной",
а память FLASH быстрая - то с учетом задержки на прочие команды программирование идет "на авось".
(Хотя это надо еще доказать)
А вот если процессор современный, быстрый ... А FLASH - не очень быстрая ...
Таким образом поллинг _обязателен_ при программировании всех (по крайней мере старых) FLASH
Atmel.


Ответить с цитированием
  (#3 (permalink)) Старый
Бим Бим вне форума
Member
 
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.08.2005
По умолчанию 17.12.2009, 11:19

Большое спасибо, уважаемый! Я думал об этом, глядя на алгоритм записи, нарисованный доке, но понадеялся на пример дизассемблированной проги из прибора.

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

Остался другой вопрос - судя по доке на A290011 последовательность 0xААh, 0x55h и 0xА0h должна отправляться не по адресам 5555h и 2АААh, а по адресам 555h и 2ААh (табл. 5 Command Definitions). Почему же эта микросхема все равно пишет в себя по этому коду, годному только для AT49F010 и ей подобных?

Вот фрагмент из нее:

Код:
code:0000DDC3                 mov     DPTR, #0x555
code:0000DDC6                 mov     A, #0xAA; 'к'
code:0000DDC8                 clr     P1.4          ; Port 1
code:0000DDCA                 movx    @DPTR, A
code:0000DDCB                 setb    P1.4          ; Port 1
code:0000DDCD                 mov     DPTR, #0x2AAA
code:0000DDD0                 mov     A, #0x55; 'U'
code:0000DDD2                 clr     P1.4          ; Port 1
code:0000DDD4                 movx    @DPTR, A
code:0000DDD5                 setb    P1.4          ; Port 1
code:0000DDD7                 mov     DPTR, #0x5555
code:0000DDDA                 mov     A, #0xA0; 'а'
code:0000DDDC                 clr     P1.4          ; Port 1
code:0000DDDE                 movx    @DPTR, A 
code:0000DDDF                 setb    P1.4          ; Port 1
code:0000DDE1                 mov     DPH, TH0        
code:0000DDE4                 mov     DPL, TL0        
code:0000DDE7                 mov     A, RAM_1F
code:0000DDE9                 clr     P1.4          ; Port 1
code:0000DDEB                 movx    @DPTR, A; пишем байт
code:0000DDEC                 setb    P1.4          ; Port 1
; видите, здесь нет проверки записи
;далее идет уже другой припев, не связанный с записью во флэш:
code:0000DDEE                 mov     C, ACC.7      ; Accumulator
code:0000DDF0                 mov     TL0, #0    ; Timer 0, Low Byte
code:0000DDF3                 mov     TH0, #0    ; Timer 0, High Byte
code:0000DDF6 code_DDF6:                            ; CODE XREF: code_DD53+B4j
code:0000DDF6                 djnz    TL0, code_DDFF; Timer 0, Low Byte
code:0000DDF9                 djnz    TH0, code_DDFF; Timer 0, High Byte
code:0000DDFC                 ljmp    code_DE10
В проге нет ни одной "sequence" по адресам 555 и 2АА.
Но она пишет во все эти м.с., хотя моя пробная - нет! (AT49F010 записала 20 байтов 05h, A290011 осталась пустой)
Ответить с цитированием
  (#4 (permalink)) Старый
deckard deckard вне форума
Member
 
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 5 сообщениях
Регистрация: 04.03.2008
По умолчанию 17.12.2009, 12:26

См в руководствах текст мелким шрифтом (!)
Код:
1. The address format in each bus cycle is as follows: A11 - A0 (Hex); A11 - A16 (don’t care).
2. Since A11 is don’t care, AAA can be replaced with 2AA.
(C) Atmel
Обратие внимание еще раз на конкретный глюк в документации (см выше) - атмеловцы на самом деле сами
смутно соображают сколько бит дешифруют.

Микросхемы Atmel Flash - это гибрид электрически-стираемого ПЗУ и программатора.
Программатор фактически является отдельным блоком внутри м.с. и для включения реагирует на 12битный адрес (см мелкий шрифт)
Т е изначально идея была такая:
Код:
xmov #0555h,#0AAh  
xmov #0AAAh,#055h ; приняв эту последовательность, включается программатор
xmov #0555h,#код команды; программатор принимает байт команды
....
....
Но поскольку это было сделано еще для старых м.с. малой ёмкости, то здесь старшие 4 бита (в данном случае 0)
просто не проверялись. Т е можно написать любую цифру. А далее это "исторически" и осталось.
Тем более, что иначе возникают проблемы с разным числом адресов у разных м.с.

Ответить с цитированием
  (#5 (permalink)) Старый
Бим Бим вне форума
Member
 
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.08.2005
По умолчанию 17.12.2009, 15:07

Спасибо! Всегда приятно пообщаться с профессионалом.
А почему несмотря на то, что я указал начальный адрес для записи 0000 во флэш весь массив данных реально пишется с 10000h ? Может, что-то нарушено в адрессации самой м.с.?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Бим Бим вне форума
Member
 
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.08.2005
По умолчанию 21.12.2009, 16:14

Наконец, руки дошли, а с ними и мой моск. Ну да, я не спорю, я неуч, и понимаю многозначительное молчание. :( 55 порт надо тоже было конфигурировать. Теперь все пишется нормально, за разъяснения еще раз большущее</span> <span style="color:#FF00FF">спасибо.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Флэш баннер veter48 Графика & дизайн 1 12.02.2012 13:54
Флэш модем Joyrex Драйвера 3 20.05.2011 22:01
Помогите! Флэш вирус OlalaTheWorld SoloWing Антивирусы 3 14.08.2008 04:18
флэш-игры Flop Компьютерные игры 6 24.04.2008 06:41
флэш видео tatochka07 Видео 0 02.09.2007 23:06
Проблема с флэш-накопителем Kingston Пуховой... Техническая поддержка 2 14.08.2007 15:34
Флэш-головоломка как написать Vladimir the Red Sunny Игры разума 3 13.07.2007 13:48
Не видно флэш карты Apacer 2Gb Lot Ноутбуки 0 18.05.2007 20:06
Как преобразовать строку типа AnsiString в массив символов типа char SkyHawk C++ Builder 16 30.12.2005 12:10
Как В MFC импортировать флэш Dmitrije Visual C++ 0 07.11.2005 11:58
Оболочка на MSVC++ 6.0 для флэш-ролика Serg31416 Visual C++ 2 06.12.2004 15:31
Можно ли типа Byte преобразовать в массив типа Word размерностью N Anonymous C++ Builder 1 12.11.2003 14:27



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов