mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 13:23:51 -07:00
chg: more tests
This commit is contained in:
parent
d20b11a288
commit
103e0b5191
2 changed files with 114 additions and 52 deletions
|
@ -3,39 +3,94 @@
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
|
|
||||||
#define address_length 3
|
#define address_length 3
|
||||||
#define data_len 3
|
|
||||||
|
|
||||||
extern void Dbprintf(const char *fmt, ...);
|
extern void Dbprintf(const char *fmt, ...);
|
||||||
|
|
||||||
|
static void FlashInit() {
|
||||||
|
SetupSpi(SPI_MEM_MODE);
|
||||||
|
NCS_3_LOW;
|
||||||
|
Dbprintf("FlashInit");
|
||||||
|
}
|
||||||
|
static void FlashStop(){
|
||||||
|
NCS_3_HIGH;
|
||||||
|
Dbprintf("FlashStop");
|
||||||
|
}
|
||||||
|
static void FlashSend(uint16_t data) {
|
||||||
|
|
||||||
|
Dbprintf("FlashSend");
|
||||||
|
|
||||||
|
// 9th bit set for data, clear for command
|
||||||
|
while ((AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TXEMPTY) == 0); // wait for the transfer to complete
|
||||||
|
// For clarity's sake we pass data with 9th bit clear and commands with 9th
|
||||||
|
// bit set since they're implemented as defines, se we need to invert bit
|
||||||
|
AT91C_BASE_SPI->SPI_TDR = data ^ 0x100; // Send the data/command
|
||||||
|
}
|
||||||
|
static uint8_t FlashWriteRead(uint8_t data){
|
||||||
|
FlashSend(READDATA);
|
||||||
|
FlashSend(data);
|
||||||
|
uint8_t ret = MISO_VALUE;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
static void FlashWrite_Enable(){
|
||||||
|
FlashWriteRead(WRITEENABLE);
|
||||||
|
Dbprintf("Flash WriteEnabled");
|
||||||
|
}
|
||||||
|
static uint8_t FlashRead(uint8_t *address, uint16_t len) {
|
||||||
|
FlashSend(READDATA);
|
||||||
|
for (uint16_t i = 0; i < len; i++) {
|
||||||
|
FlashWriteRead(address[i]);
|
||||||
|
}
|
||||||
|
uint8_t tmp = FlashWriteRead(0XFF);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
void EXFLASH_TEST(void) {
|
||||||
|
uint8_t a[3] = {0x00,0x00,0x00};
|
||||||
|
//uint8_t b[3] = {0x00,0x01,0x02};
|
||||||
|
uint8_t d = 0;
|
||||||
|
|
||||||
|
FlashInit();
|
||||||
|
|
||||||
|
FlashWrite_Enable();
|
||||||
|
|
||||||
|
//Dbprintf("write 012 to 0x00 0x01 0x02");
|
||||||
|
//EXFLASH_Program(a, b, sizeof(b));
|
||||||
|
|
||||||
|
d = FlashRead(a, sizeof(a));
|
||||||
|
Dbprintf("%02x | %02x %02x %02x", d, a[0], a[1], a[2]);
|
||||||
|
|
||||||
|
FlashStop();
|
||||||
|
cmd_send(CMD_ACK, 1, 0, 0, 0,0);
|
||||||
|
}
|
||||||
|
|
||||||
// IO spi write or read
|
// IO spi write or read
|
||||||
uint8_t EXFLASH_spi_write_read(uint8_t wData) {
|
uint8_t EXFLASH_spi_write_read(uint8_t wData) {
|
||||||
uint8_t i, tmp = 0;
|
uint8_t tmp = 0;
|
||||||
|
SCK_LOW;
|
||||||
|
NCS_3_LOW;
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
SCK_LOW;
|
SCK_LOW;
|
||||||
NCS_3_LOW;
|
SpinDelayUs(2);
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
if (wData & 0x80) {
|
||||||
SCK_LOW;
|
MOSI_HIGH;
|
||||||
SpinDelayUs(2);
|
} else {
|
||||||
|
MOSI_LOW;
|
||||||
if (wData&0x80) {
|
SpinDelayUs(2);
|
||||||
MOSI_HIGH;
|
|
||||||
} else {
|
|
||||||
MOSI_LOW;
|
|
||||||
SpinDelayUs(2);
|
|
||||||
}
|
|
||||||
wData <<= 1;
|
|
||||||
SCK_HIGH;
|
|
||||||
tmp <<= 1;
|
|
||||||
tmp |= MISO_VALUE;
|
|
||||||
}
|
}
|
||||||
SCK_LOW;
|
wData <<= 1;
|
||||||
return tmp;
|
SCK_HIGH;
|
||||||
|
tmp <<= 1;
|
||||||
|
tmp |= MISO_VALUE;
|
||||||
|
}
|
||||||
|
SCK_LOW;
|
||||||
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t EXFLASH_readStat1(void) {
|
uint8_t EXFLASH_readStat1(void) {
|
||||||
uint8_t stat1 = 3;
|
uint8_t stat1 = 3;
|
||||||
EXFLASH_spi_write_read(READSTAT1);
|
EXFLASH_spi_write_read(READSTAT1);
|
||||||
stat1 = EXFLASH_spi_write_read(0xff);
|
stat1 = EXFLASH_spi_write_read(0xFF);
|
||||||
NCS_3_HIGH;
|
NCS_3_HIGH;
|
||||||
return stat1;
|
return stat1;
|
||||||
}
|
}
|
||||||
|
@ -43,12 +98,12 @@ uint8_t EXFLASH_readStat1(void) {
|
||||||
uint8_t EXFLASH_readStat2(void) {
|
uint8_t EXFLASH_readStat2(void) {
|
||||||
uint8_t stat2;
|
uint8_t stat2;
|
||||||
EXFLASH_spi_write_read(READSTAT2);
|
EXFLASH_spi_write_read(READSTAT2);
|
||||||
stat2 = EXFLASH_spi_write_read(0xff);
|
stat2 = EXFLASH_spi_write_read(0xFF);
|
||||||
NCS_3_HIGH;
|
NCS_3_HIGH;
|
||||||
return stat2;
|
return stat2;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ESFLASH_NOTBUSY(void) {
|
bool EXFLASH_NOTBUSY(void) {
|
||||||
uint8_t state, count = 0;
|
uint8_t state, count = 0;
|
||||||
do {
|
do {
|
||||||
state = EXFLASH_readStat1();
|
state = EXFLASH_readStat1();
|
||||||
|
@ -65,14 +120,14 @@ void EXFLASH_Write_Enable(void) {
|
||||||
NCS_3_HIGH;
|
NCS_3_HIGH;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t EXFLASH_Read(uint8_t address[]) {
|
uint8_t EXFLASH_Read(uint8_t *address, uint16_t len) {
|
||||||
uint8_t i, tmp;
|
if (!EXFLASH_NOTBUSY())
|
||||||
if (!ESFLASH_NOTBUSY())
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
EXFLASH_spi_write_read(READDATA);
|
EXFLASH_spi_write_read(READDATA);
|
||||||
|
|
||||||
for (i=0; i < address_length; i++) {
|
uint8_t tmp;
|
||||||
|
for (uint16_t i=0; i < len; i++) {
|
||||||
EXFLASH_spi_write_read(address[i]);
|
EXFLASH_spi_write_read(address[i]);
|
||||||
}
|
}
|
||||||
tmp = EXFLASH_spi_write_read(0XFF);
|
tmp = EXFLASH_spi_write_read(0XFF);
|
||||||
|
@ -80,7 +135,7 @@ uint8_t EXFLASH_Read(uint8_t address[]) {
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t EXFLASH_Program(uint8_t address[],uint8_t array[], uint8_t len) {
|
uint8_t EXFLASH_Program(uint8_t address[], uint8_t *array, uint8_t len) {
|
||||||
uint8_t state1, count = 0, i;
|
uint8_t state1, count = 0, i;
|
||||||
EXFLASH_Write_Enable();
|
EXFLASH_Write_Enable();
|
||||||
|
|
||||||
|
@ -107,16 +162,17 @@ uint8_t EXFLASH_Program(uint8_t address[],uint8_t array[], uint8_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t EXFLASH_ReadID(void) {
|
uint8_t EXFLASH_ReadID(void) {
|
||||||
uint8_t ManID; // DevID
|
|
||||||
if (!ESFLASH_NOTBUSY())
|
if (!EXFLASH_NOTBUSY())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
uint8_t ManID; // DevID
|
||||||
EXFLASH_spi_write_read(MANID);
|
EXFLASH_spi_write_read(MANID);
|
||||||
EXFLASH_spi_write_read(0x00);
|
EXFLASH_spi_write_read(0x00);
|
||||||
EXFLASH_spi_write_read(0x00);
|
EXFLASH_spi_write_read(0x00);
|
||||||
EXFLASH_spi_write_read(0x00);
|
EXFLASH_spi_write_read(0x00);
|
||||||
ManID=EXFLASH_spi_write_read(0xff);
|
ManID = EXFLASH_spi_write_read(0xff);
|
||||||
// DevID=EXFLASH_spi_write_read(0xff);
|
// DevID = EXFLASH_spi_write_read(0xff);
|
||||||
|
|
||||||
NCS_3_HIGH;
|
NCS_3_HIGH;
|
||||||
return ManID;
|
return ManID;
|
||||||
|
@ -141,18 +197,23 @@ bool EXFLASH_Erase(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EXFLASH_Reset(void) {
|
bool EXFLASH_Reset(void) {
|
||||||
LED_A_ON(); //blue
|
LED_A_ON();
|
||||||
SetupSpi(SPI_MEM_MODE);
|
SetupSpi(SPI_MEM_MODE);
|
||||||
|
|
||||||
if (!ESFLASH_NOTBUSY())
|
NCS_3_LOW;
|
||||||
return false;
|
|
||||||
|
|
||||||
EXFLASH_spi_write_read(Enable_Reset);
|
if (!EXFLASH_NOTBUSY()) {
|
||||||
|
LED_A_OFF();
|
||||||
|
Dbprintf("[!] init reset failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXFLASH_spi_write_read(ENABLE_RESET);
|
||||||
NCS_3_HIGH;
|
NCS_3_HIGH;
|
||||||
EXFLASH_spi_write_read(Reset);
|
EXFLASH_spi_write_read(RESET);
|
||||||
NCS_3_HIGH;
|
NCS_3_HIGH;
|
||||||
SpinDelayUs(10);
|
SpinDelayUs(10);
|
||||||
LED_A_ON();
|
LED_A_OFF();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,31 +221,31 @@ void EXFLASH_Init(void) {
|
||||||
EXFLASH_Reset();
|
EXFLASH_Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void EXFLASH_TEST(void) {
|
void EXFLASH_TEST(void) {
|
||||||
uint8_t a[3] = {0x00,0x00,0x00};
|
uint8_t a[3] = {0x00,0x00,0x00};
|
||||||
uint8_t b[data_len] = {0x00,0x01,0x02};
|
uint8_t b[3] = {0x00,0x01,0x02};
|
||||||
uint8_t f[3] = {0x00,0x00,0x01};
|
uint8_t f[3] = {0x00,0x00,0x01};
|
||||||
uint8_t e[3] = {0x00,0x00,0x02};
|
uint8_t e[3] = {0x00,0x00,0x02};
|
||||||
uint8_t d = 0;
|
uint8_t d = 0;
|
||||||
|
|
||||||
EXFLASH_Init();
|
//EXFLASH_Init();
|
||||||
// c = EXFLASH_ReadID();
|
// c = EXFLASH_ReadID();
|
||||||
|
|
||||||
//EXFLASH_Write_Enable();
|
//EXFLASH_Write_Enable();
|
||||||
//EXFLASH_readStat1();
|
//EXFLASH_readStat1();
|
||||||
Dbprintf("%s \r\n", "write 012 to 0x00 0x01 0x02");
|
Dbprintf("%s \r\n", "write 012 to 0x00 0x01 0x02");
|
||||||
|
|
||||||
Dbprintf("%s \r\n"," wait... ");
|
Dbprintf("%s \r\n"," wait... ");
|
||||||
|
|
||||||
EXFLASH_Program(a, b, data_len);
|
EXFLASH_Program(a, b, sizeof(b));
|
||||||
|
|
||||||
d = EXFLASH_Read(a);
|
d = EXFLASH_Read(a, sizeof(a) );
|
||||||
Dbprintf(" %d ", d);
|
Dbprintf(" %d ", d);
|
||||||
|
|
||||||
d = EXFLASH_Read(f);
|
d = EXFLASH_Read(f, sizeof(f) );
|
||||||
Dbprintf(" %d ", d);
|
Dbprintf(" %d ", d);
|
||||||
|
|
||||||
d = EXFLASH_Read(e);
|
d = EXFLASH_Read(e, sizeof(e) );
|
||||||
|
|
||||||
Dbprintf(" %d ", d);
|
Dbprintf(" %d ", d);
|
||||||
Dbprintf("%s \r\n","TEST done!");
|
Dbprintf("%s \r\n","TEST done!");
|
||||||
|
@ -192,3 +253,4 @@ void EXFLASH_TEST(void) {
|
||||||
EXFLASH_Erase();
|
EXFLASH_Erase();
|
||||||
cmd_send(CMD_ACK, 1, 0, 0, 0,0);
|
cmd_send(CMD_ACK, 1, 0, 0, 0,0);
|
||||||
}
|
}
|
||||||
|
*/
|
|
@ -51,8 +51,8 @@
|
||||||
#define RELEASE 0xAB
|
#define RELEASE 0xAB
|
||||||
#define POWERDOWN 0xB9
|
#define POWERDOWN 0xB9
|
||||||
#define BLOCK64ERASE 0xD8
|
#define BLOCK64ERASE 0xD8
|
||||||
#define Enable_Reset 0x66
|
#define ENABLE_RESET 0x66
|
||||||
#define Reset 0x99
|
#define RESET 0x99
|
||||||
|
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
|
||||||
// Chip specific instructions //
|
// Chip specific instructions //
|
||||||
|
@ -123,10 +123,10 @@
|
||||||
uint8_t EXFLASH_spi_write_read(uint8_t wData);
|
uint8_t EXFLASH_spi_write_read(uint8_t wData);
|
||||||
uint8_t EXFLASH_readStat1(void) ;
|
uint8_t EXFLASH_readStat1(void) ;
|
||||||
uint8_t EXFLASH_readStat2(void) ;
|
uint8_t EXFLASH_readStat2(void) ;
|
||||||
bool ESFLASH_NOTBUSY(void);
|
bool EXFLASH_NOTBUSY(void);
|
||||||
void EXFLASH_Write_Enable(void) ;
|
void EXFLASH_Write_Enable(void) ;
|
||||||
uint8_t EXFLASH_Read(uint8_t address[]);
|
uint8_t EXFLASH_Read(uint8_t *address, uint16_t len);
|
||||||
uint8_t EXFLASH_Program(uint8_t address[],uint8_t array[], uint8_t len) ;
|
uint8_t EXFLASH_Program(uint8_t address[], uint8_t *array, uint8_t len) ;
|
||||||
|
|
||||||
uint8_t EXFLASH_ReadID(void) ;
|
uint8_t EXFLASH_ReadID(void) ;
|
||||||
bool EXFLASH_Erase(void) ;
|
bool EXFLASH_Erase(void) ;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue