cleanup
This commit is contained in:
parent
b7c0e4ea92
commit
aa978abfc7
@ -7,6 +7,9 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
#define SELECT() LL_GPIO_ResetOutputPin(SOLO_AMS_CS_PORT,SOLO_AMS_CS_PIN)
|
||||||
|
#define UNSELECT() LL_GPIO_SetOutputPin(SOLO_AMS_CS_PORT,SOLO_AMS_CS_PIN)
|
||||||
|
|
||||||
|
|
||||||
static void flush_rx()
|
static void flush_rx()
|
||||||
{
|
{
|
||||||
@ -29,10 +32,29 @@ static void wait_for_rx()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define SELECT() LL_GPIO_ResetOutputPin(SOLO_AMS_CS_PORT,SOLO_AMS_CS_PIN)
|
static void ams_print_device(AMS_DEVICE * dev)
|
||||||
#define UNSELECT() LL_GPIO_SetOutputPin(SOLO_AMS_CS_PORT,SOLO_AMS_CS_PIN)
|
{
|
||||||
|
printf1(TAG_NFC, "AMS_DEVICE:\r\n");
|
||||||
|
printf1(TAG_NFC, " io_conf: %02x\r\n",dev->regs.io_conf);
|
||||||
|
printf1(TAG_NFC, " ic_conf0: %02x\r\n",dev->regs.ic_conf0);
|
||||||
|
printf1(TAG_NFC, " ic_conf1: %02x\r\n",dev->regs.ic_conf1);
|
||||||
|
printf1(TAG_NFC, " ic_conf2: %02x\r\n",dev->regs.ic_conf2);
|
||||||
|
printf1(TAG_NFC, " rfid_status: %02x\r\n",dev->regs.rfid_status);
|
||||||
|
printf1(TAG_NFC, " ic_status: %02x\r\n",dev->regs.ic_status);
|
||||||
|
printf1(TAG_NFC, " mask_int0: %02x\r\n",dev->regs.mask_int0);
|
||||||
|
printf1(TAG_NFC, " mask_int1: %02x\r\n",dev->regs.mask_int1);
|
||||||
|
printf1(TAG_NFC, " int0: %02x\r\n",dev->regs.int0);
|
||||||
|
printf1(TAG_NFC, " int1: %02x\r\n",dev->regs.int1);
|
||||||
|
printf1(TAG_NFC, " buffer_status2: %02x\r\n",dev->regs.buffer_status2);
|
||||||
|
printf1(TAG_NFC, " buffer_status1: %02x\r\n",dev->regs.buffer_status1);
|
||||||
|
printf1(TAG_NFC, " last_nfc_addr: %02x\r\n",dev->regs.last_nfc_addr);
|
||||||
|
printf1(TAG_NFC, " product_type: %02x\r\n",dev->regs.product_type);
|
||||||
|
printf1(TAG_NFC, " product_subtype: %02x\r\n",dev->regs.product_subtype);
|
||||||
|
printf1(TAG_NFC, " version_maj: %02x\r\n",dev->regs.version_maj);
|
||||||
|
printf1(TAG_NFC, " version_min: %02x\r\n",dev->regs.version_min);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t send_recv(uint8_t b)
|
static uint8_t send_recv(uint8_t b)
|
||||||
{
|
{
|
||||||
wait_for_tx();
|
wait_for_tx();
|
||||||
LL_SPI_TransmitData8(SPI1, b);
|
LL_SPI_TransmitData8(SPI1, b);
|
||||||
@ -41,16 +63,9 @@ uint8_t send_recv(uint8_t b)
|
|||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t send_recv2(uint8_t b1,uint8_t b2)
|
|
||||||
{
|
|
||||||
send_recv(b1);
|
|
||||||
return send_recv(b2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ams_write_reg(uint8_t addr, uint8_t tx)
|
static void ams_write_reg(uint8_t addr, uint8_t tx)
|
||||||
{
|
{
|
||||||
// SELECT();
|
|
||||||
// delay(2);
|
|
||||||
send_recv(0x00| addr);
|
send_recv(0x00| addr);
|
||||||
send_recv(tx);
|
send_recv(tx);
|
||||||
|
|
||||||
@ -61,77 +76,48 @@ void ams_write_reg(uint8_t addr, uint8_t tx)
|
|||||||
|
|
||||||
uint8_t ams_read_reg(uint8_t addr)
|
uint8_t ams_read_reg(uint8_t addr)
|
||||||
{
|
{
|
||||||
// SELECT();
|
send_recv(0x20| (addr & 0x1f));
|
||||||
// delay(2);
|
uint8_t data = send_recv(0);
|
||||||
|
|
||||||
uint8_t data = send_recv2(0x20| (addr & 0x1f), 0);
|
|
||||||
// send_recv(0x20| addr);
|
|
||||||
//
|
|
||||||
// uint8_t data = send_recv(0);
|
|
||||||
|
|
||||||
// delay(2);
|
|
||||||
UNSELECT();
|
UNSELECT();
|
||||||
SELECT();
|
SELECT();
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// data must be 14 bytes long
|
// data must be 14 bytes long
|
||||||
void read_reg_block2(uint8_t * data)
|
void read_reg_block2(AMS_DEVICE * dev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 0x20; i++)
|
for (i = 0; i < 0x20; i++)
|
||||||
{
|
{
|
||||||
// if (i < 6 || (i >=8 && i < 0x0f) || (i >= 0x1e))
|
dev->buf[i] = ams_read_reg(i);
|
||||||
{
|
|
||||||
*data = ams_read_reg(i);
|
|
||||||
data++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// data must be 14 bytes long
|
// data must be 14 bytes long
|
||||||
void read_reg_block(uint8_t * data)
|
void read_reg_block(AMS_DEVICE * dev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint8_t mode = 0x20 | (0 );
|
uint8_t mode = 0x20 | (0 );
|
||||||
flush_rx();
|
flush_rx();
|
||||||
// SELECT();
|
|
||||||
// delay(2);
|
|
||||||
|
|
||||||
send_recv(mode);
|
send_recv(mode);
|
||||||
for (i = 0; i < 0x20; i++)
|
for (i = 0; i < 0x20; i++)
|
||||||
{
|
{
|
||||||
mode = send_recv(0);
|
dev->buf[i] = send_recv(0);
|
||||||
// if (i < 6 || (i >=8 && i < 0x0f) || (i >= 0x1e))
|
|
||||||
// {
|
|
||||||
*data = mode;
|
|
||||||
data++;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UNSELECT();
|
UNSELECT();
|
||||||
SELECT();
|
SELECT();
|
||||||
// UNSELECT();
|
|
||||||
// delay(2);
|
|
||||||
// SELECT();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ams_write_command(uint8_t cmd)
|
void ams_write_command(uint8_t cmd)
|
||||||
{
|
{
|
||||||
|
send_recv(0xc0 | cmd);
|
||||||
uint8_t mode = cmd;
|
|
||||||
// delay(10);
|
|
||||||
|
|
||||||
// delay(10);
|
|
||||||
SELECT();
|
|
||||||
delay(1);
|
|
||||||
send_recv(mode);
|
|
||||||
UNSELECT();
|
UNSELECT();
|
||||||
SELECT();
|
SELECT();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nfc_init()
|
void nfc_init()
|
||||||
@ -149,51 +135,39 @@ void nfc_loop()
|
|||||||
{
|
{
|
||||||
|
|
||||||
static int run = 0;
|
static int run = 0;
|
||||||
|
AMS_DEVICE ams,ams2;
|
||||||
|
|
||||||
if (!run)
|
if (!run)
|
||||||
{
|
{
|
||||||
uint8_t regs[0x20];
|
|
||||||
run = 1;
|
run = 1;
|
||||||
|
|
||||||
delay(10);
|
|
||||||
LL_GPIO_SetOutputPin(SOLO_AMS_CS_PORT,SOLO_AMS_CS_PIN);
|
|
||||||
delay(10);
|
|
||||||
// LL_GPIO_ResetOutputPin(SOLO_AMS_CS_PORT,SOLO_AMS_CS_PIN);
|
|
||||||
delay(10);
|
delay(10);
|
||||||
SELECT();
|
SELECT();
|
||||||
delay(10);
|
delay(10);
|
||||||
// ams_write_command(0xC2); // Set to default state
|
|
||||||
// ams_write_command(0xC4); // Clear buffer
|
ams_write_command(AMS_CMD_DEFAULT);
|
||||||
ams_write_reg(2,7);
|
ams_write_command(AMS_CMD_CLEAR_BUFFER);
|
||||||
|
|
||||||
|
ams_write_reg(AMS_REG_IC_CONF1,7);
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
for (x = 0 ; x < 10; x++)
|
for (x = 0 ; x < 2; x++)
|
||||||
{
|
{
|
||||||
memset(regs,0,sizeof(regs));
|
read_reg_block(&ams);
|
||||||
// ams_write_reg(1,7);
|
printf1(TAG_NFC,"regs: "); dump_hex1(TAG_NFC,ams.buf,sizeof(AMS_DEVICE));
|
||||||
read_reg_block(regs);
|
ams_print_device(&ams);
|
||||||
printf1(TAG_NFC,"regs: "); dump_hex1(TAG_NFC,regs,sizeof(regs));
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printf1(TAG_NFC,"---\r\n");
|
printf1(TAG_NFC,"---\r\n");
|
||||||
for (x = 0 ; x < 10; x++)
|
for (x = 0 ; x < 2; x++)
|
||||||
{
|
{
|
||||||
memset(regs,0,sizeof(regs));
|
read_reg_block2(&ams2);
|
||||||
read_reg_block2(regs);
|
printf1(TAG_NFC,"regs: "); dump_hex1(TAG_NFC,ams.buf,sizeof(AMS_DEVICE));
|
||||||
printf1(TAG_NFC,"regs: "); dump_hex1(TAG_NFC,regs,sizeof(regs));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printf1(TAG_NFC,"Version: %02x\r\n",ams_read_reg(0x1e));
|
printf1(TAG_NFC,"Version: %02x vs %02x\r\n",ams_read_reg(0x1e), ams.regs.version_maj);
|
||||||
printf1(TAG_NFC,"Product Type: %02x\r\n",ams_read_reg(0x1c));
|
printf1(TAG_NFC,"Product Type: %02x vs %02x\r\n",ams_read_reg(0x1c), ams.regs.product_type);
|
||||||
|
printf1(TAG_NFC,"Electrical: %02x vs %02x\r\n",ams_read_reg(2), ams.regs.ic_conf1);
|
||||||
|
|
||||||
//
|
|
||||||
// LL_GPIO_SetOutputPin(SOLO_AMS_CS_PORT,SOLO_AMS_CS_PIN);
|
|
||||||
//
|
|
||||||
// memset(regs,0,sizeof(regs));
|
|
||||||
// for (x = 0 ; x < sizeof(regs); x++)
|
|
||||||
// {
|
|
||||||
// regs[x] = ams_read_reg(x);
|
|
||||||
// }
|
|
||||||
// printf1(TAG_NFC,"regs2: "); dump_hex1(TAG_NFC,regs,sizeof(regs));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,54 @@
|
|||||||
#ifndef _NFC_H_
|
#ifndef _NFC_H_
|
||||||
#define _NFC_H_
|
#define _NFC_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
void nfc_loop();
|
void nfc_loop();
|
||||||
void nfc_init();
|
void nfc_init();
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
uint8_t buf[0x20];
|
||||||
|
struct {
|
||||||
|
uint8_t io_conf; // 0x00
|
||||||
|
uint8_t ic_conf0; // 0x01
|
||||||
|
uint8_t ic_conf1; // 0x02
|
||||||
|
uint8_t ic_conf2; // 0x03
|
||||||
|
uint8_t rfid_status; // 0x04
|
||||||
|
uint8_t ic_status; // 0x05
|
||||||
|
uint8_t _nc0[2]; // 0x06 - 0x07
|
||||||
|
uint8_t mask_int0; // 0x08
|
||||||
|
uint8_t mask_int1; // 0x09
|
||||||
|
uint8_t int0; // 0x0a
|
||||||
|
uint8_t int1; // 0x0b
|
||||||
|
uint8_t buffer_status2; // 0x0c
|
||||||
|
uint8_t buffer_status1; // 0x0d
|
||||||
|
uint8_t last_nfc_addr; // 0x0e
|
||||||
|
uint8_t _nc1[0x1b - 0x0f + 1]; // 0x0f - 0x1b
|
||||||
|
uint8_t product_type; // 0x1c
|
||||||
|
uint8_t product_subtype; // 0x1d
|
||||||
|
uint8_t version_maj; // 0x1e
|
||||||
|
uint8_t version_min; // 0x1f
|
||||||
|
} regs;
|
||||||
|
} AMS_DEVICE;
|
||||||
|
|
||||||
|
#define AMS_REG_IO_CONF 0x00
|
||||||
|
#define AMS_REG_IC_CONF0 0x01
|
||||||
|
#define AMS_REG_IC_CONF1 0x02
|
||||||
|
#define AMS_REG_IC_CONF2 0x03
|
||||||
|
|
||||||
|
#define AMS_CMD_DEFAULT 0x02
|
||||||
|
#define AMS_CMD_CLEAR_BUFFER 0x04
|
||||||
|
#define AMS_CMD_RESTART_TRANSCEIVER 0x06
|
||||||
|
#define AMS_CMD_DIS_EN_TRANSCEIVER 0x07
|
||||||
|
#define AMS_CMD_TRANSMIT_BUFFER 0x08
|
||||||
|
#define AMS_CMD_TRANSMIT_ACK 0x09
|
||||||
|
#define AMS_CMD_TRANSMIT_NACK0 0x0A
|
||||||
|
#define AMS_CMD_TRANSMIT_NACK1 0x0B
|
||||||
|
#define AMS_CMD_TRANSMIT_NACK4 0x0D
|
||||||
|
#define AMS_CMD_TRANSMIT_NACK5 0x0C
|
||||||
|
#define AMS_CMD_SLEEP 0x10
|
||||||
|
#define AMS_CMD_SENSE 0x11
|
||||||
|
#define AMS_CMD_SENSE_SLEEP 0x12
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user