не смог придумать, куда бы написать, создал тему... возможно, будут еще советы от других.
лично от меня совет, выстраданный трем сутками поисков проблемы: не забывайте настраивать вывод SS на выход, когда используете SPI в режиме мастера!
трое суток искал проблему: протеус моделирует все нормально, на макете - поведение сильно отличается, а в реальном изделии и того хуже - то так, то этак. а проблема заклчалась в том, что забыл о режиме порта на линии SS... в протеусе там всегда уровень неизменный, а в реале - как фишка ляжет, в итоге совершенно непредсказуемо режим мастера выключался и процедура отправки байта намертво висла (поллингом флага завершения передачи).
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
странно, что ты с таким большим опытом совершил такую "детскую" ошибку. я чуть более года назад впервые решил освоить SPI. но я почитал внимательно даташит, и такой ошибки не совершил. и я решил освоить не просто отвлеченный пример, а сразу с применением функций последовательного программирования. до собственно программирования (заливки флеши и еепром) я так и не дошел, но сделал чтение сигнатуры, всех фьюзов и всех калибровочных байтов. а также сделал запись фьюзов и стирание чипа. проверял только на АТмега8, так как кроме АТмега8 у меня других МК просто нет. если эту мою разработку довести до логического конца, то получится программатор, которому не нужен специальный драйвер, как, например, для USBASP нужен драйвер. соединение с компом у меня по СОМ-порту через конвертер USB-to-TTL. а у этого конвертора в системе уже есть драйвер виртуального СОМ-порта.
и исходя из сказанного мной, самый главный совет - читайте внимательно даташит на свой МК.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, я пал жертвой именно своего "опыта". известно ведь, что под напряжение чаще других попадают именно опытные электромонтеры... я был уверен, что помню все наизусть, и даташит читать не обязательно - с SPI я сделал несколько десятков проектов! и был самим собой наказан за это самомнение...
когда что-то делаешь впервые, даташит читать не лень... а вот потом...
кстати, еще одна штука, которая потрепала мен нервы - функции для бутлоадера, входящие в avr-libc. описание скудное, а "самодокументирующиеся имена" переменных создали впечатление, что в функцию void boot_program_page (uint32_t page, uint8_t *buf) надо передавать НОМЕР страницы... а на самом деле - АДРЕС её начала.
так что если кому потребуются советы по созданию бутлоадера, можете обращаться, пока в памяти свежо
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
если эту мою разработку довести до логического конца, то получится программатор, которому не нужен специальный драйвер, как, например, для USBASP нужен драйвер.
Я для той же цели использую avrdoper-HID и ft232-bb. Ни тому, ни другому специальный драйвер не нужен.
ARV писал(а):
не забывайте настраивать вывод SS на выход, когда используете SPI в режиме мастера!
Действительно странная ошибка, если не забывать, что к одному SPI может быть подключено множество slave'ов, и переключение всегда осуществляется вручную. То есть вывод CS ничем не лучше любой другой свободной ножки.
странная ошибка, если не забывать, что к одному SPI может быть подключено множество slave'ов, и переключение всегда осуществляется вручную
количество подключенных слейвов тут совершенно ни при чем: SS - это управляющий ВХОД, и это является причиной ошибок для тех, кто наивно (как я) полагает, что в режиме МАСТЕР состояние УПРАВЛЯЮЩЕГО ВХОДА "ВЫБОР ВЕДОМОГО" не играет роли - еще как играет! о том и предостерегаю
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Не мне обзывать багом эту фичу, но выглядит она странно: если МК изнутри сам себя назначил мастером, кто имеет право снаружи его перенастроить?! Это как в машине дать пассажиру свой отдельный руль.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Как бы это не баг. Все логично. Если пин настроен на вход, то при низком уровне будь любезен, служи.
Угу. А если на произвольный аналоговый вход подается напряжение - будь добр измерить, и плевать что в коде этот вывод не задействован вообще ни под что. Или XCK вывод UART - если на него приходят импульсы, будь добр переключиться в синхронный режим и подстраивайся. Нет уж, если в данной настройке периферии какой-то вывод не используется, он должен работать как обычный GPIO, а не как грабли. Для мастера SPI назначение всех линий CS одинаково - управление слейвами и ничего другого. Если уж очень хочется реализовать специальный режим с переключением мастера (лично вам хоть раз пригодилось?), выделите под это отдельный бит настройки.
И ещё. Даже если slave единственный - не нужно его CS садить на 0. По срезу CS призводится очистка приёмного буфера в slave. Я на этом погорел давно тому назад. Если в линию случайно попадёт лишний импульс (бит) - он сдвинет все биты на 1 позицию, и так - до скончания времён. Откуда он возьмётся - ХЗ. Не это важно. А вот если правильно рулить CS'ом - в худшем случае будет испорчен 1 байт. Ущучим его по контрольной сумме и передадим повторно.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения