|
STM32 конец клока SPI |
|
|
|
Sep 17 2016, 13:05
|

Местный
  
Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901

|
Всем доброго дня. Завожу MRF24J40. SPI. Аппаратного CS нету, вылезаем софтверно. Ногу CS опускаю в начале записи, поднимаю по прерыванию RXNEIE. Все вроде бы нормально (процесс записи в регистр 0x18 значения 0x98):  Но есть проблема - как оказалось запись в чип происходит по спаду клока, пока еще выбран CS. Точнее захват может и по фронту происходит, но запись точно по спаду. И тут возникает проблема - прерывание происходит на половине последнего клока - то есть его фронт уже был, прошла четверть периода клока и прерывается. Соответственно я поднимаю CS. Но как показали опыты если его поднять до того, как клок упадет вниз запись не произведется. Собственно вопрос - как оптимально сдвинуть CS на половину периода клока? То есть после того, как он опустится. Спасибо. PSОчень интересно - проблема решилась сама собой с увеличением частоты. На скриншоте частота = 24МГц/256. поставил делитель 64 и CS сдвинулся более чем на пол периода
|
|
|
|
|
Sep 17 2016, 13:57
|

Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474

|
Лично у меня - вот такая конструкция: Код GPIOA->BSRR = (GPIO_BSRR_BR_2 | GPIO_BSRR_BR_6); // nCS DN, D/C# DN SPI1->DR = command; while (!(SPI1->SR & SPI_SR_TXE)); while (SPI1->SR & SPI_SR_BSY); GPIOA->BSRR = GPIO_BSRR_BS_2; // nCS UP Магия? Возможно. Но без первой инструкции ожидания порой пролетал мимо передачи и пин /CS дёргался вниз-вверх за 2 такта, а уже после этого начиналась передача. Третью строку можно убрать, но на свой страх и риск.
Сообщение отредактировал AlanDrakes - Sep 17 2016, 13:59
|
|
|
|
|
Sep 18 2016, 08:20
|

Местный
  
Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901

|
Цитата(jcxz @ Sep 18 2016, 07:41)  Использовать другой режим SPI (биты CPOL, CPHA). Это не то. Они не дали того эффекта Цитата(ViKo @ Sep 18 2016, 08:59)  В прерывании от TXE (или от RXNE, если очень хочется) дождитесь BSY, не много потеряете. Если внимательно рассмотрите RM, увидите на картинках, что да как. Ждать тоже не хочется - все таки это не хороший тон ждать в прерывании. В любом случае я добился своего. А по поводу mrf - походу антенна не заходит в кабель. Кабель и антенну купил в разных местах и промазал походу. вот такой набор:  Ее подергаешь бац - несколько пакетов подряд примет, потом о5 пропадает. Короче антенну заменю.
|
|
|
|
|
Sep 18 2016, 14:01
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(RadiatoR @ Sep 18 2016, 14:20)  Это не то. Они не дали того эффекта Что именно "не то"? Судя по картинке у Вас CPOL=0, CPHA=0. Т.е. - Вы настроили защёлкивание данных по фронту SCLK. И в то же время пишете: Цитата(RadiatoR @ Sep 17 2016, 19:05)  как оказалось запись в чип происходит по спаду клока, Так всё-таки: чип MRF24J40 защёлкивает данные по фронту или по спаду??? Неужели на этот чип нет доки? Или читать не умеете? Если всё-таки по спаду, то CPOL=1, CPHA=0 - должно решить проблему.
|
|
|
|
|
Sep 19 2016, 10:08
|

Местный
  
Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901

|
Цитата(jcxz @ Sep 18 2016, 17:01)  Или читать не умеете? К вашему сведению не всем людям нравится читать такие "наезды". Прошу в отношении меня впредь от них воздержаться. А по сабжу - как происходит запись/захват я описал еще в первом посте. Захват происходит по фронту. Все как полагается. Но, видимо, захват значения (при записи в регистры mrf) происходит по фронту, а запись этого значения по спаду, при включенном CS. Опыты показали именно такое поведение. CPOL и CPHA созданы для другого.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|