From 4f3e76ae94cb73f29221547c621733d308c38705 Mon Sep 17 00:00:00 2001 From: Conor Patrick Date: Thu, 2 Aug 2018 19:08:46 -0400 Subject: [PATCH] attempt at getting ams to work --- efm32/.cproject | 2 +- efm32/EFM32.hwconf | 13 ++++++++++ efm32/inc/app.h | 3 ++- efm32/src/InitDevice.c | 7 ++++-- efm32/src/nfc.c | 54 ++++++++++++++++++++++++++++++------------ 5 files changed, 60 insertions(+), 19 deletions(-) diff --git a/efm32/.cproject b/efm32/.cproject index 2605971..b4fca9f 100644 --- a/efm32/.cproject +++ b/efm32/.cproject @@ -226,7 +226,7 @@ - + diff --git a/efm32/EFM32.hwconf b/efm32/EFM32.hwconf index 45fe54c..0145edc 100644 --- a/efm32/EFM32.hwconf +++ b/efm32/EFM32.hwconf @@ -20,7 +20,11 @@ + + + + @@ -66,7 +70,16 @@ + + + + + + + + + diff --git a/efm32/inc/app.h b/efm32/inc/app.h index bec52e0..b4adfcb 100644 --- a/efm32/inc/app.h +++ b/efm32/inc/app.h @@ -25,6 +25,7 @@ void printing_init(); #define TEST #define TEST_POWER - +// GPIO assignments +#define NFC_DEV_SS gpioPortF,2 #endif /* SRC_APP_H_ */ diff --git a/efm32/src/InitDevice.c b/efm32/src/InitDevice.c index 5b21401..d14012b 100644 --- a/efm32/src/InitDevice.c +++ b/efm32/src/InitDevice.c @@ -626,7 +626,7 @@ extern void PORTIO_enter_DefaultMode_from_RESET(void) { GPIO_PinModeSet(gpioPortA, 3, gpioModePushPull, 0); /* Pin PA4 is configured to Open-drain with pull-up and filter */ - GPIO_PinModeSet(gpioPortA, 4, gpioModeWiredAndPullUpFilter, 0); + GPIO_PinModeSet(gpioPortA, 4, gpioModeWiredAndPullUpFilter, 1); /* Pin PA5 is configured to Push-pull */ GPIO_PinModeSet(gpioPortA, 5, gpioModePushPull, 1); @@ -670,8 +670,11 @@ extern void PORTIO_enter_DefaultMode_from_RESET(void) { // $[Port F Configuration] + /* Pin PF2 is configured to Push-pull */ + GPIO_PinModeSet(gpioPortF, 2, gpioModePushPull, 1); + /* Pin PF3 is configured to Open-drain with pull-up and filter */ - GPIO_PinModeSet(gpioPortF, 3, gpioModeWiredAndPullUpFilter, 0); + GPIO_PinModeSet(gpioPortF, 3, gpioModeWiredAndPullUpFilter, 1); /* Pin PF4 is configured to Push-pull */ GPIO_PinModeSet(gpioPortF, 4, gpioModePushPull, 0); diff --git a/efm32/src/nfc.c b/efm32/src/nfc.c index 117fff8..426d9cd 100644 --- a/efm32/src/nfc.c +++ b/efm32/src/nfc.c @@ -18,7 +18,6 @@ #include "nfc.h" #include "app.h" -#define NT3H2111_ADDR 0xAA I2C_TransferReturn_TypeDef I2CSPM_Transfer(I2C_TypeDef *i2c, I2C_TransferSeq_TypeDef *seq) { @@ -26,6 +25,7 @@ I2C_TransferReturn_TypeDef I2CSPM_Transfer(I2C_TypeDef *i2c, I2C_TransferSeq_Typ uint32_t timeout = 10000; /* Do a polled transfer */ ret = I2C_TransferInit(i2c, seq); + while (ret == i2cTransferInProgress && timeout--) { ret = I2C_Transfer(i2c); @@ -36,7 +36,7 @@ I2C_TransferReturn_TypeDef I2CSPM_Transfer(I2C_TypeDef *i2c, I2C_TransferSeq_Typ // data must be 16 bytes void read_block(uint8_t block, uint8_t * data) { - uint8_t addr = NT3H2111_ADDR; + uint8_t addr = NFC_DEV_ADDR; I2C_TransferSeq_TypeDef seq; I2C_TransferReturn_TypeDef ret; uint8_t i2c_read_data[16]; @@ -64,7 +64,7 @@ void read_block(uint8_t block, uint8_t * data) // data must be 16 bytes void write_block(uint8_t block, uint8_t * data) { - uint8_t addr = NT3H2111_ADDR; + uint8_t addr = NFC_DEV_ADDR; I2C_TransferSeq_TypeDef seq; I2C_TransferReturn_TypeDef ret; uint8_t i2c_write_data[1 + 16]; @@ -90,7 +90,7 @@ void write_block(uint8_t block, uint8_t * data) void write_reg_flash(uint8_t reg_addr, uint8_t mask,uint8_t data) { - uint8_t addr = NT3H2111_ADDR; + uint8_t addr = NFC_DEV_ADDR; I2C_TransferSeq_TypeDef seq; I2C_TransferReturn_TypeDef ret; uint8_t i2c_write_data[4]; @@ -116,7 +116,7 @@ void write_reg_flash(uint8_t reg_addr, uint8_t mask,uint8_t data) } void write_reg(uint8_t reg_addr, uint8_t mask,uint8_t data) { - uint8_t addr = NT3H2111_ADDR; + uint8_t addr = NFC_DEV_ADDR; I2C_TransferSeq_TypeDef seq; I2C_TransferReturn_TypeDef ret; uint8_t i2c_write_data[4]; @@ -145,18 +145,18 @@ uint8_t read_reg(uint8_t reg_addr) { I2C_TransferSeq_TypeDef seq; I2C_TransferReturn_TypeDef ret; - uint8_t write_data[2]; + uint8_t write_data[1]; uint8_t read_data[1]; - seq.addr = NT3H2111_ADDR; + seq.addr = NFC_DEV_ADDR; seq.flags = I2C_FLAG_WRITE_READ; - write_data[0] = 0xFE; - write_data[1] = reg_addr; + write_data[0] = (0x1f & reg_addr) | (0x20); + printf("mode: 0x%x = 0x%02x\n",NFC_DEV_ADDR, (int)write_data[0]); seq.buf[0].data = write_data; - seq.buf[0].len = 2; - seq.buf[1].data = read_data; - seq.buf[1].len = 1; + seq.buf[0].len = 1; + seq.buf[1].data = read_data; + seq.buf[1].len = 1; ret = I2CSPM_Transfer(I2C0, &seq); @@ -168,15 +168,19 @@ uint8_t read_reg(uint8_t reg_addr) return read_data[0]; } +// data must be 17 bytes long void read_reg_block(uint8_t * data) { int i; - for (i = 0; i < 7; i++) + for (i = 0; i < 15; i++) { + *data = read_reg(i); -// printf("data %d: %x\n" ,i,(int)(*data)); + printf("data %d: %x\n" ,i,(int)(*data)); data++; } + *data++ = read_reg(0x1E); + *data++ = read_reg(0x1F); } #define NS_REG_ADDR 6 typedef enum{ @@ -204,7 +208,7 @@ typedef struct { void nfc_test() { - uint8_t data[16]; + uint8_t data[17]; uint8_t ns_reg; uint8_t last_ns_reg; // magic-number, @@ -214,6 +218,26 @@ void nfc_test() printf("-NFC test-\n"); + GPIO_PinOutSet(NFC_DEV_SS); + delay(10); + GPIO_PinOutClear(NFC_DEV_SS); + delay(10); + + read_reg_block(data); + + printf("regs:\n"); + dump_hex(data,17); + + while(1) + ; + + while (1) + { + delay(1090); + read_reg_block(data); + } + + return; // ////