본문 바로가기

[ATMEL]/SAMD21

[ATSAMD21 SSM] Arduino 만들기

 

 

#SAMD21E-S EVM - ATSAMD21E Arduino Zero Board 만들기 와 같이 부트로더를 다운로 하여 구동해 보면 디바이스까

지 정상적으로 인식이 되는데 다운로드 하면 문제가 발생한다.

 

#SAMD21E-S EVM - ATSAMD21E Arduino Zero Board 만들기

Arduino Code로 테스트 하면 이미 작성되어 있는 라이브러리가 많아서 간단하게 테스트 하기에 좋은것 같다. 그래서 SAMD21E EVM 보드에 아두이노 부트로더를 올려 보았다. #SAMD21E-S EVM 보드에 ATSAMD21 Ard

nexp.tistory.com

 

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)
반응형