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

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

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

реинициализируйте модуль SPI, сбрасывая его логику.
и если "повезет" вместе с идущим правильным фреймом
dmitry_michalych
Apr 7 2010, 20:17
Тут ведь как? Или повезет, или не повезет. Ну нет у меня SS, и помехи лезут. Собственно, если разок не повезет, то и не страшно. Все, вопрос снят, всем сенкс!
rezident
Apr 7 2010, 20:41
Цитата(zltigo @ Apr 8 2010, 02:15)

и если "повезет" вместе с идущим правильным фреймом

Если частота тактирования SPI не 100Гц а гораздо выше, то учитывая что
Цитата(dmitry_michalych @ Apr 8 2010, 01:22)

примерно раз в 10-15 секунд принимается посылка из 7 байт
ничего теряться не должно. Конечно желательно, чтобы мастер тоже выдерживал оговоренную паузу между передачами.
Цитата(rezident @ Apr 7 2010, 22:56)

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

Думаю SCK завести на INT и..
Тогда уж через общий буфер типа триггерка шмидта и одновибратора, ибо ловить невнятную помеху два входа однообразно не обязаны.
dmitry_michalych
Apr 7 2010, 21:09
согласен
rezident
Apr 7 2010, 21:10
Цитата(zltigo @ Apr 8 2010, 02:59)

Тогда уж пусть гонит периодически "пустой" байт заполнитель и байт "начало фрейма" в начале оного. Получение любого байта не заполнителя и не начала фрейма - сброс SPI
Ну топикстартер умолчал, используется ли какой-то протокол с контролем CRC пакета или передаются 7 байт "чистой" информации? И что должно происходить в случае обнаружения ошибки? Весь фрейм в "мусорку" или передача должна повториться?
dmitry_michalych
Apr 7 2010, 21:22
Про crc это уже другое. Собственно интересовало именно то, что если в качестве клока приходит ахинея из импульсов разной длительности, SPI-ю все равно, на восьмом спаде скажет, что у него байт готов. Думал, может там есть какие-то механизмы, как у com-порта, типа щучить отклонения в скорости передачи, тайм-ауты..
rezident
Apr 7 2010, 22:10
Цитата(dmitry_michalych @ Apr 8 2010, 03:37)

Про crc это уже другое.
Почему другое? Контроль целостности данных это самый основной вопрос при передаче этих данных по любым линиям связи.
Цитата(dmitry_michalych @ Apr 8 2010, 03:37)

Думал, может там есть какие-то механизмы, как у com-порта, типа щучить отклонения в скорости передачи, тайм-ауты..
Дык SPI - синхронный интерфейс, UART - асинхронный.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.