Jump to content

    
Sign in to follow this  
kuka_v

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

Recommended Posts

Пытаюсь оживить 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

Share this post


Link to post
Share on other sites
Цитата

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this