Изменение порта SPI библиотеки Arduino SD library на Arduino Zero (ATSAMD21G18A)
Я пытался изменить порт SPI для SD-библиотеки на Arduino Zero с стандартного (MISO: PA12, MOSI: PB10 и SCK PB11) на следующий: (MISO: PA19(D12), MOSI: PA16(D11) и SCK PA17(D13)).
Я нашел в Интернете несколько руководств, самое полезное из которых-вот это.
Прочитав это, я изменил вариант.h для Arduino Zero на следующий:
/*
* SPI Interfaces
*/
#define SPI_INTERFACES_COUNT 1
#define PIN_SPI_MISO (34u)
#define PIN_SPI_MOSI (35u)
#define PIN_SPI_SCK (37u)
#define PERIPH_SPI sercom1
#define PAD_SPI_TX SPI_PAD_2_SCK_3
#define PAD_SPI_RX SERCOM_RX_PAD_0
а потом я захотел изменить тип мультиплексора для входящих контактов variant.cpp но я запутался; В какой-то момент в файле он указывает связанные контакты как следующие, а позже как SPI-контакты.
Устанавливает MUX в качестве ТАЙМЕРА и ШИМ здесь:
{ PORTA, 16, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH0, TCC2_CH0, EXTERNAL_INT_0 }, // TCC2/WO[0]
{ PORTA, 19, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH3, TCC0_CH3, EXTERNAL_INT_3 }, // TCC0/WO[3]
// 13 (LED)
{ PORTA, 17, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH1, TCC2_CH1, EXTERNAL_INT_1 }, // TCC2/WO[1]
Затем он также описывает их следующим образом:
// 34..37 - EDBG/SPI
{ PORTA, 19, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MISO: SERCOM1/PAD[3]
{ PORTA, 16, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MOSI: SERCOM1/PAD[0]
{ PORTA, 18, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SS: SERCOM1/PAD[2]
{ PORTA, 17, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SCK: SERCOM1/PAD[1]
Я закончил тем, что прокомментировал первый набор и заменил их следующими строками:
{ PORTA, 16, PIO_SERCOM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH0, TCC2_CH0, EXTERNAL_INT_0 }, // TCC2/WO[0]
{ PORTA, 19, PIO_SERCOM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH3, TCC0_CH3, EXTERNAL_INT_3 }, // TCC0/WO[3]
// 13 (LED)
{ PORTA, 17, PIO_SERCOM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH1, TCC2_CH1, EXTERNAL_INT_1 }, // TCC2/WO[1]
и не притронулся ко второму набору.
Я хотел просто изменить основной SPI и не добавлять другой порт SPI, чтобы мне не пришлось изменять библиотеку SD.
Я попробовал их с примером SD CardInfo, и он всегда говорит мне, что инициализация не удалась, а также я проверил SD-карту и модуль с портом SPI по умолчанию, и он работает нормально.
Вы также можете посмотреть немодифицированные файлы здесь: variant.h variant.cpp
@Oli, 👍1
0
- Как увеличить скорость записи на SD-карту в Ардуино
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Использование экрана SD-карты на Arduino Due
- Загрузить сайт с SD-карты
- Отобразить изображение с SD-карты на ЖК-дисплей ILI9486
- Аппаратный SPI Arduino NANO не работает
- Сбой при записи данных MPU-6050 на SD-карту