|
LPC1768 + AT45DB с использованием SSP |
|
|
|
May 26 2012, 13:37
|
Участник

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

|
Добрый день, коллеги. Волею судьбы пришлось использовать ARM в разработке. Столкнулись с такой проблемой. Нужно связать LPC1768 и AT45DB321. Опыт работы с этой датафлеш есть предостаточный, но все на PIC. Так вот, в чем проблема. Если использовать модуль SPI, вопросов не возникает, рабочий код для PIC был портирован практически без изменений и работает. Все бы ничего, но скорость обмена не более 12МГц. Датафлеш позволяет обмениваться быстрее, что собственно и нужно. При использовании SSP возникают нюансы, а именно: включается буфер FIFO глубиной 8 слов. Пока он не заполнен до верху, получается, невозможно считать данные. Допустим, кто знаком с работой датафлеши, на запрос о статусе надо принять всего единственный байт. Невозможно его получить, пока 8 раз не запросишь. Это разве удобства? А если выполнить блочное чтение, значит, нужно читать на 8 байт больше, что бы считать на вершине буфера свой нужный последний? Или я чего-то не понимаю? Почему у модуля УАРТ можно указать глубину буфера Фифо, тут нельзя. Как дали, так и кушать? Может кто подскажет, как проще выкрутиться? Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
May 27 2012, 06:22
|
Знающий
   
Группа: Свой
Сообщений: 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." Читайте себе на здоровье пока фифо не заполнится без перезапросов.
|
|
|
|
|
May 27 2012, 07:45
|
Участник

Группа: Участник
Сообщений: 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 байт больше, чем нужно. Это хорошо с чтением данных или статуса, который можно прочитать в цикле несколько раз подряд и им заполнить буфер. А что делать с другими командами? несколько раз подряд их запрашивать? Нет, это неэффективно. Коллега прав, если у него работает, значит работает вообще, и у меня будет работать. Вот только где ошибка?
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|