ViKo 1 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Ваще-то речь о приёме. Или вы имеете в виду, что поскоку приём это тоже передача (:-)) то вся эта фигня с проверкой BSY или TXE и здесь может нагадить? Но ведь используется последняя либа от производителя.... Да... Вот так надо делать :rolleyes: (на имя ANAS не обращайте внимания, это SPI) ANSYN_ON(); // \__ ANAS->DR = (uint8_t)(data >> 8); // послать биты 15 - 8 while (!(ANAS->SR & SPI_SR_TXE)); // ждать освобождение буфера ANAS->DR = (uint8_t)(data); // послать биты 7 - 0 while (!(ANAS->SR & SPI_SR_TXE)); // ждать освобождение буфера // while (!(ANAS->SR & SPI_SR_RXNE)); // ждать конец передачи - нельзя! while (ANAS->SR & SPI_SR_BSY); // ждать освобождение приемопередатчика ANSYN_OFF(); // __/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба младший бит принимается последним. Разные SPI по разному формируют завершающий клок и чип селект, добавив данные которые с линии могут пропасть когда им угодно, так что последний бит особенно уязвим. Потому надо действительно поглядеть осцилограмму сигнала, и проверить все задержки между клоком, чипселектом и изменением данных.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
porty 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Тогда будут ВСЕ биты нестабильны. нет, сейчас почти вся цифра очень быстрая и фронты крутые, и редко когда клоки и данные стык в стык меняются. обычно одно относительно другого на 1-10нс сдвинуто ... но иногда с прогревом например сдвигается в обратную сторону - вот тут и вылазят глюки. На моей практике всегда было иначе - что мегабайты успешно проходили и только пара бит проскакивала левых. Поэтому советую проверить так - подключить 1к в разрыв клокам или данным, но не вместе - если глюков больше стало то скорее всего полярность клоков. А так же затронуть пальцем - если повлияли наводки то наводится ложный клок - надо делать клоки круче или ставить фильтры на ложные клоки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Посмотрел как в либе сделано, там конечно 130 строк кода на убогую процедуру передачи :-))) но вроде бы действительно проверяется сначала TXE, а перед выключением ещё и BSY, то есть всё нормально. Кому хочецо осцыллограмму, получайте. Что мы тут видим:: вторым байтом идёт 0х85, но в DR в итоге принимается 0x84. Напоминаю, это вообще-то приём. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Может, неправильно задана частота периферийных шин микроконтроллера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Может, неправильно задана частота периферийных шин микроконтроллера? А чё там может быть? SYSCLK 84 HCLK 84 APB1 42 APB2 84 Ещё пример. Первый байт принимается как 0х83!! Второй как 0х4Е!! :-о Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба А если порту, что такты выдает, добавить тока (частоты работы)? Или уменьшить? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lerk 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 (изменено) · Жалоба Почему у вас одна осциллограмма с 1мкс/квадрат, а другая 10мкс/квадрат? Это один и тот же SPI? И неплохо бы видеть еще и SS. Ну и на первой осциллограмме у вас что-то странное с уровнями на линии данных. Изменено 17 февраля, 2015 пользователем Lerk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба И, это... Peak Detect у вас включен в осциллографе? А BW Limit выключен? А с подключенным пробником лучше не становится? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба А если порту, что такты выдает, добавить тока (частоты работы)? Или уменьшить? :rolleyes: В смысле скорость нарастания? Специально поставлена на минимум, чтобы звона и шума не было. Для эксперимента ставил на максимум - существенно ничего не меняется. Почему у вас одна осциллограмма с 1мкс/квадрат, а другая 10мкс/квадрат? Это один и тот же SPI? И неплохо бы видеть еще и SS. Ну и на первой осциллограмме у вас что-то странное с уровнями на линии данных. Потому что на разных скоростях пробовал. С НСС всё нормально. Что не так с уровнями? Просто земля, куда щуп прицеплен, немного плавает. И, это... Peak Detect у вас включен в осциллографе? А BW Limit выключен? А с подключенным пробником лучше не становится? :) Никаких фокусов и полтергейста нет. Вот гладенькие фронты, если чё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Никаких фокусов и полтергейста нет. Вот гладенькие фронты, если чё. Меньше 2V? А что так ма Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Меньше 2V? А что так ма Куда же больше?? В конце 21-ого века живём, как-никак. Питание 1.8. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lerk 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Что не так с уровнями? Просто земля, куда щуп прицеплен, немного плавает. у вас линия данных до начала передачи имеет землю - 0, а во время и после передачи - 0.2В. Не то чтобы сильно большая разница, и может даже не касается темы обсуждения, но в цифровых схемах такого просто так не бывает, и видимо, дизайном не предусмотрено, а значит должна быть найдена и устранена причина плавающего нуля на линии данных. имхо) 2ViKo, f4 же работает и на 1.8В Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Куда же больше?? В конце 21-ого века живём, как-никак. Питание 1.8. Понятно. Там для разного питания разную латентность Flash нужно задать. Надо думать, у вас все правильно задано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Понятно. Там для разного питания разную латентность Flash нужно задать. Надо думать, у вас все правильно задано? Стоит 5-ая. Это ещё с запасом. Только я вот думаю, она от частоты зависит (а частота ещё от напряжения ядра), а не от напряжения IO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться