|
AVR, AT25256A |
|
|
|
Jan 3 2006, 19:48
|
Группа: Новичок
Сообщений: 14
Регистрация: 3-01-06
Пользователь №: 12 807

|
Прошу помощи! Не могу запустить программу записи и чтения данных из АТ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
|
|
|
|
|
Jan 3 2006, 21:22
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056

|
А как сконфигурирован SPI? (SPCR register) Должен ,быть .DORD=1, .SPE=1, MSTR=1, CPOL=0, CHPA=0.
Какая частота SCK?
Сообщение отредактировал solidreg - Jan 3 2006, 21:24
|
|
|
|
|
Jan 4 2006, 12:27
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(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 МГц
--------------------
|
|
|
|
|
Jan 5 2006, 00:32
|
Группа: Новичок
Сообщений: 14
Регистрация: 3-01-06
Пользователь №: 12 807

|
Вроде инициализация и всё остальное похожи на исходники ,только они на С или другом компиляторе ,где команда SPI передачи байта не раскрыта .Может я в ассемблере её неправильно описал? Вопрос ,на схемах я увидел что выбор Slave по команде из порта но не из PB4 (SS\) ,а я им выбираю память.Может так нельзя,или PB4 сам выдаёт сигнал при загрузке в SPDR данных ? Порекомендуйте компилятор ,только с описанием ,без лимита срока и популярный! Спасибо!
Вроде инициализация и всё остальное похожи на исходники ,только они на С или другом компиляторе ,где команда SPI передачи байта не раскрыта .Может я в ассемблере её неправильно описал? Вопрос ,на схемах я увидел что выбор Slave по команде из порта но не из PB4 (SS\) ,а я им выбираю память.Может так нельзя,или PB4 сам выдаёт сигнал при загрузке в SPDR данных ? Порекомендуйте компилятор ,только с описанием ,без лимита срока и популярный! Спасибо!
|
|
|
|
|
Jan 5 2006, 14:09
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(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 он никак не влияет, и может использоваться Вами по любому удобному назначению
Сообщение отредактировал prottoss - Jan 5 2006, 14:15
--------------------
|
|
|
|
|
Jan 15 2006, 11:16
|
Участник

Группа: Новичок
Сообщений: 42
Регистрация: 4-01-05
Из: г. Самара
Пользователь №: 1 803

|
В программе у тебя всё правильно. SPI настроить нужно следующим образом: DORD=0, .SPE=1, MSTR=1, CPOL=1, CHPA=1, вывод SS на вывод независимо от того используется он или нет, скорость работы SPI любая.
|
|
|
|
|
Jan 15 2006, 16:18
|
Группа: Новичок
Сообщений: 14
Регистрация: 3-01-06
Пользователь №: 12 807

|
Кто знает ? Рад любой мысли ! Вторую неделю тупею,своих идей уже нет ! При чтении регистра состояния АТ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
|
|
|
|
|
Jan 15 2006, 16:33
|
Участник

Группа: Новичок
Сообщений: 42
Регистрация: 4-01-05
Из: г. Самара
Пользователь №: 1 803

|
Могу прислать проект для ATmega8, там есть обмен с AT25256, работает 100%, только вчера с ним работал. А из памяти читать можешь или только не пишет утебя?
|
|
|
|
|
Jan 15 2006, 17:11
|
Участник

Группа: Новичок
Сообщений: 42
Регистрация: 4-01-05
Из: г. Самара
Пользователь №: 1 803

|
В твоей программе конфигурация 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, хотя должно работать!
|
|
|
|
|
Jan 16 2006, 00:06
|
Группа: Новичок
Сообщений: 14
Регистрация: 3-01-06
Пользователь №: 12 807

|
Спасибо за советы, жду новых !!! При любой конфигурации на выходе АТ25256 SO=1, вернее +5V поступает через подтягивающий резистор 10 кОм, а микросхема ничего не выдаёт (осцилограмма ровная) (импулисы CS,SCK,SI поступают). При чтении поэтому я всегда получаю FF. Перед записыванием небходимо считать регистр состояния памяти ,нулевой бит должен быть =0 ,а я читаю одни 11111111. Похоже память не отвечает ,а почему вопрос ? Порт SS выдаёт сигналы как надо,правильно. Три не рабочих микросемы врядли ,только если вся партия левая, хотя я пробовал 25LC640 CHIP ,они подобные( но 8кбайт,2МГц), тоже выхода нет .
|
|
|
|
|
Jan 16 2006, 07:52
|
Участник

Группа: Новичок
Сообщений: 42
Регистрация: 4-01-05
Из: г. Самара
Пользователь №: 1 803

|
А зачем ты SO повесил на 5В через резюк??? напрямую надо просто соединить с МК и всё, это же не I2C протокл, а SPI !!!
Покажи схему включения памяти!
|
|
|
|
|
Jan 16 2006, 08:34
|

Частый гость
 
Группа: Свой
Сообщений: 138
Регистрация: 19-06-04
Пользователь №: 63

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

Иногдящий
   
Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931

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

Частый гость
 
Группа: Свой
Сообщений: 138
Регистрация: 19-06-04
Пользователь №: 63

|
Цитата(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. Суди сам, чтобы заткнуть ее после записи придется ждать, а кому это интересно???
|
|
|
|
|
Jan 16 2006, 18:00
|
Группа: Новичок
Сообщений: 14
Регистрация: 3-01-06
Пользователь №: 12 807

|
С резаком видел схемы ,и они работали. Сам пробовал и с резаком и без ,перепробовал всё. Спасибо навёл на мысль про подключение на прямую, я программирую по SPI через STK2000 и выходы памяти с выходом программатора напрямую запараллелены постоянно. Возможно я спалил выход помяти через выход программатора .Завтра куплю "шестую" память и попробую отсоединять программатор. Как считаете?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|