Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по работе SPI
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
dmitry_michalych
Всем доброго времени суток.
Исходные данные - SPI в ATMeg'e стоит в режиме slave, примерно раз в 10-15 секунд принимается посылка из 7 байт, которые раз от раза не меняются. CPOL=0, CPHA=1. Если в промежутках "тишины" на входе CLK проскочит короткий помеховый импульс, SPI воспримет его как приход первого бита? И в следующем пришедшем байте потеряется последний бит?
Как с этим бороться? Нажмите для просмотра прикрепленного файла
_dem
Бороться CS-ом.
dmitry_michalych
Вы имели ввиду SS? Он увы, отсутствует. На землю посажен. Тот кто мастер, шлет данные и формирует клок. И если ему взбредет между посылками дернуть клок хоть разок, все последующие принятые данные идут в мусор. Посему я и хотел уточнить, есть ли у SPI какая-я то временная защита типа тайм-аутов, или все плохо, так как я склонен сейчас думать?
zltigo
Цитата(dmitry_michalych @ Apr 7 2010, 21:36) *
Посему я и хотел уточнить, есть ли у SPI какая-я то временная защита типа тайм-аутов, или все плохо, так как я склонен сейчас думать?

А причем тут собственно SPI? Вы подключили три провода выкинув CS выступающий в качестве фреймового сигнала к некоторому устройству. Пока контролер ими НЕ управляет извне прибегает "помеха". Теперь Вы спрашиваете о том, нет-ли в этих трех продах интеллекта? В проводах интеллекта нет. Как способно устройство приемник выделять фреймы без CS - вопрос к устройству.
rezident
Цитата(dmitry_michalych @ Apr 8 2010, 01:22) *
Как с этим бороться?
Раз нет отдельного сигнала фреймовой синхронизации, то "боритесь" с помощью "временной" синхронизации. То бишь по истечение паузы определенной длительности во время которой не было приема, реинициализируйте модуль SPI, сбрасывая его логику.
dmitry_michalych
Да, так и придется. Спасибо!
zltigo
Цитата(rezident @ Apr 7 2010, 22:07) *
реинициализируйте модуль SPI, сбрасывая его логику.

и если "повезет" вместе с идущим правильным фреймом sad.gif
dmitry_michalych
Тут ведь как? Или повезет, или не повезет. Ну нет у меня SS, и помехи лезут. Собственно, если разок не повезет, то и не страшно. Все, вопрос снят, всем сенкс!
rezident
Цитата(zltigo @ Apr 8 2010, 02:15) *
и если "повезет" вместе с идущим правильным фреймом sad.gif
Если частота тактирования SPI не 100Гц а гораздо выше, то учитывая что
Цитата(dmitry_michalych @ Apr 8 2010, 01:22) *
примерно раз в 10-15 секунд принимается посылка из 7 байт
ничего теряться не должно. Конечно желательно, чтобы мастер тоже выдерживал оговоренную паузу между передачами.
zltigo
Цитата(rezident @ Apr 7 2010, 22:56) *
тоже выдерживал оговоренную паузу между передачами.

И как часто сбрасывать? каждые 9,999 или 14,999 секунд?
Тогда уж пусть гонит периодически "пустой" байт заполнитель и байт "начало фрейма" в начале оного. Получение любого байта не заполнителя и не начала фрейма - сброс SPI
dmitry_michalych
на мастера мне никак не повлиять. Думаю SCK завести на INT и отсчитывать время между фронтами клока, скорость передачи известна, благо контроллеру кроме как транслировать делать больше нечего
zltigo
Цитата(dmitry_michalych @ Apr 7 2010, 23:05) *
Думаю SCK завести на INT и..

Тогда уж через общий буфер типа триггерка шмидта и одновибратора, ибо ловить невнятную помеху два входа однообразно не обязаны.
dmitry_michalych
согласен
rezident
Цитата(zltigo @ Apr 8 2010, 02:59) *
Тогда уж пусть гонит периодически "пустой" байт заполнитель и байт "начало фрейма" в начале оного. Получение любого байта не заполнителя и не начала фрейма - сброс SPI
Ну топикстартер умолчал, используется ли какой-то протокол с контролем CRC пакета или передаются 7 байт "чистой" информации? И что должно происходить в случае обнаружения ошибки? Весь фрейм в "мусорку" или передача должна повториться?
dmitry_michalych
Про crc это уже другое. Собственно интересовало именно то, что если в качестве клока приходит ахинея из импульсов разной длительности, SPI-ю все равно, на восьмом спаде скажет, что у него байт готов. Думал, может там есть какие-то механизмы, как у com-порта, типа щучить отклонения в скорости передачи, тайм-ауты..
rezident
Цитата(dmitry_michalych @ Apr 8 2010, 03:37) *
Про crc это уже другое.
Почему другое? Контроль целостности данных это самый основной вопрос при передаче этих данных по любым линиям связи.
Цитата(dmitry_michalych @ Apr 8 2010, 03:37) *
Думал, может там есть какие-то механизмы, как у com-порта, типа щучить отклонения в скорости передачи, тайм-ауты..
Дык SPI - синхронный интерфейс, UART - асинхронный.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.