Перейти к содержанию
    

8051f340 UART & Season interface - how to send ATR?

Пытаюсь оживить Season интерфейс. Это такой эмулятор смарт карты. Ведет он себя ровно как смарт или сим карта.

Он вставляется в слот считывателя и после сброса по питанию выдает считавателю ATR ответ и после этого считыватель он же ридер готов общаться с помощью APDU команд.

Устанавливается обмен по последовательному порту со скоростью 9600 N-8-1.

Season подключает три провода RX TX и Reset.

Reset он же сброс по питанию я вижу по прерыванию меняю значение LED на одно их IO портов.

А вот дальше я забуксовал. Нужно отправить десяток HEX-ов через порт во временных рамках 40000 циклов, но ридер меня не видет и никак не реагирует.

Может у кого остались исходники работы с Season интерфейсом?

Или есть идеи как его побороть?

Прерывание (P00) запаяно на первую ножку DB9 оно же сброс который от ридера.

По прерыванию у меня переключается LED1. Это происходит и когда вставляю в ридер Season и если если задаю reset  в программе управления ридером.

//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void)
{
	 char atr[16] = {0x3B, 0xF7, 0x11, 0x00, 0x40, 0x96, 0x70, 0x70, 0x07, 0x0E, 0x6C, 0xB6, 0xD6};	
   PCA0MD &= ~0x40;                    // Disable Watchdog timer
   Oscillator_Init();                  // Initialize the system clock
   Port_Init ();                       // Initialize crossbar and GPIO
   Ext_Interrupt_Init();               // Initialize External Interrupts
   EA = 1;
	 if(!LED1) {
			uart_tx(0x3B);
		 	uart_tx(0xF7);
			uart_tx(0x11);
			uart_tx(0x00);
			uart_tx(0x40);
			uart_tx(0x96);		 
	 }
	 
   while(1);
}

//
void uart_msg(unsigned char *c) {
		while(*c != 0) {
				uart_tx(*c++);
		}
}


void uart_tx(unsigned int sdata) {
		while(!TI0);
		SBUF0 = sdata;
		while(!TI0);
		TI0 = 0;
}
//-----------------------------------------------------------------------------
void INT0_ISR (void) interrupt 0
{
   LED1 = !LED1;
}

 

IMG_2375.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цитата

   PCA0MD &= ~0x40;                    // Disable Watchdog timer
   Oscillator_Init();                  // Initialize the system clock
   Port_Init ();                       // Initialize crossbar and GPIO
   Ext_Interrupt_Init();               // Initialize External Interrupts

А где настройка УАРТ (скорость, четность)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...