Code:
#include <avr/io.h>
#include <util/delay.h>
#include "reader.h"
#include "uart.h"
#include "smartcard.h"
volatile unsigned char mem_main[256] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
int main() {
uart_init();
sm_init();
_delay_us(100);
sm_read(); // Dummy readout
_delay_us(500);
sm_read();
for (;; _delay_ms(1000)) {
print_mem();
}
return 0;
}
void sm_init() {
SM_DDR = (1 << SM_RST) | (1 << SM_CLK);
SM_PORT = (1 << SM_IO);
}
void sm_command(unsigned char b, unsigned char a, unsigned char d) {
// gekürzt
}
void sm_read() {
sm_command(0x30, 0x00, 0x00);
SM_PORT &= ~(1 << SM_CLK);
SM_DDR &= ~(1 << SM_IO);
SM_PORT |= (1 << SM_IO);
_delay_us(100);
for (unsigned int byte = 0; byte < 256; byte++) { // Byte-Schleife
unsigned char temp_byte = 0x00; // Temporäres Byte
for (unsigned char bit = 0; bit < 8; bit++) { // Bit-Schleife
SM_PORT |= (1 << SM_CLK); // Taktleitung auf H setzen
if (SM_PIN & (1 << SM_IO)) // I/O-Pin abfragen
temp_byte |= (1 << bit);
_delay_us(100);
SM_PORT &= ~(1 << SM_CLK); // Taktleitung auf L setzen
_delay_us(100);
}
mem_main[byte] = temp_byte; // Temporäres Byte in Hauptspeicher schreiben
}
}
void uart_init() {
// gekürzt
}
void uart_putc(unsigned char c) {
// gekürzt
}
void print_mem() {
for (unsigned int i = 0; i < 256; i++) {
uart_putc(mem_main[i]);
}
}
Ich habe deine Vorschläge umgesetzt, leider ohne Ergebnis. Die Hex Dumps sehen z.B. so aus:
Lesezeichen