scifi 1 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба CPOL и CPHA созданы для другого. Топор создан для того, чтобы рубить, но это не значит, что им невозможно забить гвоздь. Так что "создан для другого" - это аргумент приблизительно такого же качества, как и ссылки на "хороший тон" Короче, если без иносказаний, то просто попробуйте. Результаты легко могут вас удивить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Прочтите внимательнее мое сообщение: Они не дали того эффекта Писал я в прошлом времени - значит попробовал. Перестало вообще работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба "Не верю" (С) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба А по сабжу - как происходит запись/захват я описал еще в первом посте. Захват происходит по фронту. Т.е. - это не Вы писали, а Ваш клон наверное?: Но есть проблема - как оказалось запись в чип происходит по спаду клока, пока еще выбран CS. Точнее захват может и по фронту происходит, но запись точно по спаду. И что такое в Вашей терминологии "запись" и "захват"? И в чём между ними разница? Думаю многим тут будет интересно. Все как полагается. Но, видимо, захват значения (при записи в регистры mrf) происходит по фронту, а запись этого значения по спаду, при включенном CS. Опыты показали именно такое поведение. Что есть "запись", а что есть "захват"? Ещё раз настоятельно советую наконец-то открыть мануал на чип, а не заниматься "опытами". CPOL и CPHA созданы для другого. Интересно - для чего же? Просветите. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Что бы лишний раз не распинаться опишу - формат работы с mrf стандартный. Работает нормально при CPOL и CHPA = 0. Мне тоже интересно почему чип отказывается производить запись по фронту. В самом первом посте в 1 скрине я пытаюсь записать байт в регистр. Он не записывается если CS поднимается до спада клока. Если точно таким же образом прочитать данные - они выведутся по фронту клока. То есть так как и полагается. Получается либо запись (она же захват (может буфер какой внутри есть.. я не знаю)) осуществляется по спаду и чтение по фронту, либо есть какой-то буфер захвата. CPOL и CHPA меняют режимы. Не будем придираться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба В самом первом посте в 1 скрине я пытаюсь записать байт в регистр. Он не записывается если CS поднимается до спада клока. Специально заглянул в даташит. Там на картинке видно, что SCK должен упасть в 0 перед подъёмом CS. Так что нарушаете. Цифры времянки не приведены (видимо, планируют позже дописать), но мне известны микросхемы, у которых то же самое, и там времянка не оставляет сомнений, что SCK должен упасть перед тем, как CS поднимется. Опять же из даташита видно, что есть единственный правильный режим CPOL = 0, CHPA = 0, так что менять его не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 19 сентября, 2016 Опубликовано 19 сентября, 2016 (изменено) · Жалоба … Работает нормально при 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нс. Изменено 19 сентября, 2016 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Вот вот. Я и говорю об этом. Всмысле про то, что если поднять CS раньше, то он не запишется. График я видел. Просто чтение нормально проходит если CS бросить раньше, а запись нет. Вот и встал вопрос об продлении CS сигнала без ожидания. В общем что бы не разглагольствовать предлагаю закончить. Результата я добился. Всем спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Простой способ продлить CS дольше не прибегая к таймеру и ожиданиям: в последнем прерывании RXNEIE уменьшить длину слова до минимума и выплюнуть на передачу ещё одно слово. Если логика внутри чипа сделана прямыми руками, то это никак не повредит обмену, так как по подъёму CS битовый счётчик будет сброшен. Хотя на этот счёт лучше всё-таки уточнить по доке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 1 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Простой способ продлить CS дольше не прибегая к таймеру и ожиданиям У меня проще - обмен идет с использованием DMA, CS управляется в прерывании от DMA контроллера, по окончании приема блока данных. К этому времени уже все передано и принято. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба У меня проще - обмен идет с использованием DMA, CS управляется в прерывании от DMA контроллера, по окончании приема блока данных. К этому времени уже все передано и принято. Через DMA я скорее всего делать не буду, но попробовать можно. Хотя бы посмотреть как себя будет CS вести. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 21 сентября, 2016 Опубликовано 21 сентября, 2016 · Жалоба Через DMA я скорее всего делать не буду, но попробовать можно. Ну и зря. Особенно, если устройство с батарейным питанием. С DMA обмен будет проходить быстрее, а следовательно, экономим немного Джоулей на работе ядра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 21 сентября, 2016 Опубликовано 21 сентября, 2016 · Жалоба Ну и зря. Особенно, если устройство с батарейным питанием. С DMA обмен будет проходить быстрее, а следовательно, экономим немного Джоулей на работе ядра. Не, батарейки нет никакой. Да и быстродействие особое не нужно (по крайней мере на прерываниях скорости более чем достаточно, а поднять DMA это 1-2 дня будет - для меня это дорого выйдет) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 21 сентября, 2016 Опубликовано 21 сентября, 2016 · Жалоба Стандартные библиотеки не наш метод? Уважуха! :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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 21 сентября, 2016 Опубликовано 21 сентября, 2016 · Жалоба Приятно видеть людей, которые понимают в чем прелесть собственного кода без сторонних либ и ХАЛов. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться