#SAMD21E-S EVM - ATSAMD21E Arduino Zero Board 만들기 와 같이 부트로더를 다운로 하여 구동해 보면 디바이스까
지 정상적으로 인식이 되는데 다운로드 하면 문제가 발생한다.
JTAG로 다운로드 하면 동작하고 USB 부트로더로 다운하면 동작을 하지 않는 현상이 발생한다.
JTAG로 다운로드 해도 리셋키를 누르면 다시 먹통이 된다.
손으로 만지다 보면 가끔 LED가 들어 오는 경우가 있는데 아무래도 냉땜이 아닐까?
재 납땜을 해도 같은 현상이다.
한가지 의심 되는것은 클럭이다. 32.768 크리스탈의 로드 캡이 좀 이상해 보인다.
12피코로 바꾸어 보니 정상 동작 한다.
또 한가지 문제가 발생한다.
USB 기능을 사용하기 위해 TinyUSB 라이브러리를 사용할경우 컴파일시 라이브러리에서 지원을 하지 않는 현상이 발생한다.
확인해 보니 Adafuit SAMD 보드 파일을 이용해야 한다고 한다.
Adafurit SAMD 보드 파일에서 SAMD21_SSM 보드 파일을 등록해서 핀맵 및 MCU를 수정해 주었다.
static const uint8_t A11 = PIN_A11;
static const uint8_t DAC0 = PIN_DAC0;
#define REFA_PIN (3ul)
#define REFB_PIN (4ul)
/*
* Serial interfaces
*/
// Serial1
#define PIN_SERIAL1_RX (11ul)
#define PIN_SERIAL1_TX (10ul)
#define PAD_SERIAL1_TX (UART_TX_PAD_2)
#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3)
#define SERCOM_INSTANCE_SERIAL1 &sercom0
// Serial2
#define PIN_SERIAL2_RX (15ul)
#define PIN_SERIAL2_TX (14ul)
#define PAD_SERIAL2_TX (UART_TX_PAD_2)
#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3)
#define SERCOM_INSTANCE_SERIAL2 &sercom2
// Serial3
#define PIN_SERIAL3_RX (31ul)
#define PIN_SERIAL3_TX (30ul)
#define PAD_SERIAL3_TX (UART_TX_PAD_2)
#define PAD_SERIAL3_RX (SERCOM_RX_PAD_3)
#define SERCOM_INSTANCE_SERIAL3 &sercom1
// Serial4
#define PIN_SERIAL4_RX (17ul)
#define PIN_SERIAL4_TX (16ul)
#define PAD_SERIAL4_TX (UART_TX_PAD_0)
#define PAD_SERIAL4_RX (SERCOM_RX_PAD_1)
#define SERCOM_INSTANCE_SERIAL4 &sercom3
/*
* SPI Interfaces
*/
#if defined(TWO_SPI)
#define SPI_INTERFACES_COUNT 2
#else
#define SPI_INTERFACES_COUNT 1
#endif
#define PIN_SPI_MISO (22u)
#define PIN_SPI_MOSI (18u)
#define PIN_SPI_SCK (19u)
#define PIN_SPI_SS (23u)
#define PERIPH_SPI sercom3
#define PAD_SPI_TX SPI_PAD_2_SCK_3
#define PAD_SPI_RX SERCOM_RX_PAD_0
static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference.
static const uint8_t MOSI = PIN_SPI_MOSI ;
static const uint8_t MISO = PIN_SPI_MISO ;
static const uint8_t SCK = PIN_SPI_SCK ;
#define PIN_SPI1_MISO (8u)
#define PIN_SPI1_MOSI (14u)
#define PIN_SPI1_SCK (15u)
#define PIN_SPI1_SS (9u)
#define PERIPH_SPI1 sercom2
#define PAD_SPI1_TX SPI_PAD_2_SCK_3
#define PAD_SPI1_RX SERCOM_RX_PAD_0
static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference.
static const uint8_t MOSI1 = PIN_SPI1_MOSI ;
static const uint8_t MISO1 = PIN_SPI1_MISO ;
static const uint8_t SCK1 = PIN_SPI1_SCK ;
/*
* Wire Interfaces
*/
#if defined(TWO_WIRE)
#define WIRE_INTERFACES_COUNT 2
#else
#define WIRE_INTERFACES_COUNT 1
#endif
#define PIN_WIRE_SDA (16u)
#define PIN_WIRE_SCL (17u)
#if defined(THREE_UART) && defined(ONE_WIRE) && defined(NO_SPI)
#define PERIPH_WIRE sercom3
#define WIRE_IT_HANDLER SERCOM3_Handler
#else
#define PERIPH_WIRE sercom1
#define WIRE_IT_HANDLER SERCOM1_Handler
#endif
static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;
#define PIN_WIRE1_SDA (8u)
#define PIN_WIRE1_SCL (9u)
#define PERIPH_WIRE1 sercom2
#define WIRE1_IT_HANDLER SERCOM2_Handler
static const uint8_t SDA1 = PIN_WIRE1_SDA;
static const uint8_t SCL1 = PIN_WIRE1_SCL;
/*
* USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to
* PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin.
*/
#define PIN_USB_DM (24ul)
#define PIN_USB_DP (25ul)
//#define PIN_USB_HOST_ENABLE (14ul)
#define PIN_USB_HOST_ENABLE_VALUE HIGH
/*
* I2S Interfaces
*/
#define I2S_INTERFACES_COUNT 1
#define I2S_DEVICE 0
#define I2S_CLOCK_GENERATOR 3
#define PIN_I2S_SD (7u)
#define PIN_I2S_SCK (10u)
#define PIN_I2S_FS (11u)
반응형