Перейти к содержанию
    

CPOL и CPHA созданы для другого.

Топор создан для того, чтобы рубить, но это не значит, что им невозможно забить гвоздь.

Так что "создан для другого" - это аргумент приблизительно такого же качества, как и ссылки на "хороший тон" :biggrin:

Короче, если без иносказаний, то просто попробуйте. Результаты легко могут вас удивить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прочтите внимательнее мое сообщение:

Они не дали того эффекта

 

Писал я в прошлом времени - значит попробовал. Перестало вообще работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А по сабжу - как происходит запись/захват я описал еще в первом посте. Захват происходит по фронту.

Т.е. - это не Вы писали, а Ваш клон наверное?:

Но есть проблема - как оказалось запись в чип происходит по спаду клока, пока еще выбран CS. Точнее захват может и по фронту происходит, но запись точно по спаду.

И что такое в Вашей терминологии "запись" и "захват"? И в чём между ними разница? Думаю многим тут будет интересно.

 

Все как полагается. Но, видимо, захват значения (при записи в регистры mrf) происходит по фронту, а запись этого значения по спаду, при включенном CS. Опыты показали именно такое поведение.

Что есть "запись", а что есть "захват"?

Ещё раз настоятельно советую наконец-то открыть мануал на чип, а не заниматься "опытами".

 

CPOL и CPHA созданы для другого.

Интересно - для чего же? Просветите. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что бы лишний раз не распинаться опишу - формат работы с mrf стандартный. Работает нормально при CPOL и CHPA = 0. Мне тоже интересно почему чип отказывается производить запись по фронту.

В самом первом посте в 1 скрине я пытаюсь записать байт в регистр. Он не записывается если CS поднимается до спада клока. Если точно таким же образом прочитать данные - они выведутся по фронту клока. То есть так как и полагается. Получается либо запись (она же захват (может буфер какой внутри есть.. я не знаю)) осуществляется по спаду и чтение по фронту, либо есть какой-то буфер захвата.

 

CPOL и CHPA меняют режимы. Не будем придираться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В самом первом посте в 1 скрине я пытаюсь записать байт в регистр. Он не записывается если CS поднимается до спада клока.

Специально заглянул в даташит. Там на картинке видно, что SCK должен упасть в 0 перед подъёмом CS. Так что нарушаете. Цифры времянки не приведены (видимо, планируют позже дописать), но мне известны микросхемы, у которых то же самое, и там времянка не оставляет сомнений, что SCK должен упасть перед тем, как CS поднимется.

Опять же из даташита видно, что есть единственный правильный режим CPOL = 0, CHPA = 0, так что менять его не получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

… Работает нормально при CPOL и CHPA = 0. Мне тоже интересно почему чип отказывается производить запись по фронту.

В самом первом посте в 1 скрине я пытаюсь записать байт в регистр. Он не записывается если CS поднимается до спада клока…

Только так он и будет работать (CPOL = 0: SCK to 0 when idle, CHPA = 0: The first clock transition is the first data capture edge) см. рис. 2-4, 2-5 стр. 12 DS39776C.

 

В даташите на этот трансивер английским по белому:"The CS pin must be held low while communicating with the MRF24J40." Ну и опять же рисунок недвусмысленно это подтверждает.

 

CS не должен (не может, если не хотим чудес) сниматься (0 --> 1) раньше заднего фронта (1 --> 0) последнего импульса SCK.

 

Хоть и опередили, но CS ↑ after SCK Edge не менее 50нс.

Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот вот. Я и говорю об этом. Всмысле про то, что если поднять CS раньше, то он не запишется. График я видел. Просто чтение нормально проходит если CS бросить раньше, а запись нет. Вот и встал вопрос об продлении CS сигнала без ожидания.

 

В общем что бы не разглагольствовать предлагаю закончить. Результата я добился.

Всем спасибо за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простой способ продлить CS дольше не прибегая к таймеру и ожиданиям: в последнем прерывании RXNEIE уменьшить длину слова до минимума и выплюнуть на передачу ещё одно слово. Если логика внутри чипа сделана прямыми руками, то это никак не повредит обмену, так как по подъёму CS битовый счётчик будет сброшен. Хотя на этот счёт лучше всё-таки уточнить по доке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простой способ продлить CS дольше не прибегая к таймеру и ожиданиям

У меня проще - обмен идет с использованием DMA, CS управляется в прерывании от DMA контроллера, по окончании приема блока данных. К этому времени уже все передано и принято.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня проще - обмен идет с использованием DMA, CS управляется в прерывании от DMA контроллера, по окончании приема блока данных. К этому времени уже все передано и принято.

 

Через DMA я скорее всего делать не буду, но попробовать можно. Хотя бы посмотреть как себя будет CS вести.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через DMA я скорее всего делать не буду, но попробовать можно.

Ну и зря. Особенно, если устройство с батарейным питанием. С DMA обмен будет проходить быстрее, а следовательно, экономим немного Джоулей на работе ядра.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и зря. Особенно, если устройство с батарейным питанием. С DMA обмен будет проходить быстрее, а следовательно, экономим немного Джоулей на работе ядра.

 

Не, батарейки нет никакой. Да и быстродействие особое не нужно (по крайней мере на прерываниях скорости более чем достаточно, а поднять DMA это 1-2 дня будет - для меня это дорого выйдет)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стандартные библиотеки не наш метод? Уважуха! :beer:

По использованию без библиотек для начала все можно глянуть сюда

http://we.easyelectronics.ru/STM32/primery...-bibliotek.html

 

А так все просто:

 

Для STM32F10x

void DmaXfer(void const * txbuf,
             void       * rxbuf, 
             int len)
{
  DMA1_Channel2->CCR = 0;
  DMA1_Channel3->CCR = 0;
  
  DMA1->IFCR = DMA_IFCR_CGIF2;
  
  DMA1_Channel2->CPAR = (uint32_t)&SPI1->DR; //DR Base 
  DMA1_Channel2->CMAR = (uint32_t)rxbuf;
  DMA1_Channel2->CNDTR = len;
  
  DMA1_Channel3->CPAR = (uint32_t)&SPI1->DR; //DR Base
  DMA1_Channel3->CMAR = (uint32_t)txbuf;
  DMA1_Channel3->CNDTR = len;
  
  DMA1_Channel2->CCR = 0 
                      | DMA_CCR_MSIZE_0
                      | DMA_CCR_PSIZE_0 // 16 bit
                      | DMA_CCR_MINC
                      | DMA_CCR_TCIE
                      | DMA_CCR_EN;
                        
  DMA1_Channel3->CCR = 0 
                      | DMA_CCR_MSIZE_0
                      | DMA_CCR_PSIZE_0 // 16 bit
                      | DMA_CCR_MINC
                      | DMA_CCR_DIR
                      | DMA_CCR_EN;

  SPI1->CR2 |= 0
   |SPI_CR2_RXDMAEN // разрешить передачу принятых данных через DMA
   | SPI_CR2_TXDMAEN; // Разрешить принимать данные для передачи через DMA  
   ;  
  
  while (!(DMA1->ISR & (DMA_ISR_TCIF2 | 0)));
  
  return;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приятно видеть людей, которые понимают в чем прелесть собственного кода без сторонних либ и ХАЛов. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...