pins set to development board config

This commit is contained in:
Conor Patrick 2018-08-07 17:58:22 -04:00
parent 59370a43b0
commit 352178c8a8
5 changed files with 212 additions and 275 deletions

File diff suppressed because one or more lines are too long

View File

@ -4,15 +4,14 @@
<property object="ADC0" propertyId="ABPeripheral.included" value="true"/> <property object="ADC0" propertyId="ABPeripheral.included" value="true"/>
<property object="CMU" propertyId="ABPeripheral.included" value="true"/> <property object="CMU" propertyId="ABPeripheral.included" value="true"/>
<property object="CMU" propertyId="clocksettings.hfrcosettings.hfrcofrequency" value="38 MHz"/> <property object="CMU" propertyId="clocksettings.hfrcosettings.hfrcofrequency" value="38 MHz"/>
<property object="CMU" propertyId="clocksettings.lfclocksettings.lfrcorequired" value="Yes"/> <property object="CMU" propertyId="clocksettings.lfclocksettings.ulfrcorequired" value="Yes"/>
<property object="CRYOTIMER" propertyId="ABPeripheral.included" value="true"/> <property object="CRYOTIMER" propertyId="ABPeripheral.included" value="true"/>
<property object="CRYOTIMER" propertyId="cryotimer.clocking.clocksourceforcryotimer" value="ULFRCO"/>
<property object="CRYOTIMER" propertyId="cryotimer.clocking.eventafterevery" value="1 cycle"/> <property object="CRYOTIMER" propertyId="cryotimer.clocking.eventafterevery" value="1 cycle"/>
<property object="CRYOTIMER" propertyId="cryotimer.clocking.prescalerforcryotimer" value="Divide by 32"/>
<property object="CRYPTO" propertyId="ABPeripheral.included" value="true"/> <property object="CRYPTO" propertyId="ABPeripheral.included" value="true"/>
<property object="DefaultMode" propertyId="mode.diagramLocation" value="100, 100"/> <property object="DefaultMode" propertyId="mode.diagramLocation" value="100, 100"/>
<property object="EMU" propertyId="ABPeripheral.included" value="true"/> <property object="EMU" propertyId="ABPeripheral.included" value="true"/>
<property object="GPIO" propertyId="ABPeripheral.included" value="true"/> <property object="GPIO" propertyId="ABPeripheral.included" value="true"/>
<property object="I2C0" propertyId="ABPeripheral.included" value="true"/>
<property object="PA0" propertyId="ports.settings.pinmode" value="Push-pull"/> <property object="PA0" propertyId="ports.settings.pinmode" value="Push-pull"/>
<property object="PA1" propertyId="ports.settings.dout" value="1"/> <property object="PA1" propertyId="ports.settings.dout" value="1"/>
<property object="PA1" propertyId="ports.settings.filter" value="Enabled"/> <property object="PA1" propertyId="ports.settings.filter" value="Enabled"/>
@ -87,8 +86,6 @@
<property object="PF6" propertyId="ports.settings.pinmode" value="Input pull"/> <property object="PF6" propertyId="ports.settings.pinmode" value="Input pull"/>
<property object="PF6" propertyId="ports.settings.pulldirection" value="Pullup"/> <property object="PF6" propertyId="ports.settings.pulldirection" value="Pullup"/>
<property object="PF6" propertyId="ports.settings.pullup" value="Enabled"/> <property object="PF6" propertyId="ports.settings.pullup" value="Enabled"/>
<property object="PORTIO" propertyId="portio.i2c0.enable.scl" value="Enabled"/>
<property object="PORTIO" propertyId="portio.i2c0.enable.sda" value="Enabled"/>
<property object="PORTIO" propertyId="portio.i2c0.location.i2c0_sclloc" value="3"/> <property object="PORTIO" propertyId="portio.i2c0.location.i2c0_sclloc" value="3"/>
<property object="PORTIO" propertyId="portio.i2c0.location.i2c0_sdaloc" value="27"/> <property object="PORTIO" propertyId="portio.i2c0.location.i2c0_sdaloc" value="27"/>
<property object="PORTIO" propertyId="portio.usart0.enable.cts" value="Enabled"/> <property object="PORTIO" propertyId="portio.usart0.enable.cts" value="Enabled"/>
@ -110,6 +107,7 @@
<property object="USART1" propertyId="usart.mode.usartmode" value="Synchronous Mode (SPI / I2S)"/> <property object="USART1" propertyId="usart.mode.usartmode" value="Synchronous Mode (SPI / I2S)"/>
<property object="USART1" propertyId="usart.outputsettings.clockselect" value="Disabled"/> <property object="USART1" propertyId="usart.outputsettings.clockselect" value="Disabled"/>
<property object="USART1" propertyId="usart.synchronoussettings.baudrate" value="130000"/> <property object="USART1" propertyId="usart.synchronoussettings.baudrate" value="130000"/>
<property object="USART1" propertyId="usart.synchronoussettings.clockpolarityphasemode" value="Clock idle low, sample on falling edge"/>
</mode> </mode>
<modeTransition> <modeTransition>
<property object="RESET &#x2192; DefaultMode" propertyId="modeTransition.source" value="RESET"/> <property object="RESET &#x2192; DefaultMode" propertyId="modeTransition.source" value="RESET"/>

View File

@ -23,7 +23,6 @@
#include "em_cryotimer.h" #include "em_cryotimer.h"
#include "em_crypto.h" #include "em_crypto.h"
#include "em_gpio.h" #include "em_gpio.h"
#include "em_i2c.h"
#include "em_usart.h" #include "em_usart.h"
// [Library includes]$ // [Library includes]$
@ -39,7 +38,6 @@ extern void enter_DefaultMode_from_RESET(void) {
ADC0_enter_DefaultMode_from_RESET(); ADC0_enter_DefaultMode_from_RESET();
USART0_enter_DefaultMode_from_RESET(); USART0_enter_DefaultMode_from_RESET();
USART1_enter_DefaultMode_from_RESET(); USART1_enter_DefaultMode_from_RESET();
I2C0_enter_DefaultMode_from_RESET();
CRYOTIMER_enter_DefaultMode_from_RESET(); CRYOTIMER_enter_DefaultMode_from_RESET();
PORTIO_enter_DefaultMode_from_RESET(); PORTIO_enter_DefaultMode_from_RESET();
// [Config Calls]$ // [Config Calls]$
@ -104,15 +102,15 @@ extern void CMU_enter_DefaultMode_from_RESET(void) {
CMU_HFXOInit(&hfxoInit); CMU_HFXOInit(&hfxoInit);
/* Setting system HFRCO frequency */ /* Setting system HFRCO frequency */
CMU_HFRCOFreqSet (cmuHFRCOFreq_38M0Hz); CMU_HFRCOFreqSet (cmuHFRCOFreq_4M0Hz);
/* Using HFRCO as high frequency clock, HFCLK */ /* Using HFRCO as high frequency clock, HFCLK */
CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO); CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO);
// [High Frequency Clock Setup]$ // [High Frequency Clock Setup]$
// $[LE clocks enable] // $[LE clocks enable]
/* Enable LFRCO oscillator, and wait for it to be stable */ /* Enable ULFRCO oscillator, and wait for it to be stable */
CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); CMU_OscillatorEnable(cmuOsc_ULFRCO, true, true);
// [LE clocks enable]$ // [LE clocks enable]$
@ -135,9 +133,6 @@ extern void CMU_enter_DefaultMode_from_RESET(void) {
/* Enable clock for CRYOTIMER */ /* Enable clock for CRYOTIMER */
CMU_ClockEnable(cmuClock_CRYOTIMER, true); CMU_ClockEnable(cmuClock_CRYOTIMER, true);
/* Enable clock for I2C0 */
CMU_ClockEnable(cmuClock_I2C0, true);
/* Enable clock for USART0 */ /* Enable clock for USART0 */
CMU_ClockEnable(cmuClock_USART0, true); CMU_ClockEnable(cmuClock_USART0, true);
@ -353,7 +348,7 @@ extern void USART1_enter_DefaultMode_from_RESET(void) {
initsync.databits = usartDatabits8; initsync.databits = usartDatabits8;
initsync.master = 1; initsync.master = 1;
initsync.msbf = 1; initsync.msbf = 1;
initsync.clockMode = usartClockMode0; initsync.clockMode = usartClockMode1;
#if defined( USART_INPUT_RXPRS ) && defined( USART_TRIGCTRL_AUTOTXTEN ) #if defined( USART_INPUT_RXPRS ) && defined( USART_TRIGCTRL_AUTOTXTEN )
initsync.prsRxEnable = 0; initsync.prsRxEnable = 0;
initsync.prsRxCh = 0; initsync.prsRxCh = 0;
@ -455,24 +450,9 @@ extern void WDOG0_enter_DefaultMode_from_RESET(void) {
extern void I2C0_enter_DefaultMode_from_RESET(void) { extern void I2C0_enter_DefaultMode_from_RESET(void) {
// $[I2C0 I/O setup] // $[I2C0 I/O setup]
/* Set up SCL */
I2C0->ROUTEPEN = I2C0->ROUTEPEN | I2C_ROUTEPEN_SCLPEN;
I2C0->ROUTELOC0 = (I2C0->ROUTELOC0 & (~_I2C_ROUTELOC0_SCLLOC_MASK))
| I2C_ROUTELOC0_SCLLOC_LOC3;
/* Set up SDA */
I2C0->ROUTEPEN = I2C0->ROUTEPEN | I2C_ROUTEPEN_SDAPEN;
I2C0->ROUTELOC0 = (I2C0->ROUTELOC0 & (~_I2C_ROUTELOC0_SDALOC_MASK))
| I2C_ROUTELOC0_SDALOC_LOC27;
// [I2C0 I/O setup]$ // [I2C0 I/O setup]$
// $[I2C0 initialization] // $[I2C0 initialization]
I2C_Init_TypeDef init = I2C_INIT_DEFAULT;
init.enable = 1;
init.master = 1;
init.freq = I2C_FREQ_STANDARD_MAX;
init.clhr = i2cClockHLRStandard;
I2C_Init(I2C0, &init);
// [I2C0 initialization]$ // [I2C0 initialization]$
} }
@ -577,9 +557,9 @@ extern void CRYOTIMER_enter_DefaultMode_from_RESET(void) {
cryoInit.em4Wakeup = 0; cryoInit.em4Wakeup = 0;
/* Clocking settings */ /* Clocking settings */
/* With a frequency of 32768Hz on LFRCO, this will result in a 0.98 ms timeout */ /* With a frequency of 1000Hz on ULFRCO, this will result in a 1.00 ms timeout */
cryoInit.osc = cryotimerOscLFRCO; cryoInit.osc = cryotimerOscULFRCO;
cryoInit.presc = cryotimerPresc_32; cryoInit.presc = cryotimerPresc_1;
cryoInit.period = cryotimerPeriod_1; cryoInit.period = cryotimerPeriod_1;
CRYOTIMER_Init(&cryoInit); CRYOTIMER_Init(&cryoInit);
// [CRYOTIMER_Init]$ // [CRYOTIMER_Init]$

View File

@ -30,6 +30,8 @@
#define RDY_PIN gpioPortC,10 #define RDY_PIN gpioPortC,10
#define RW_PIN gpioPortD,11 #define RW_PIN gpioPortD,11
#define RESET_PIN gpioPortB,13 #define RESET_PIN gpioPortB,13
#define LED1_PIN gpioPortF,4
#define LED2_PIN gpioPortF,5
#define PAGE_SIZE 2048 #define PAGE_SIZE 2048
#define PAGES 128 #define PAGES 128
@ -129,8 +131,8 @@ void ctaphid_write_block(uint8_t * data)
void heartbeat() void heartbeat()
{ {
GPIO_PinOutToggle(gpioPortF,4); GPIO_PinOutToggle(LED1_PIN);
GPIO_PinOutToggle(gpioPortF,5); GPIO_PinOutToggle(LED2_PIN);
nfc_test(); nfc_test();
// printf("heartbeat %d %d\r\n", beat++,CRYOTIMER->CNT); // printf("heartbeat %d %d\r\n", beat++,CRYOTIMER->CNT);
} }
@ -330,13 +332,11 @@ void bootloader_init(void)
GPIO_PinModeSet(RESET_PIN, gpioModePushPull, 1); GPIO_PinModeSet(RESET_PIN, gpioModePushPull, 1);
// status LEDS // status LEDS
GPIO_PinModeSet(gpioPortF, GPIO_PinModeSet(LED1_PIN,
4,
gpioModePushPull, gpioModePushPull,
0); 0);
GPIO_PinModeSet(gpioPortF, GPIO_PinModeSet(LED2_PIN,
5,
gpioModePushPull, gpioModePushPull,
1); 1);
@ -349,10 +349,6 @@ void bootloader_init(void)
// SPI R/w Indicator // SPI R/w Indicator
GPIO_PinModeSet(RW_PIN, gpioModePushPull, 1); GPIO_PinModeSet(RW_PIN, gpioModePushPull, 1);
// USB message rdy ext int
// GPIO_ExtIntConfig(gpioPortC, 9, 9, 1, 0,1);
// NVIC_EnableIRQ(GPIO_ODD_IRQn);
printing_init(); printing_init();
@ -371,13 +367,11 @@ void device_init(void)
enter_DefaultMode_from_RESET(); enter_DefaultMode_from_RESET();
// status LEDS // status LEDS
GPIO_PinModeSet(gpioPortF, GPIO_PinModeSet(LED1_PIN,
4,
gpioModePushPull, gpioModePushPull,
0); 0);
GPIO_PinModeSet(gpioPortF, GPIO_PinModeSet(LED2_PIN,
5,
gpioModePushPull, gpioModePushPull,
1); 1);
@ -393,10 +387,6 @@ void device_init(void)
// Reset EFM8 // Reset EFM8
GPIO_PinModeSet(RESET_PIN, gpioModePushPull, 1); GPIO_PinModeSet(RESET_PIN, gpioModePushPull, 1);
// USB message rdy ext int
// GPIO_ExtIntConfig(gpioPortC, 9, 9, 1, 0,1);
// NVIC_EnableIRQ(GPIO_ODD_IRQn);
printing_init(); printing_init();

View File

@ -19,6 +19,7 @@
#include "app.h" #include "app.h"
#define NFC_DEV_ADDR (0xa0|(0x0<<1)) #define NFC_DEV_ADDR (0xa0|(0x0<<1))
#define NFC_DEV_USART USART1
I2C_TransferReturn_TypeDef I2CSPM_Transfer(I2C_TypeDef *i2c, I2C_TransferSeq_TypeDef *seq) I2C_TransferReturn_TypeDef I2CSPM_Transfer(I2C_TypeDef *i2c, I2C_TransferSeq_TypeDef *seq)
{ {
@ -115,89 +116,147 @@ void write_reg_flash(uint8_t reg_addr, uint8_t mask,uint8_t data)
exit(1); exit(1);
} }
} }
void write_reg(uint8_t reg_addr, uint8_t mask,uint8_t data)
void write_reg(uint8_t reg_addr, uint8_t data)
{ {
uint8_t addr = NFC_DEV_ADDR;
I2C_TransferSeq_TypeDef seq;
I2C_TransferReturn_TypeDef ret;
uint8_t i2c_write_data[4];
seq.addr = addr; uint8_t mode = 0x00 | (reg_addr & 0x1f);
seq.flags = I2C_FLAG_WRITE; // delay(10);
i2c_write_data[0] = 0xFE;
i2c_write_data[1] = reg_addr;
i2c_write_data[2] = mask;
i2c_write_data[3] = data;
seq.buf[0].data = i2c_write_data; // delay(10);
seq.buf[0].len = 4; GPIO_PinOutClear(NFC_DEV_SS);
seq.buf[1].data = NULL; delay(1);
seq.buf[1].len = 0; USART_SpiTransfer(NFC_DEV_USART, mode);
mode = USART_SpiTransfer(NFC_DEV_USART, data);
GPIO_PinOutSet(NFC_DEV_SS);
}
ret = I2CSPM_Transfer(I2C0, &seq); void write_command(uint8_t cmd)
{
uint8_t mode = cmd;
// delay(10);
// delay(10);
GPIO_PinOutClear(NFC_DEV_SS);
delay(1);
USART_SpiTransfer(NFC_DEV_USART, mode);
GPIO_PinOutSet(NFC_DEV_SS);
GPIO_PinOutClear(NFC_DEV_SS);
}
void write_eeprom(uint8_t block, uint8_t * data)
{
uint8_t mode = 0x40;
// delay(10);
// delay(10);
GPIO_PinOutClear(NFC_DEV_SS);
delay(1);
USART_SpiTransfer(NFC_DEV_USART, mode);
mode = block << 1;
USART_SpiTransfer(NFC_DEV_USART, mode);
USART_SpiTransfer(NFC_DEV_USART, *data++);
USART_SpiTransfer(NFC_DEV_USART, *data++);
USART_SpiTransfer(NFC_DEV_USART, *data++);
USART_SpiTransfer(NFC_DEV_USART, *data++);
GPIO_PinOutSet(NFC_DEV_SS);
GPIO_PinOutClear(NFC_DEV_SS);
}
void read_eeprom(uint8_t block, uint8_t * data)
{
uint8_t mode = 0x7f;
// delay(10);
// delay(10);
GPIO_PinOutClear(NFC_DEV_SS);
delay(1);
USART_SpiTransfer(NFC_DEV_USART, mode);
mode = block << 1;
USART_SpiTransfer(NFC_DEV_USART, mode);
*data++ = USART_SpiTransfer(NFC_DEV_USART, 0);
*data++ = USART_SpiTransfer(NFC_DEV_USART, 0);
*data++ = USART_SpiTransfer(NFC_DEV_USART, 0);
*data++ = USART_SpiTransfer(NFC_DEV_USART, 0);
GPIO_PinOutSet(NFC_DEV_SS);
GPIO_PinOutClear(NFC_DEV_SS);
if (ret != i2cTransferDone) {
printf("I2C fail %04x\r\n",ret);
exit(1);
}
} }
uint8_t read_reg(uint8_t reg_addr) uint8_t read_reg(uint8_t reg_addr)
{ {
I2C_TransferSeq_TypeDef seq;
I2C_TransferReturn_TypeDef ret;
uint8_t write_data[1];
uint8_t read_data[1];
seq.addr = NFC_DEV_ADDR; uint8_t mode = 0x20 | (reg_addr & 0x1f);
seq.flags = I2C_FLAG_WRITE_READ; // delay(10);
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; // delay(10);
seq.buf[0].len = 1; GPIO_PinOutClear(NFC_DEV_SS);
seq.buf[1].data = read_data; delay(1);
seq.buf[1].len = 1; USART_SpiTransfer(NFC_DEV_USART, mode);
mode = USART_SpiTransfer(NFC_DEV_USART, 0);
GPIO_PinOutSet(NFC_DEV_SS);
ret = I2CSPM_Transfer(I2C0, &seq); GPIO_PinOutClear(NFC_DEV_SS);
if (ret != i2cTransferDone) { // printf("%02x: %x\n",(reg_addr),(int)mode);
printf("I2C fail %04x\r\n",ret); return mode;
exit(1);
}
return read_data[0];
} }
// data must be 17 bytes long void read_buffer(uint8_t * data, int len)
{
uint8_t mode = 0xC0;
int i;
if (len > 32)
{
printf("warning, max len is 32\n");
len = 32;
}
GPIO_PinOutClear(NFC_DEV_SS);
delay(1);
USART_SpiTransfer(NFC_DEV_USART, mode);
for(i = 0; i < len; i++)
{
*data++ = USART_SpiTransfer(NFC_DEV_USART, 0);
}
GPIO_PinOutSet(NFC_DEV_SS);
GPIO_PinOutClear(NFC_DEV_SS);
}
// data must be 14 bytes long
void read_reg_block(uint8_t * data) void read_reg_block(uint8_t * data)
{ {
int i; int i;
for (i = 0; i < 15; i++) uint8_t mode = 0x20 | (0 & 0x1f);
GPIO_PinOutClear(NFC_DEV_SS);
delay(1);
USART_SpiTransfer(NFC_DEV_USART, mode);
for (i = 0; i < 0x20; i++)
{ {
mode = USART_SpiTransfer(NFC_DEV_USART, 0);
*data = read_reg(i); if (i < 6 || (i >=8 && i < 0x0f) || (i >= 0x1e))
printf("data %d: %x\n" ,i,(int)(*data)); {
data++; *data = mode;
data++;
}
} }
*data++ = read_reg(0x1E);
*data++ = read_reg(0x1F);
}
#define NS_REG_ADDR 6
typedef enum{
RF_FIELD_PRESENT = 0x01,
EEPROM_WR_BUSY = 0x02,
EEPROM_WR_ERR = 0x04,
SRAM_RF_READY = 0x08,
SRAM_I2C_READY = 0x10,
RF_LOCKED = 0x20,
I2C_LOCKED = 0x40,
NDEF_DATA_READ = 0x80,
} NS_REG_BIT;
#define RF_FIELD_PRESENT 0x01 GPIO_PinOutSet(NFC_DEV_SS);
#define EEPROM_WR_BUSY 0x02 GPIO_PinOutClear(NFC_DEV_SS);
#define SRAM_RF_READY 0x02 }
typedef struct { typedef struct {
uint8_t header; uint8_t header;
@ -207,68 +266,27 @@ typedef struct {
uint8_t rtype; uint8_t rtype;
} NDEF; } NDEF;
#define PIN_SCL gpioPortA,4 typedef struct {
#define PIN_SDA gpioPortF,3 uint8_t io;
uint8_t conf0;
#define SDA_WRITE(x) if (x) GPIO_PinOutSet(PIN_SDA); else GPIO_PinOutClear(PIN_SDA); uint8_t conf1;
#define SCL_WRITE(x) if (x) GPIO_PinOutSet(PIN_SCL); else GPIO_PinOutClear(PIN_SCL); uint8_t conf2;
uint8_t rfid_status;
void i2c_delay() uint8_t ic_status;
{ uint8_t mask0;
int i; uint8_t mask1;
for (i = 0; i < 38*5; i++) uint8_t int0;
{ uint8_t int1;
__asm("nop"); uint8_t buf_status2;
} uint8_t buf_status1;
} uint8_t last_nfc_address;
uint8_t maj;
void i2c_start() uint8_t minor;
{ } __attribute__((packed)) AMS_REGS;
SDA_WRITE(0);
i2c_delay();
i2c_delay();
SCL_WRITE(0);
}
void i2c_end()
{
SCL_WRITE(1);
i2c_delay();
i2c_delay();
SDA_WRITE(1);
}
//
int i2c_write_byte(uint8_t byte)
{
uint8_t bit;
int i;
for(i = 0; i < 8; i++)
{
bit = (byte & 0x80) ? 1 : 0;
byte <<= 1;
SCL_WRITE(0);
SDA_WRITE(bit);
i2c_delay();
SCL_WRITE(1);
i2c_delay();
}
SCL_WRITE(0);
SDA_WRITE(1); // release
i2c_delay();
SCL_WRITE(1);
i2c_delay();
int ack = GPIO_PinInGet(PIN_SDA);
SCL_WRITE(0);
i2c_delay();
return ack;
}
void nfc_test() void nfc_test()
{ {
uint8_t data[17]; uint8_t data[32];
uint8_t ns_reg; uint8_t ns_reg;
uint8_t last_ns_reg; uint8_t last_ns_reg;
// magic-number, // magic-number,
@ -276,20 +294,11 @@ void nfc_test()
uint8_t ndef[32] = "\x03\x11\xD1\x01\x0D\x55\x01adafruit.com"; uint8_t ndef[32] = "\x03\x11\xD1\x01\x0D\x55\x01adafruit.com";
printf("-NFC test-\n"); AMS_REGS * regs;
return ;
GPIO_PinOutSet(PIN_SCL);
GPIO_PinOutSet(PIN_SDA);
delay(1);
printf("pins: %d %d\n",GPIO_PinInGet(PIN_SCL),GPIO_PinInGet(PIN_SDA));
delay(1);
GPIO_PinOutClear(PIN_SCL);
GPIO_PinOutClear(PIN_SDA);
delay(1);
printf("pins: %d %d\n",GPIO_PinInGet(PIN_SCL),GPIO_PinInGet(PIN_SDA));
GPIO_PinOutSet(PIN_SCL);
GPIO_PinOutSet(PIN_SDA);
delay(10); delay(10);
GPIO_PinOutSet(NFC_DEV_SS); GPIO_PinOutSet(NFC_DEV_SS);
@ -297,94 +306,54 @@ void nfc_test()
GPIO_PinOutClear(NFC_DEV_SS); GPIO_PinOutClear(NFC_DEV_SS);
delay(10); delay(10);
i2c_start(); // uint8_t reg = read_reg(0);
int ack = i2c_write_byte(0xA0); write_command(0xC2); // Set to default state
i2c_end(); write_command(0xC4); // Clear buffer
i2c_delay();
int ack2 = GPIO_PinInGet(PIN_SDA); write_reg(0x3, 0x80 | 0x40); // enable tunneling mode and RF configuration
printf("ack:%d, release: %d\n", ack,ack2);
read_reg_block(data);
printf("regs: "); dump_hex(data,15);
delay(100);
read_reg_block(data);
printf("regs: "); dump_hex(data,15);
if (0)
{
read_eeprom(0x7F, data);
printf("initial config: "); dump_hex(data,4);
data[0] = (1<<2) | 0x03; // save cfg1 setting for energy harvesting
data[1] = 0x80 | 0x40; // save cfg2 setting for tunneling
write_eeprom(0x7F, data);
printf("updated config: "); dump_hex(data,4);
}
while (1) while (1)
; {
// delay(100);
// 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); // read_reg_block(data);
// } // regs = (AMS_REGS *)data;
// //
// // if ((regs->buf_status2 & 0x3f) && !(regs->buf_status2 & 0x80))
// return;
////
////
// read_block(0x00, data);
// read_block(0x00, data);
// printf("block 00: "); dump_hex(data,16);
//
// printf("capability container [init]: "); dump_hex(data+12,4);
//
// data[0] = 0xaa;
// memmove(data+12,cc,4);
//
// write_block(0x00,data);
// delay(10);
// write_block(0x01,ndef);
// delay(10);
// write_block(0x02,ndef+16);
// delay(10);
// printf("wrote block\n");
//
// read_block(0x00, data);
//
// printf("capability container [done]: "); dump_hex(data+12,4);
//
// read_reg_block(data);
// printf("regs [init]:"); dump_hex(data,8);
// write_reg(0, 0xff, 0x42);
// write_reg(2, 0xff, 0x01);
//
// read_reg_block(data);
// printf("block 3A [done]:"); dump_hex(data,8);
//
// read_block(0x3A, data);
// printf("block 3A [done]:"); dump_hex(data,16);
// while(1)
// {
// delay(250);
// read_reg_block(data);
// printf("regs:"); dump_hex(data,8);
//
// ns_reg = read_reg(NS_REG_ADDR);
// if (ns_reg & SRAM_I2C_READY)
// { // {
// printf("Data in sram\r\n"); // read_buffer(data, regs->buf_status2 & 0x3f);
// } // printf("data: ");
// //
//// if ((ns_reg & RF_FIELD_PRESENT) && !(last_ns_reg & RF_FIELD_PRESENT)) // dump_hex(data, regs->buf_status2 & 0x3f);
//// { // }
//// printf("RF present\r\n");
//// } // dump_hex(data,15);
//// if (!(ns_reg & RF_FIELD_PRESENT) && (last_ns_reg & RF_FIELD_PRESENT)) }
//// {
//// printf("RF gone\r\n");
//// }
// last_ns_reg = ns_reg;
// }
} }