Страница 1 из 1

ATtiny2313A и Master SPI

Добавлено: Вт дек 06, 2016 23:45:47
AndreyZ
Правильно ли я понял, что у ATtiny2313A нет аппаратного SPI внутри, и поэтому его можно сделать на основе USART. Следовательно одновременное использовать UART и SPI не получится? Так же хотелось уточнить, правильно ли я понял докку, что если мы используем MSPIM, то будь добр тактироваться от внутреннего клока?

Re: ATtiny2313A и Master SPI

Добавлено: Ср дек 07, 2016 04:12:50
pokk
Посмотрите в сторону USI.
Вот сразу нагуглил
http://www.arts-union.ru/node/3

Re: ATtiny2313A и Master SPI

Добавлено: Ср дек 07, 2016 08:29:40
AndreyZ
pokk писал(а):Посмотрите в сторону USI.
Вот сразу нагуглил
http://www.arts-union.ru/node/3
Это всё замечательно...
Всё же меня интересует MSPIM

Re: ATtiny2313A и Master SPI

Добавлено: Ср дек 07, 2016 10:07:22
akl
AndreyZ писал(а):Правильно ли я понял, что у ATtiny2313A нет аппаратного SPI внутри, и поэтому его можно сделать на основе USART.
SPI можно сделать на USI с привязанными лапами или "ногодрыгом" на других лапах.
AndreyZ писал(а):...правильно ли я понял докку, что если мы используем MSPIM, то будь добр тактироваться от внутреннего клока?
DS ATtiny2313 не знает про MSPIM, только Multiprocessor Communication Mode (MPCM) и не даёт ограничений на тактовую.

Re: ATtiny2313A и Master SPI

Добавлено: Ср дек 07, 2016 11:29:52
AndreyZ
DS ATtiny2313 не знает про MSPIM, только Multiprocessor Communication Mode (MPCM) и не даёт ограничений на тактовую.
Изображение

Re: ATtiny2313A и Master SPI

Добавлено: Чт дек 08, 2016 07:26:16
Engineer_Keen
MSPIM это Master SPI Mode, т.е это просто контроллер в режиме мастера, значит: 1) тактовый сигнал генерирует мастер 2) линией CS/SS управляет мастер. И то и другое можно сделать как через USART (заняв его), так и через USI (при этом UART свободен). SPI из USI получается программно-аппаратным и тактировать ногу SCK придется вручную, с максимальной скоростью Fclk/2. Пример есть в разделе USI / Three-wire Mode.

Если контроллер умеет SPI в режиме слейва, то уж мастером он тоже может быть. Мастеру проще. Для слейва нужно определять строго определенный пин CS/SS, который либо является аппаратным входом SS SPI, либо входом с прерыванием, чтобы определить начало/конец передачи данных в программном SPI. Мастеру же достаточно выделить любой GPIO чтобы управлять линией CS. Тоже самое касается и тактовой линии SCK.

Кстати, в качестве UART можно задействовать и тот самый USI, но при этом потребуется помимо линий USI занять одну ногу с прерыванием, чтобы ловить старт-бит и один таймер, чтобы генерировать тактовую. Так что можете извратиться и завести SPI на USART, а UART на USI :)))

Re: ATtiny2313A и Master SPI

Добавлено: Чт дек 08, 2016 12:27:46
AndreyZ
Engineer_Keen писал(а): Кстати, в качестве UART можно задействовать и тот самый USI, но при этом потребуется помимо линий USI занять одну ногу с прерыванием, чтобы ловить старт-бит и один таймер, чтобы генерировать тактовую. Так что можете извратиться и завести SPI на USART, а UART на USI :)))
Дело в том, что мне нужен только SPI, для общения с АЦП. А вопрос возник на чём реализовывать SPI, USI или UART. И наиболее важным критерием для меня является это не простота реализации, а скорость выполнения алгоритма. С этой точки зрения, что скажете? Я ещё не изучал этот вопрос, как будет быстрее но по ощущениям, на UARTе быстрее... т.к. в USI программе придётся заниматься дёрганьем ножек в режиме GPIO.

Re: ATtiny2313A и Master SPI

Добавлено: Чт дек 08, 2016 15:21:53
Engineer_Keen
Быстрее чем Fclk/2 не будет в любом случае. В USI ноги будут дергаться не напрямую, если брать код со страниц 158-159, то там используются команды out (по 2 шт), которые как раз выполняются по 1 такту, и если надо выводить например больше чем по 1 байту, то такой линейный код даст максимальную производительность, варианты же с ожиданием изменения статусных битов что в UART что в другом варианте кода USI такого не дадут.