Полная версия этой страницы:
AVR
Andrey_31
Jan 3 2006, 19:48
Прошу помощи! Не могу запустить программу записи и чтения данных из АТ90S8535 в память AT25256A
по SPI .Или неправильно подключил память,или неправильный обмен данными.Прошу совет или образец программы ! e_av74@mail.ru
Входы HOLD\ и WP\ подключил к +5V . ?
;---------------------Вот мой кусок программы записи 1 байта в память
cbi PORTB,_CS ; CS'=0
ldi tmp,0x06 ; WREN
rcall send_spi
sbi PORTB,_CS ; CS'=1
nop
nop
nop
nop
cbi PORTB,_CS ; CS'=0
ldi tmp,0x02 ;WRITE
rcall send_spi
mov tmp,Xh
rcall send_spi
mov tmp,Xl
rcall send_spi
mov tmp,dspi
rcall send_spi
sbi PORTB,_CS ; CS'=1
ret
;---------------------- SPI -----------------------
send_spi:
out SPDR,tmp ;
wait_spi:
sbis SPSR,SPIF ;
rjmp wait_spi
in tmp,SPDR
ret
;------------------------------------------------------ А это чтение из памяти:
sbi PORTB,_CS ; CS'=1
cbi PORTB,_CS ; CS'=0
ldi tmp,0x03 ;READ
rcall send_spi
mov tmp,Xh
rcall send_spi
mov tmp,Xl
rcall send_spi
mov dspi,tmp
sbi PORTB,_CS ; CS'=1
ret
solidreg
Jan 3 2006, 21:22
А как сконфигурирован SPI? (SPCR register) Должен ,быть .DORD=1, .SPE=1, MSTR=1, CPOL=0, CHPA=0.
Какая частота SCK?
prottoss
Jan 4 2006, 12:27
Цитата(Andrey_31 @ Jan 4 2006, 02:48)

Прошу помощи! Не могу запустить программу записи и чтения данных из АТ90S8535 в память AT25256A
по SPI .
А поиском по форуму пользоваться слабо? Такая тема уже подымалась полторы недели назад, вот ссылка
http://electronix.ru/forum/index.php?showtopic=10633 . Там есть и исходники и схема подключения
Цитата(solidreg @ Jan 4 2006, 04:22)

А как сконфигурирован SPI? (SPCR register) Должен ,быть .DORD=1, .SPE=1, MSTR=1, CPOL=0, CHPA=0.
Какая частота SCK?
На счет DORD=1 это вы загнули, я как раз работаю с такой памятью отностительно давно и бит DORD (направление сдвига данных) ни когда не устанавливаю. Частота SCK вообще для конкретного типа МК роли не играет, так как судя по даташитам на АТ25128/256 тактовая частота может достигать 20МГц при питании 5 вольт. Для 90S8535 максимаальная частота по SPI может достигать: (тактовая частота) / 4, что не привысит 2 МГц
Andrey_31
Jan 5 2006, 00:32
Вроде инициализация и всё остальное похожи на исходники ,только они на С или другом компиляторе ,где команда SPI передачи байта не раскрыта .Может я в ассемблере её неправильно описал?
Вопрос ,на схемах я увидел что выбор Slave по команде из порта но не из PB4 (SS\) ,а я им выбираю память.Может так нельзя,или PB4 сам выдаёт сигнал при загрузке в SPDR данных ?
Порекомендуйте компилятор ,только с описанием ,без лимита срока и популярный!
Спасибо!
Вроде инициализация и всё остальное похожи на исходники ,только они на С или другом компиляторе ,где команда SPI передачи байта не раскрыта .Может я в ассемблере её неправильно описал?
Вопрос ,на схемах я увидел что выбор Slave по команде из порта но не из PB4 (SS\) ,а я им выбираю память.Может так нельзя,или PB4 сам выдаёт сигнал при загрузке в SPDR данных ?
Порекомендуйте компилятор ,только с описанием ,без лимита срока и популярный!
Спасибо!
prottoss
Jan 5 2006, 14:09
Цитата(Andrey_31 @ Jan 5 2006, 07:32)

Вроде инициализация и всё остальное похожи на исходники ,только они на С или другом компиляторе ,где команда SPI передачи байта не раскрыта .Может я в ассемблере её неправильно описал?
Вопрос ,на схемах я увидел что выбор Slave по команде из порта но не из PB4 (SS\) ,а я им выбираю память.Может так нельзя,или PB4 сам выдаёт сигнал при загрузке в SPDR данных ?
Порекомендуйте компилятор ,только с описанием ,без лимита срока и популярный!
Спасибо!
Вроде инициализация и всё остальное похожи на исходники ,только они на С или другом компиляторе ,где команда SPI передачи байта не раскрыта .Может я в ассемблере её неправильно описал?
Вопрос ,на схемах я увидел что выбор Slave по команде из порта но не из PB4 (SS\) ,а я им выбираю память.Может так нельзя,или PB4 сам выдаёт сигнал при загрузке в SPDR данных ?
Порекомендуйте компилятор ,только с описанием ,без лимита срока и популярный!
Спасибо!
По поводу компилятора Си...На этом форуме все хвалят и рекомендуют друг-другу IAR Embedded Workbench for AVR v 4.xxx. Я его, в принципе, тоже пользую. Я раньше писал на ImageCraft Compiler for AVR (ICC). Тоже не плохая вещь, но намного меньше тонких настроек компилятора, что ограничивает его применение. Остальные не пользовал. На все, выше приведенное можно найти "таблетки" сдесь, на форуме. Еще раз настоятельно рекомендую Вам попользоваться поиском по форуму. :-)
По поводу кода - все вроде бы правильно, но Вы не привели инициализацию интерфейса, ...а может банальное - Вы забыли сконфигурировать порты SPI (входы-выходы)?
Пол поводу SS: Я не обуду объяснять механизмы его работы, на это есть даташиты от производителя, там все написано, скажу лишь, что если SPI настроен как МАСТЕР а вывод SS сконфигурирован как выход, то на работу интерфейса SPI он никак не влияет, и может использоваться Вами по любому удобному назначению
Blade000
Jan 15 2006, 11:16
В программе у тебя всё правильно. SPI настроить нужно следующим образом:
DORD=0, .SPE=1, MSTR=1, CPOL=1, CHPA=1, вывод SS на вывод независимо от того используется он или нет, скорость работы SPI любая.
Andrey_31
Jan 15 2006, 16:18
Кто знает ? Рад любой мысли ! Вторую неделю тупею,своих идей уже нет ! При чтении регистра состояния АТ25256А на её выходе по осцилографу всегда +5V , а нужен 0,на входы памяти все импульсы подаются нормально (по осцилографу) .Программа при ожидании готовности памяти зависает ожидая 0. Пробовал разную память,проверял плату,бесполезно !
Пробовал (1<<CPOL),(1<<CPHA) не помогает ! (Спасибо, может рабочий образец покажите ? )
Связь по 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
nop
nop
nop
nop
ldi n,0x06 ; Код операции WREN (разрешение записи)
rcall send_spi
sbi PORTB,pb4 ; CS'=1
rcall spiin
nop
nop
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 ; Начать передачу
nop
wait_spi:
sbis SPSR,SPIF ; SPI - готов?Пропуск если разряд установлен
rjmp wait_spi
in v,SPDR ; Чтение данных
ret
;---------- ожидание готовности -------------
spiin: cbi PORTB,pb4 ; CS'=0
nop
nop
nop
spiin1:ldi n,5 ;чтение регистра статуса RDSR
rcall send_spi
sbrc v,0
rjmp spiin1
sbi PORTB,pb4 ; CS'=1
ret
Blade000
Jan 15 2006, 16:33
Могу прислать проект для ATmega8, там есть обмен с AT25256, работает 100%, только вчера с ним работал.
А из памяти читать можешь или только не пишет утебя?
Blade000
Jan 15 2006, 17:11
В твоей программе конфигурация SPI точно неправильная, сделай как я писал
.EQU SPCRR = (1<<SPE)+(1<<MSTR)+(1<<CPOL)+(1<<CPHA)+(0<<DORD)+(0<<SPR1)+(0<<SPR0)
вот конфигурация из моей программы.
Команды NOP можно убрать, у меня на 8 Мгц работает без них всё отлично.
Если весь обмен по SPI делаешь в процедуре send_spi, тогда добовать туда же установку CS в 1, а в остальном месте CS не трогай, чтобы не путаться.
вот так -
;---- Обмен по SPI --------------
send_spi:
cbi PORTB,pb4 ; CS'=0
out SPDR,n ; Начать передачу
wait_spi:
sbis SPSR,SPIF ; SPI - готов?Пропуск если разряд установлен
rjmp wait_spi
in v,SPDR ; Чтение данных
sbi PORTB,pb4 ; CS'=1
ret
;----------------------------------
В остальном программа вроде правильна, попробуй сперва читать из памяти, а потом уже писать туда.
Я когда прогу писал, читал с памяти и выдавал в UART для проверки.
Если не заработает попробуй вывод CS у AT25256 повесить на другой порт. не на SS, хотя должно работать!
Andrey_31
Jan 16 2006, 00:06
Спасибо за советы, жду новых !!!
При любой конфигурации на выходе АТ25256 SO=1, вернее +5V поступает через подтягивающий резистор 10 кОм, а микросхема ничего не выдаёт (осцилограмма ровная) (импулисы CS,SCK,SI
поступают). При чтении поэтому я всегда получаю FF. Перед записыванием небходимо считать регистр состояния памяти ,нулевой бит должен быть =0 ,а я читаю одни 11111111. Похоже память не отвечает ,а почему вопрос ? Порт SS выдаёт сигналы как надо,правильно.
Три не рабочих микросемы врядли ,только если вся партия левая, хотя я пробовал 25LC640 CHIP
,они подобные( но 8кбайт,2МГц), тоже выхода нет .
Blade000
Jan 16 2006, 07:52
А зачем ты SO повесил на 5В через резюк???
напрямую надо просто соединить с МК и всё, это же не I2C протокл, а SPI !!!
Покажи схему включения памяти!
Не хотел вам мешать, но вместо AT25*** удобней и лучше пользоваться FM25*** фирмы RAMTRON, по нескольким причинам:
1. Она всегда готова, т.е. бит готовновсти всегда взведен

;
2. Другой физический принцип хранения данных;
3. Большее число циклов записи в ячейку;
4. Скорость обращения по SPI выше чем у ATMEL.
Года 3 назад впервые применил ее, отличная штука!!!!
AndyBig
Jan 16 2006, 09:43
Цитата
Не хотел вам мешать, но вместо AT25*** удобней и лучше пользоваться FM25***
Вот только по стоимости и по доставабельности ей до АТ25ххх ой как далеко.
Цитата
2. Другой физический принцип хранения данных;
В общем-то, конечному устройству в подавляющем большинстве случаев глубоко по барабану принцип работы внутренностей периферии

Цитата
3. Большее число циклов записи в ячейку;
Даже число циклов у АТ25ххх редко бывает недостаточным.
Цитата
4. Скорость обращения по SPI выше чем у ATMEL
А кому не достаточно 20 МГц?
Цитата(AndyBig @ Jan 16 2006, 12:43)

Вот только по стоимости и по доставабельности ей до АТ25ххх ой как далеко.
Ну, не так и далеко!!! Стоимость - понятие относительное, "достовабельность" зависит от вашего снабжения
Цитата(AndyBig @ Jan 16 2006, 12:43)

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

.
Цитата(AndyBig @ Jan 16 2006, 12:43)

Даже число циклов у АТ25ххх редко бывает недостаточным.
Это как считать, регистр статуса у 25 серии - такая-же энергонезависимая ячейка, как и основной массив, поэтому частое обращение к нему может привести к несправности микрухи. А обращаться туда можно по любому поводу!
Цитата(AndyBig @ Jan 16 2006, 12:43)

А кому не достаточно 20 МГц?
Я не говорил про SCK, я говорил про SPI. Время записи в AT25256 = 5ms, а у FM25*** = 0. Суди сам, чтобы заткнуть ее после записи придется ждать, а кому это интересно???
Andrey_31
Jan 16 2006, 18:00
С резаком видел схемы ,и они работали. Сам пробовал и с резаком и без ,перепробовал всё. Спасибо навёл на мысль про подключение на прямую, я программирую по SPI через STK2000 и выходы памяти с выходом программатора напрямую запараллелены постоянно. Возможно я спалил выход помяти через
выход программатора .Завтра куплю "шестую" память и попробую отсоединять программатор.
Как считаете?
Blade000
Jan 17 2006, 06:40
C STK2000 не работал, сказать точно не могу, но я всегда отделяю SPI контроллера от остальной схемы перемычками, чтобы при программировании не влияло.
Возможно память и с глючила. А память впаяна? Если в панельке, вытаскивай просто на время программирования контроллера!
Blade000
Jan 18 2006, 17:39
Как успехи то, заработала память?
Andrey_31
Jan 21 2006, 07:45
Когда я отсоединил программатор на выходе памяти появился один бит =0,но это не то что надо.Решил позже помучать АТ25(времени и нервов уже нет),а сейчас пытаюсь запустить АТ45 ,на неё вроде больше примеров применения и программ,хотя принцип такойже. Как запущу напишу...
Blade000
Jan 21 2006, 10:07
Скинь мне схему на почту, я посмотрю, что неправильно исправлю, интересно просто стало, что за глюк.
моя почта: Misystems@mail.ru
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.