W5100ev01-avr rs232 통신관련


#1

안녕하세요 현제 w5100ev01-avr 보드를 가지고 테스트 중에 있습니다.

w5100ev01-avr에 rs232 통신 포트가 두개 있습니다.

보드와 컴퓨터의 하이퍼 터미널과의 통신은 p1 포트를 사용하여 하고 있는데요.

혹시 p2 포트를 다른 기기와 rs232 통신을 하기 위한 포트로 사용할 수 있나요?


#2

네 가능합니다.


#3

저희 홈페이지에 가면 W5100E01-AVR의 회로도가 있습니다.
더 자세한 회로도를 알고싶으시면 아래의 링크로 들어가시면 됩니다.

http://www.wiznet.co.kr/UpLoad_Files/ReferenceFiles/SCHEMATICs_W5100E01-AVR.zip

thanks :slight_smile:


#4

관련 소스 지원좀 부탁드려도될까요…

제가 지금 소스를 보니 UART1을 사용하기 위해서는 serial.c 프로그램에서

SUPPORT_UART_ONE을 정의해주면 uart1을 사용하게끔 할수 있는것같은데

제가 정확하게 파악하고 있는건지 모르겠습니다.

일단은 serieal.c 에

#define SUPPORT_UART_ONE 이라 정의하였고

extern char uart1_getchar(FILE *f);
extern void uart1_putchar(char c,FILE *f);

을 추가하여주었습니다.

그리고 evb.c의 eve_init()함수 내에
uart_init(0,7);함수 아래에
uart_init(1,7);을 추가하여 주었습니다.

이렇게 하여 컴파일후 다운로드 하여 p1에 연결된 RS232C 케이블을 p2 포트로 옮겨

management mode로 진입하는지 테스트 해보았으나 하이퍼터미널 상에 아무 메세지도 표시되지 않았습니다.
그리하여 p1 포트로 다시 RS232C 케이블을 옮겨서 테스트 해보니 management mode로 진입은 하지만
키입력이 되지 않네요…

혹시 UART1을 사용하기 위해서는 다른 소스를 더 입력해주어야 하는건지 궁금합니다.


#5

말씀하신대로 구현하시면 uart 2개를 사용할 수 있습니다.
하지만, manage mode에서 출력과 입력은 uart0만을 사용하고 있습니다.
uart1로 변경하시면 uart1로 사용하실 수 있습니다.

이때 출력은 PRINT() DPRINT() macro로 출력이되고 있고, 이는 printf_P() 함수를 사용하여 stdout으로 출력되도록 되어 있습니다. 이부분을 uart2로 변경하실 경우,

uart_init() 함수에서
uart0을 fdevopen() 하는 코드를 주석처리하시고,
uart1을 fdevopen() 하는 코드를 사용하시면 됩니다.

현 코드는 이전 컴파일버전으로 만들어진 것으로, fdevopen()함수 대신

static FILE OUTPUT_device = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
static FILE INPUT_device = FDEV_SETUP_STREAM(NULL, uart1_getchar, _FDEV_SETUP_READ);
 
void main(void) {
    stdout = &OUTPUT_device;
    stdin = &INPUT_device;
}

로 사용하실수 있습니다. 자세한 것은 internet 을 검색해보면 많은 자료가 있으니 참고하세요.


#6

조언 감사 드립니다…

일단은 #define SUPPORT_UART_ONE 을 추가하여주고

extern char uart1_getchar(FILE *f);
extern void uart1_putchar(char c,FILE *f);

evb.c의 eve_init()함수 내에
uart_init(0,7);함수 아래에
uart_init(1,7);을 추가하여 준 다음 프로그램하여 테스트를 해보았습니다.

USART1의 인터럽트쪽은 저희가 테스트를 위해 프로그램을 수정하였구요.

P1포트에 RS232통신케이블을 꼽고 메니지 모드로 들어가는거까진 됩니다만

메니지모드의 각 항목 예를 들면 2. network configuration에 들어가면 각 채널별로 sever mode나 client 모드 설정에서

키입력이 되질 않습니다…


#7

안녕하세요.

답변이 늦어 죄송합니다.
아래의 코드는 2. network configuration > channel Config부분을 변경한 것입니다.

[code]while(sel != ‘e’ && sel != ‘E’)
{
PRINT( “\r\n------------------”
"\r\nCHANNEL CONFIG"
"\r\n------------------"
"\r\nD : Display Config");
.
.

  //sel = uart0_getchar(NULL);
	//uart0_putchar(sel,NULL);
	//uart_puts(0,"\r\n");
	sel = uart1_getchar(NULL);
	uart1_putchar(sel,NULL);
	uart_puts(1,"\r\n");

[/code]
evb/manage.c에서 다음과 같이 변경해주셔야합니다.

  • uart0_xxx => uart1_xxx
  • uart_puts(0,xxx)=> uart_puts(1,xxx)
  • uart_gets(0,xxx)=> uart_gets(1,xxx)

변경하시고 확인부탁드립니다.
thanks:)


#8

조언해주신 코드들은 uart0에서 설정하던 CONFIGURATION을

UART1로 연결하여 설정하는 방법 같습니다.

제가 말씀드리는건… 기존에 MANAGEMODE는 P1 PORT에 연결하여 설정하는 방식을 유지하고.

다만 P2 포트에 다른 232C 연결을 하기위해

#define SUPPORT_UART_ONE을 정의하여 UART0과 UART1을 다 사용하기 위함입니다…

두 포트를 전부 사용하도록 설정하고 프로그램을 다운로드 후,

기존 작동방식데로 p1에 시리얼 케이블을 연결하고 manage mode로 진입 후,

채널 설정이나 다른 설정을 하기위해 항목에 진입하면 키 작동이 먹지 않는 증상입니다…


#9

질문에 오핵 있었던 같습니다.
말씀하신대로 테스트를 해보고 결과를 알려 드리겠습니다.


#10

안녕하세요.

UART1에 대해 수정한 파일을 올려드립니다.
자세한 수정사항은 첨부파일의 README.txt를 보시면됩니다.

첨부 코드를 적용하면 다음과 같이 동작합니다.

  • UART0에서는 Configuration를 하고,
  • UART1에서는 Configuration 완료 후 UART1에 키(any key)를 입력하면 HELLO가 찍히도록 구현

thanks :slight_smile:
UART1.zip (6.32 KB)


#11

type.c 에 지정된… 버스 모드를 SPI로 설정해야 하나요?

REEDME 에 적힌대로 설정 후, 테스트 해보았으나…

pc :left_right_arrow: w5100ev01-avr board p2 port 로 연결하고

하이퍼링크상에서 키보드에 아무키나 눌러보아도 Hello란 글자는 출력이 되질 않습니다…

제가 일단은 변경한 소스를 첨부하오니 검토좀 부탁드릴게요
Wiznet_PROG_20140319.zip (766 KB)


#12

안녕하세요

첨부파일은 SPI mode로 TEST한것입니다.
Direct mode로 변경하여 TEST를 진행하였습니다.

첨부하신 소스를 확인해본 결과
main.c에서 printf가 아닌 uart_puts를 사용하셔서 쓰셔야합니다.

if(uart_keyhit(1))
{
                 uart_puts(1,"Hello\r\n");
                //printf("LOFACS");
}

thanks :slight_smile: