суть: SPI настраивается в режим мастера, при этом пин SS как бы не участвует в работе и может быть испольован как обычный пин ввода-вывода (если я верно понял даташит). так вот, я конфигурирую этот пин SS на вход с подтяжкой, просаживаю его на землю, и все - SPI в режиме мастера не работает. для WS2812b я использую SPI с передачей по ожиданию конца передачи - конец передачи не наступает, на MOSI ничего не меняется. стоит оторвать SS от земли - все работает.
тут есть следующие варианты:
1. я чего-то недопонял в логике работы SPI в режиме мастера. как бы маловероятно, все-таки не первый день замужем... но вдруг?
2. я получил из Китая левак с вышеописанным дефектом (TQFP32 корпус, есличо)
3. это проблема всех 328-ых мег, но тогда почему в Errata нет ни слова об этом?!
помогите разобраться!
Добавлено after 4 minutes 15 seconds:
в догонку:
мой рабочий код инициализации SPI:
Код: Выделить всё
// на SS единичка подана заранее в другом месте
DDR(SPI_PORT) |= MOSI_PIN | SCK_PIN;
SPCR = _BV(SPE) | _BV(MSTR) | _BV(CPHA);
SPSR = _BV(SPI2X);
SPDR=1;
вот так работает, но, естественно, раскаляется кристалл (из-за чего подумал, что спалил, пришлось перепаивать), т.к. в нормальном режиме у меня SS на земле глухо:
Код: Выделить всё
DDR(SPI_PORT) |= MOSI_PIN | SCK_PIN | SS_PIN; // т.е. SS на выход принудительно
SPCR = _BV(SPE) | _BV(MSTR) | _BV(CPHA);
SPSR = _BV(SPI2X);
SPDR=1;
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


