Муррррр, мяу!
Есть такой муррр код
Код:
//... Инициализация SPI - USI
void SPI_Init(void)
{
SPI_DDR |= (Bit(SCK) | Bit(MISO)); // Все выводы, кроме MOSI, выходы
SPI_PORT |= (Bit(MOSI) | Bit(MISO));
USICR |= (Bit(USIWM0) | Bit(USICS1) | Bit(USICLK));
}
//... Передать байт данных
void SPI_WriteByte(uint8_t data)
{
//... Копируем байт в регистр USIDR
USIDR = data;
//... Установим флаг начала передачи
USISR = Bit(USIOIF);
//... В цикле следим за флагом
while(!(USISR & Bit(USIOIF)))
{
USICR |= ( Bit(USITC)); // Режим SPI, тактируем шину сами
}
_delay_us(100); // Задержка для моста SPI - UART
}
//... Передать и получить байт данных
uint8_t SPI_ReadByte(uint8_t data)
{
//... Отправляем байт
SPI_WriteByte(data);
//... Принятый байт возвращаем
return USIDR;
}
Так вот при подключении на шину SPI 328p я слышу общение, но nRF24 не реагирует. На запись любого регистра возвращает 0, на чтение любого регистра возвращает 15. Если после записи данных в FIFO регистр послать команду очистки, то возвращает 14. Т.к. общение с nRF начинаю с дерганья csn, то цифра 15 - это, очевидно, значение статуса. Но почему nRF никак не хочет отдавать значение запрашиваемого регистра? Точно такой же код, но с аппаратным SPI на 328p заводится без проблем.
Пересмотрел кучу статей, библиотек (под абдурино и не только), код везде одинаков. Микросин, датагор, гитхаб...
Вопрос, мяу, не в том, где я косячу, а в том, работал кто с этим трансивером через интерфейс USI?
МУРРР