mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-23 22:45:27 -07:00
CHG: minor updates in the T55x7 methods. added the LED_A_ON / LED_A_OFF to indicate when a T55x7 command is running.
CHG: added some more comments to T55x7, next person who looks at this will have it easier.
This commit is contained in:
parent
ac2df3460a
commit
e16054a468
3 changed files with 34 additions and 39 deletions
|
@ -984,14 +984,12 @@ void UsbPacketReceived(uint8_t *packet, int len)
|
||||||
break;
|
break;
|
||||||
case CMD_T55XX_WRITE_BLOCK:
|
case CMD_T55XX_WRITE_BLOCK:
|
||||||
T55xxWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
|
T55xxWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
|
||||||
cmd_send(CMD_ACK,0,0,0,0,0);
|
|
||||||
break;
|
break;
|
||||||
case CMD_T55XX_READ_TRACE:
|
case CMD_T55XX_READ_TRACE:
|
||||||
T55xxReadTrace();
|
T55xxReadTrace();
|
||||||
break;
|
break;
|
||||||
case CMD_PCF7931_READ:
|
case CMD_PCF7931_READ:
|
||||||
ReadPCF7931();
|
ReadPCF7931();
|
||||||
cmd_send(CMD_ACK,0,0,0,0,0);
|
|
||||||
break;
|
break;
|
||||||
case CMD_PCF7931_WRITE:
|
case CMD_PCF7931_WRITE:
|
||||||
WritePCF7931(c->d.asBytes[0],c->d.asBytes[1],c->d.asBytes[2],c->d.asBytes[3],c->d.asBytes[4],c->d.asBytes[5],c->d.asBytes[6], c->d.asBytes[9], c->d.asBytes[7]-128,c->d.asBytes[8]-128, c->arg[0], c->arg[1], c->arg[2]);
|
WritePCF7931(c->d.asBytes[0],c->d.asBytes[1],c->d.asBytes[2],c->d.asBytes[3],c->d.asBytes[4],c->d.asBytes[5],c->d.asBytes[6], c->d.asBytes[9], c->d.asBytes[7]-128,c->d.asBytes[8]-128, c->arg[0], c->arg[1], c->arg[2]);
|
||||||
|
|
|
@ -1151,14 +1151,10 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
|
||||||
// TIMER_CLOCK1 = MCK/2, MCK is running at 48 MHz, Timer is running at 48/2 = 24 MHz
|
// TIMER_CLOCK1 = MCK/2, MCK is running at 48 MHz, Timer is running at 48/2 = 24 MHz
|
||||||
// Hitag units (T0) have duration of 8 microseconds (us), which is 1/125000 per second (carrier)
|
// Hitag units (T0) have duration of 8 microseconds (us), which is 1/125000 per second (carrier)
|
||||||
// T0 = TIMER_CLOCK1 / 125000 = 192
|
// T0 = TIMER_CLOCK1 / 125000 = 192
|
||||||
// 1 Cycle = 8 microseconds(us)
|
// 1 Cycle = 8 microseconds(us) == 1 field clock
|
||||||
|
|
||||||
|
|
||||||
// Write one bit to card
|
// Write one bit to card
|
||||||
void T55xxWriteBit(int bit)
|
void T55xxWriteBit(int bit) {
|
||||||
{
|
|
||||||
//FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
|
|
||||||
FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
|
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
|
||||||
if (!bit)
|
if (!bit)
|
||||||
SpinDelayUs(WRITE_0);
|
SpinDelayUs(WRITE_0);
|
||||||
|
@ -1169,54 +1165,58 @@ void T55xxWriteBit(int bit)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write one card block in page 0, no lock
|
// Write one card block in page 0, no lock
|
||||||
void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMode) {
|
||||||
{
|
LED_A_ON();
|
||||||
|
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
|
|
||||||
// Set up FPGA, 125kHz
|
// Set up FPGA, 125kHz
|
||||||
// Wait for config.. (192+8190xPOW)x8 == 67ms
|
|
||||||
LFSetupFPGAForADC(95, true);
|
LFSetupFPGAForADC(95, true);
|
||||||
|
|
||||||
// Now start writting
|
// Trigger T55x7 in mode.
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||||
SpinDelayUs(START_GAP);
|
SpinDelayUs(START_GAP);
|
||||||
|
|
||||||
// Opcode
|
// Opcode 10
|
||||||
T55xxWriteBit(1);
|
T55xxWriteBit(1);
|
||||||
T55xxWriteBit(0); //Page 0
|
T55xxWriteBit(0); //Page 0
|
||||||
|
|
||||||
if (PwdMode == 1){
|
if (PwdMode == 1){
|
||||||
// Pwd
|
// Send pwd
|
||||||
for (i = 0x80000000; i != 0; i >>= 1)
|
for (i = 0x80000000; i != 0; i >>= 1)
|
||||||
T55xxWriteBit(Pwd & i);
|
T55xxWriteBit(Pwd & i);
|
||||||
}
|
}
|
||||||
// Lock bit
|
// Send lock bit
|
||||||
T55xxWriteBit(0);
|
T55xxWriteBit(0);
|
||||||
|
|
||||||
// Data
|
// Send data
|
||||||
for (i = 0x80000000; i != 0; i >>= 1)
|
for (i = 0x80000000; i != 0; i >>= 1)
|
||||||
T55xxWriteBit(Data & i);
|
T55xxWriteBit(Data & i);
|
||||||
|
|
||||||
// Block
|
// Send block number
|
||||||
for (i = 0x04; i != 0; i >>= 1)
|
for (i = 0x04; i != 0; i >>= 1)
|
||||||
T55xxWriteBit(Block & i);
|
T55xxWriteBit(Block & i);
|
||||||
|
|
||||||
// Now perform write (nominal is 5.6 ms for T55x7 and 18ms for E5550,
|
// Perform write (nominal is 5.6 ms for T55x7 and 18ms for E5550,
|
||||||
// so wait a little more)
|
// so wait a little more)
|
||||||
FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
|
TurnReadLFOn(20 * 1000);
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
|
|
||||||
SpinDelay(20);
|
// field off
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||||
|
cmd_send(CMD_ACK,0,0,0,0,0);
|
||||||
|
LED_A_OFF();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TurnReadLFOn(int delay){
|
void TurnReadLFOn(int delay) {
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
|
||||||
// Give it a bit of time for the resonant antenna to settle.
|
// Give it a bit of time for the resonant antenna to settle.
|
||||||
SpinDelayUs(delay);
|
SpinDelayUs(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read one card block in page 0
|
// Read one card block in page 0
|
||||||
void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode) {
|
||||||
{
|
LED_A_ON();
|
||||||
|
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
|
|
||||||
//make sure block is at max 7
|
//make sure block is at max 7
|
||||||
|
@ -1234,18 +1234,16 @@ void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
||||||
T55xxWriteBit(0); //Page 0
|
T55xxWriteBit(0); //Page 0
|
||||||
|
|
||||||
if (PwdMode == 1){
|
if (PwdMode == 1){
|
||||||
// Pwd
|
// Send pwd
|
||||||
for (i = 0x80000000; i != 0; i >>= 1)
|
for (i = 0x80000000; i != 0; i >>= 1)
|
||||||
T55xxWriteBit(Pwd & i);
|
T55xxWriteBit(Pwd & i);
|
||||||
}
|
}
|
||||||
// zero bit to seperate
|
// Send a zero bit seperation
|
||||||
T55xxWriteBit(0);
|
T55xxWriteBit(0);
|
||||||
|
|
||||||
// Block
|
// Send block number
|
||||||
for (i = 0x04; i != 0; i >>= 1) {
|
for (i = 0x04; i != 0; i >>= 1)
|
||||||
T55xxWriteBit(Block & i);
|
T55xxWriteBit(Block & i);
|
||||||
Dbprintf("ice %d",i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turn field on to read the response
|
// Turn field on to read the response
|
||||||
TurnReadLFOn(START_GAP);
|
TurnReadLFOn(START_GAP);
|
||||||
|
@ -1256,14 +1254,18 @@ void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
||||||
// field off
|
// field off
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||||
cmd_send(CMD_ACK,0,0,0,0,0);
|
cmd_send(CMD_ACK,0,0,0,0,0);
|
||||||
LED_D_OFF();
|
LED_A_OFF();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Read card traceability data (page 1)
|
// Read card traceability data (page 1)
|
||||||
void T55xxReadTrace(void){
|
void T55xxReadTrace(void){
|
||||||
|
LED_A_ON();
|
||||||
|
|
||||||
|
// Set up FPGA, 125kHz
|
||||||
|
LFSetupFPGAForADC(95, true);
|
||||||
|
|
||||||
LFSetupFPGAForADC(0, true);
|
// Trigger T55x7 in mode.
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||||
SpinDelayUs(START_GAP);
|
SpinDelayUs(START_GAP);
|
||||||
|
|
||||||
|
@ -1280,7 +1282,7 @@ void T55xxReadTrace(void){
|
||||||
// field off
|
// field off
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||||
cmd_send(CMD_ACK,0,0,0,0,0);
|
cmd_send(CMD_ACK,0,0,0,0,0);
|
||||||
LED_D_OFF();
|
LED_A_OFF();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -268,7 +268,7 @@ void ReadPCF7931() {
|
||||||
}
|
}
|
||||||
Dbprintf("-----------------------------------------");
|
Dbprintf("-----------------------------------------");
|
||||||
|
|
||||||
return ;
|
cmd_send(CMD_ACK,0,0,0,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -436,18 +436,13 @@ void SendCmdPCF7931(uint32_t * tab){
|
||||||
while(tempo != tab[u+2]){
|
while(tempo != tab[u+2]){
|
||||||
tempo = AT91C_BASE_TC0->TC_CV;
|
tempo = AT91C_BASE_TC0->TC_CV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LED_A_OFF();
|
LED_A_OFF();
|
||||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||||
SpinDelay(200);
|
SpinDelay(200);
|
||||||
|
|
||||||
|
|
||||||
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; // timer disable
|
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; // timer disable
|
||||||
DbpString("FINISH !");
|
|
||||||
DbpString("(Could be usefull to send the same trame many times)");
|
|
||||||
LED(0xFFFF, 1000);
|
LED(0xFFFF, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue