DataFlash ничего не отвечает ! Кто знает ? Рад любой мысли ! Вторую неделю тупею,своих идей уже нет ! При чтении регистра состояния АТ25256А на её выходе по осцилографу всегда +5V , а нужен 0,на входы памяти все импульсы подаются нормально (по осцилографу) .Программа при ожидании готовности памяти зависает ожидая 0. Пробовал разную память,проверял плату,бесполезно !
Пробовал (1<<CPOL),(1<<CPHA) не помогает ! (Спасибо, может рабочий образец покажите ? ) Спасибо за советы, жду новых !!! При любой конфигурации на выходе АТ25256 SO=1, вернее +5V поступает через подтягивающий резистор 10 кОм, а микросхема ничего не выдаёт (осцилограмма ровная) (импулисы CS,SCK,SI поступают). При чтении поэтому я всегда получаю FF. Перед записыванием небходимо считать регистр состояния памяти ,нулевой бит должен быть =0 ,а я читаю одни 11111111. Похоже память не отвечает ,а почему вопрос ? Порт SS выдаёт сигналы как надо,правильно. Три не рабочих микросемы врядли ,только если вся партия левая, хотя я пробовал 25LC640 CHIP ,они подобные( но 8кбайт,2МГц), тоже выхода нет .
Связь по SPI с памятью AT25256A PB4 - > /CS выбор SLAVE PB5 -> SI вход памяти PB6 <- SO выход памяти PB7 -> SCK такт /WP , /HOLD = +5V
.include "c:\avr\def\8535def.inc" ;--------------------------------------- RESET: ldi i,low(RAMEND) ;определение начала стека сконца ОЗУ out SPL,i ldi i,high(ramend) out sph,i ;------------------------------------------------------- ldi i,15 ;инициализация сторожевого таймера out WDTCR,i ;(wdr) ? 2 ? RESET wdr ;------------------------------ Инициализация портов ---- ldi i,0b10110000 out DDRB,i ;портВ out portb,i ;portB=10110000 ;-------------------------------------------Инициализация SPI ------- ;(0<<SPIE)+(1<<SPE)+(0<<DORD)+(1<<MSTR)+(0<<CPOL)+(0<<CPHA)+(0<<1)+(0<<0) ; Прерывание от SPI запрещено, SPI вкл., старший бит - первый, мастер, ;,полярность положительная ,по переднему фронту, тактовая F/64 ldi i,$52; out SPCR,i ;--------------- MAIN:wdr sbi PORTB,pb4 ;=1 ldi n,0x06 ; Код операции WREN (разрешение записи) rcall send_spi sbi PORTB,pb4 ; CS'=1 rcall spiin ldi n,0x01 ; Код операции WRSR (запись статуса) rcall send_spi ldi n,0x02 ; Код Status Register rcall send_spi sbi PORTB,pb4 ; CS'=1 rcall spiin
rjmp main ;---- Обмен по SPI --------------
send_spi: cbi PORTB,pb4 ; CS'=0 out SPDR,n ; Начать передачу wait_spi: sbis SPSR,SPIF ; SPI - готов?Пропуск если разряд установлен rjmp wait_spi in v,SPDR ; Чтение данных ret ;---------- ожидание готовности ------------- spiin: cbi PORTB,pb4 ; CS'=0 spiin1:ldi n,5 ;чтение регистра статуса RDSR rcall send_spi sbrc v,0 rjmp spiin1 sbi PORTB,pb4 ; CS'=1 ret
|