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

 
 
> LPC1768 + AT45DB с использованием SSP
TAutomatic
сообщение May 26 2012, 13:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798



Добрый день, коллеги.
Волею судьбы пришлось использовать ARM в разработке. Столкнулись с такой проблемой. Нужно связать LPC1768 и AT45DB321. Опыт работы с этой датафлеш есть предостаточный, но все на PIC. Так вот, в чем проблема. Если использовать модуль SPI, вопросов не возникает, рабочий код для PIC был портирован практически без изменений и работает. Все бы ничего, но скорость обмена не более 12МГц. Датафлеш позволяет обмениваться быстрее, что собственно и нужно. При использовании SSP возникают нюансы, а именно: включается буфер FIFO глубиной 8 слов. Пока он не заполнен до верху, получается, невозможно считать данные. Допустим, кто знаком с работой датафлеши, на запрос о статусе надо принять всего единственный байт. Невозможно его получить, пока 8 раз не запросишь. Это разве удобства? А если выполнить блочное чтение, значит, нужно читать на 8 байт больше, что бы считать на вершине буфера свой нужный последний? Или я чего-то не понимаю? Почему у модуля УАРТ можно указать глубину буфера Фифо, тут нельзя. Как дали, так и кушать? Может кто подскажет, как проще выкрутиться? Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DmitryM
сообщение May 27 2012, 06:22
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(TAutomatic @ May 26 2012, 17:37) *
Допустим, кто знаком с работой датафлеши, на запрос о статусе надо принять всего единственный байт. Невозможно его получить, пока 8 раз не запросишь.

А какже следующее замечание для AT45DB321?
"After the one byte of the status register has been clocked out, the sequence will repeat itself (as long as CS remains low and SCK is being toggled). The data in the status register is constantly updated, so each repeating sequence will output new data."
Читайте себе на здоровье пока фифо не заполнится без перезапросов.
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение May 27 2012, 07:45
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798



Цитата(DmitryM @ May 27 2012, 09:22) *
А какже следующее замечание для AT45DB321?
"After the one byte of the status register has been clocked out, the sequence will repeat itself (as long as CS remains low and SCK is being toggled). The data in the status register is constantly updated, so each repeating sequence will output new data."
Читайте себе на здоровье пока фифо не заполнится без перезапросов.

Это замечание справедливо, и я им пользуюсь. После выдачи команды я в цикле посылаю только байт синхронизации 0xFF уже без команды, в отличии от коллеги, который привел кусок кода. Спасибо ему. Ну так и у меня заполняется буфер фифо, и рано или поздно я получаю искомый байт статуса. Считаете, это нормально? Вот таким образом неэффективно строить обмен? Вместо одного байта посылать 8 для получения результата? Это не мой метод. Должно быть красивое решение. Наверняка оно есть. Я знаток пиков, там все работает гуд, программируется и настраивается легко. Наверно и в ARM тоже все нормально, простоя пока мало знаком с ним.


Цитата(DmitryM @ May 27 2012, 09:34) *
Дык один раз подождал пока фифо не заполнилось и ушел заниматься полезным, если условие не удовлетворило, потом еще раз прочитал. Наверняка там еще и прерывание по заполнению фифо можно задействовать, если уж так пендитно ко времени простоя.

Не все так просто. Если бы можно было бы изначально заполнить и не париться- вопросов не возникло бы. Дело в том, что отправка команд и данных в сторону датафлеши вызывает прием в буфер данных типа 0xFF. Поэтому перед каждой операцией получения данных надо заново перезаполнять буфер. Или читать на 8 байт больше, чем нужно. Это хорошо с чтением данных или статуса, который можно прочитать в цикле несколько раз подряд и им заполнить буфер. А что делать с другими командами? несколько раз подряд их запрашивать? Нет, это неэффективно. Коллега прав, если у него работает, значит работает вообще, и у меня будет работать. Вот только где ошибка?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TAutomatic   LPC1768 + AT45DB с использованием SSP   May 26 2012, 13:37
- - jcxz   Не очень понятно в чём проблема? Работаю именно с ...   May 26 2012, 14:33
|- - TAutomatic   Ну мне кажется, я достаточно подробно описал, в ЧЕ...   May 26 2012, 15:57
- - aaarrr   Цитата(TAutomatic @ May 26 2012, 17:37) Д...   May 26 2012, 16:07
|- - TAutomatic   Цитата(aaarrr @ May 26 2012, 19:07) Это н...   May 26 2012, 16:20
|- - aaarrr   Цитата(TAutomatic @ May 26 2012, 20:20) ....   May 26 2012, 16:35
|- - TAutomatic   У коллеги, кстати, тоже не так работает, как хотел...   May 26 2012, 16:45
|- - jcxz   Цитата(TAutomatic @ May 26 2012, 22:45) У...   May 26 2012, 17:25
|- - TAutomatic   Цитата(jcxz @ May 26 2012, 20:25) Это как...   May 26 2012, 17:43
|- - _Артём_   Цитата(DmitryM @ May 27 2012, 09:22) А ка...   May 27 2012, 06:26
||- - DmitryM   Цитата(_Артём_ @ May 27 2012, 10:26) Смыс...   May 27 2012, 06:34
- - aaarrr   1. Нет ни малейшей необходимости заполнять FIFO по...   May 27 2012, 08:32
- - _Артём_   Цитата(aaarrr @ May 27 2012, 11:32) 1. Не...   May 27 2012, 08:47
- - TAutomatic   Цитата(_Артём_ @ May 27 2012, 11:47) Точн...   May 27 2012, 13:05
- - TAutomatic   Всем спасибо, кто откликнулся. Дело действительно ...   May 28 2012, 13:31


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

 


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


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