реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
AHTOXA
сообщение Jan 4 2011, 19:24
Сообщение #16


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Alt.F4 @ Jan 5 2011, 03:17) *
Ну в этом графике тоже нигде не указано, что при последующих чтениях байтов надо слать один dummy.

Так устроен SPI. Для того, чтобы прочитать байт, надо записать байт. Это никак не связано с AT45.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 4 2011, 19:34
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Нет, сейчас речь не об этом. rezident мне это еще в октябре объяснил a14.gif
Другое дело, что надо провести "пустой обмен" перед полезным обменом (читай чтением), что в даташите не описано.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 4 2011, 19:44
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Alt.F4 @ Jan 5 2011, 03:34) *
Другое дело, что надо провести "пустой обмен" перед полезным обменом (читай чтением), что в даташите не описано.
В даташите все описано. И для подавляющего большинства описанное понятно. Если вы не можете понять прочитанное, то я вам только посочувствовать могу laughing.gif Взгляните еще раз на временные диаграммы. Там же все по тактам указано!
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 4 2011, 19:48
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Смотрю еще раз. По тактам указано только до 72 включительно.
Причем 64 такта это команда, адреса страницы и байта, и 4 dummy bytes. Затем 8тактов - чтение. Следующих за чтением тактов не описано, что для того чтобы читать далее, надо слать только один dummy и затем читать, потом опять один dummy и чтение и так пока CS не будет = 1.

Сообщение отредактировал Alt.F4 - Jan 4 2011, 19:49
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 4 2011, 20:02
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Alt.F4 @ Jan 5 2011, 03:34) *
Другое дело, что надо провести "пустой обмен" перед полезным обменом (читай чтением), что в даташите не описано.

Откуда вы это тогда узнали, если это не описано в даташите?
(Что-то не припоминаю необходимости передачи dummy-байта перед чтением каждого байта при последовательном чтении...)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 4 2011, 20:05
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Опытным путем. Стал проигрывать музыку и на слух определял, что идет пропуск байтов.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 4 2011, 20:13
Сообщение #22


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Значит дело в чём-то другом. Потому что (я ещё раз посмотрел) при последовательном чтении dummy-байты нужны только в начале. Может наоборот, воспроизводить не успеваете?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 4 2011, 20:23
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Вы наверное работаете в режиме Continuous Array Read (Low Frequency Mode: 03H)
Я веду речь о Main Memory Page Read (команда D2H) - постраничное чтение
з.ы. все работает когда в последующем чтении сперва отсылаю dummy, а затем читаю. Воспроизводить успеваю.

Сообщение отредактировал Alt.F4 - Jan 4 2011, 20:27
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 5 2011, 07:32
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Alt.F4 @ Jan 5 2011, 03:48) *
По тактам указано только до 72 включительно.
Причем 64 такта это команда, адреса страницы и байта, и 4 dummy bytes. Затем 8тактов - чтение. Следующих за чтением тактов не описано, что для того чтобы читать далее, надо слать только один dummy и затем читать, потом опять один dummy и чтение и так пока CS не будет = 1.
Это и так понятно любому здравомыслящему инженеру. И вам должно быть понятно, т.к. вы уже знаете - для того, чтобы что-то прочитать нужно что-то передать потому, что так работает синхронный интерфейс SPI.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 5 2011, 07:57
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Вы меня не понимаете!!! Приведу листинг:
Код
SPI_exchange:
    out        SPDR,data_temp; передаем
  wait_spi_transmit:;
    in        temp,SPSR;
    sbrs    temp,(SPIF);ждем когда произойдет передача
    rjmp    wait_spi_transmit;
    in        data_temp,SPDR;читаем принятое
ret                ;

Теперь представим, что команду, адреса страницы и байта, и dummy передали.
Пробуем читать дальше не дергая CS.
rcall SPI_exchange ;
rcall SPI_exchange ;
грузим data_temp в регистр сравнения таймера, для управления ШИМом

Вот таким образом читается без потерь! Если делать только одну транзакцию перед загрузкой "звукового байта" в регистр сравнения таймера, происходит пропуск байта!

Сообщение отредактировал Alt.F4 - Jan 5 2011, 07:59
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 5 2011, 08:18
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А причем тут DataFlash? cranky.gif Проблема где-то в (вашей) конкретной реализации программного протокола или (вашего) использования SPI-модуля в МК. Поскольку с AVR я знаком шапочно, то специально разбираться с флагами и регистрами его модуля SPI не имею большого желания. Может там какой-то флаг (который автоматически сбрасывается при работе по прерываниям) перед записью/чтением программно сбрасывать нужно?
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 5 2011, 08:26
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Я по SPI передачу осуществляю без прерываний. Т.е. по идее байт должен был прочитаться за одну транзакцию?
По сути, там и настроек SPI у AVR минимум, вот они.
Мои настройки: прерывания выключены, SPE=1 (вкл), старший бит первым, режим Master, полярность SCK - низкий уровень, фаза тактового сигнала - по нарастающему фронту.

Сообщение отредактировал Alt.F4 - Jan 5 2011, 08:34
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 5 2011, 08:36
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Alt.F4 @ Jan 5 2011, 16:26) *
По сути, там и настроек SPI у AVR минимум, вот они.
Ага. Кажется понятно, где тут собака порылась. См. описание бита SPIF на следующей странице.
Цитата
Bit 7 - SPIF: SPI Interrupt Flag - Флаг прерывания по SPI
По завершении обмена последовательными данными бит SPIF устанавливается в состояние 1 и, если бит SPIE в регистре SPCR установлен и разрешено глобальное прерывание, генерируется сигнал прерывания. Бит SPIF очищается аппаратно при выполнении подпрограммы обработки соответствующего вектора прерывания. Бит SPIF может быть очищен также при первом считывании состояния регистра статуса SPI, с установленным битом SPIF, с последующим обращением к регистру данных SPI (SPDR).

Добавьте в свою функцию команду чтения регистра SPSR перед записью в регистр SPDR.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 5 2011, 09:09
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Попробовал, тоже самое - работает только при двойной транзакции. Да и по сути, если бы передача была не верна, то команда и адрес не передавались бы.
Кстати обращение к SPSR есть в строке после передачи: in temp,SPSR; Таким образом флаг SPIF сбрасывается и только после 4 тактов (при скорости f/4) устанавливается вновь

Сообщение отредактировал Alt.F4 - Jan 5 2011, 09:09
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 06:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01684 секунд с 7
ELECTRONIX ©2004-2016