Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с AT26DF161
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Mixal_
Здравствуйте!
Не могу разобраться с dataflash AT26DF161. Может ктонить работал с такой...или любой из серии AT26...

Пытаюсь записать несколько байт в Sequential Program Mode.
Затем пытаюсь считать.

Вот код:
Код
AT26WriteBlock:
clr tmp0
sts PORTG,tmp0; CS=0
call CS_wait
ldi tmp0,0xAD ; sequential program mode
call SPIWriteByte
lds tmp0,AT26_addr+2
call SPIWriteByte
lds tmp0,AT26_addr+1
call SPIWriteByte
lds tmp0,AT26_addr
call SPIWriteByte
ldi R30,LOW(flash_buf)
ldi R31,HIGH(flash_buf)
ld tmp0,Z+
call SPIWriteByte
ldi tmp0,1
sts PORTG,tmp0; CS=1
call CS_wait
call AT26Wait
ldi tmp3,15
wr_spi_loop:
clr tmp0
sts PORTG,tmp0; CS=0
call CS_wait
ldi tmp0,0xAD ; sequential program mode
call SPIWriteByte
ld tmp0,Z+
call SPIWriteByte
ldi tmp0,1
sts PORTG,tmp0; CS=1
call CS_wait
call AT26Wait
dec tmp3
tst tmp3
brne wr_spi_loop
call AT26WriteDisable
ret

AT26ReadBlock:
clr tmp0
sts PORTG,tmp0; CS=0
call CS_wait
ldi tmp0,0x0B
call SPIWriteByte
lds tmp0,AT26_addr+2
call SPIWriteByte
lds tmp0,AT26_addr+1
call SPIWriteByte
lds tmp0,AT26_addr
call SPIWriteByte
call SPIWriteByte; dummy
ldi R30,LOW(flash_buf)
ldi R31,HIGH(flash_buf)
ldi tmp3,16
rd_spi_loop:
call SPIReadByte
st Z+,tmp0
dec tmp3
tst tmp3
brne rd_spi_loop
ldi tmp0,1
sts PORTG,tmp0; CS=1
call CS_wait
ret


Перед записью делаю глобальный унлок вот так:

Код
call SPIMasterInit
call AT26WriteEnable; разрешаю запись
clr tmp1
call AT26WriteStatus; сбрасываю бит SPRL регистра статуса
call AT26WriteEnable; разрешаю запись
call AT26WriteBlock ; пишу в память
call AT26ReadBlock ; тут считываются одни 0xFF


SPI настроен правильно и микросхема подключена и согласована по уровням.
Device ID считывается правильно. Может гдето косяк в алгоритме разблокировки защиты записи?
rx3apf
Цитата(Mixal_ @ Mar 5 2007, 14:44) *
Здравствуйте!
Не могу разобраться с dataflash AT26DF161. Может ктонить работал с такой...или любой из серии AT26...

Пытаюсь записать несколько байт в Sequential Program Mode.
Затем пытаюсь считать.

Вот код:
[code]
AT26WriteBlock:
clr tmp0
sts PORTG,tmp0; CS=0
call CS_wait
ldi tmp0,0xAD ; sequential program mode
call SPIWriteByte

А с чего ты взял, что 26DF161 поддерживает этот режим ? Он появился только в микросхемах с суффиксом "A", так что (если речь идет о 26DF161 без буквы) все правильно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.