:::: MENU ::::
Browsing posts in: Development

사설 IP 대역

이런 것도 찾아볼 때가 있으니, 정리~

  • A 클래스 : 10.0.0.0 ~ 10.255.255.255
  • B 클래스 : 172.16.0.0 ~ 172.31.255.255
  • C 클래스 : 192.168.0.0 ~ 192.168.255.255


Ethernet Auto negotiation – Duplex mismatch

이더넷 네트워크에서 auto negotiation은 PHY에서 담당하는 기능으로 전송선로상에서 상대방(peer)의 속도 및 half/ full duplex여부를 자동으로 결정하는 plug and play  같은 기능이다. 이 기능은 1997년에 Fast Ethernet IEEE802.3u 표준으로 들어갔고, 1999년에 Gigabit Ethenet 802.3ab 표준이 되었다.

Fast Ethernet 일 경우 1)양쪽이 auto일 경우 2) auto – 10/100 고정일 경우 3) 10/100고정 – 10/100 고정일 경우가 발생한다. 양쪽이 auto negotiation일 경우는 속도가 높고 duplex쪽으로 잡힌다. 즉 다음과 같은 우선 순위에 의해 속도 및 duplex가 결정이 된다.

  1. 1000BASE-T full duplex
  2. 1000BASE-T half duplex
  3. 100BASE-T2 full duplex
  4. 100BASE-TX full duplex
  5. 100BASE-T2 half duplex
  6. 100BASE-T4
  7. 100BASE-TX half duplex
  8. 10BASE-T full duplex
  9. 10BASE-T half duplex

하지만 한쪽만 auto이고 다른 한 쪽이 10/100으로 고정을 할 경우 속도는 10/100잘 설정이 되는데 duplex에 문제가 발생할 수 있다. 여러 경우의 수 중에서 duplex에 문제가 생기는 경우는 한쪽이 Full Duplex인 경우이다.

즉 한쪽이 auto-negotiation으로 설정이 되어 있고, 다른 쪽이 full duplex일 경우 full duplex로 잡힐것 같지만 그렇지 않다. 이 경우는 하위 호환성을 해 무조건 half-duplex로 잡힌다는 사실…

관련 자료

http://e2epi.internet2.edu/case-studies/SC02/DuplexMismatch.html

http://en.wikipedia.org/wiki/Autonegotiation

http://en.wikipedia.org/wiki/Duplex_mismatch

[wpdm_file id=9] 


W5500 드라이버 포팅: Parallax Propeller칩

Parrallax는 미국의 펩리스 반도체 회사이다. 이 회사의 칩은 Propeller인데 이 칩은 특이하게도 내부에 8개의 프로세어 코아가 있어서 병렬처리가 가능하다. 이 8개의 코아를 COG라고 부르는데, 아래 블럭다이아그램 처럼 내부에 각각 프로세서, RAM, 레지스터, 카운터 등이 있고 이 COG가 외부에 나와 있는 I/O를 공유한다. 그리고 각각의 COG를 제어하는 HUB가 있어서 각각의 COG각 언제 I/O를 access할지를 결정한다.

parallax_propeller

Propeller칩을 프로그래밍하게 위해서는 어셈블러, SPIN이라는 언어로 프로그래밍이 가능하며, 최근에는 C 컴파일러가 지원이어서 C로도 프로그래밍이 가능하지만 코드사이즈나 성능이슈로 대부분의 코드는 어셈블러나 SPIN으로 만들어져 있다.

데이터 시트 및 메뉴얼은 다음 링크에서 다운로드…

[wpdm_file id=7]  [wpdm_file id=8]

W5500칩의 드라이버를 포팅하기 위해 사용한 보드는 Propeller Activity Board인데, 이 보드에 있는 브레드보드에 WIZ550io를 꼽고 와이어링을 통해 Propeller칩과 연결을 했다. 연결되는 방식은 SPI 신호, 리셋 신호 및 전원 신호만 결하면 되므로 간단하다.

Propeller_WIZ550io

포팅한 코드는 Mike G라는 사람이 W5200으로 만든 코드를 포팅을 했는데, 이 코드는 SPI 인터페이스가 어셈블러로 되어있어서 이것을 일단 SPIN 랭귀지로 수정했다. W5500에서는 SPI 포맷 및 메모리 맵이 바뀌어서 W5500을 read, write하는 함수들 역시 수정을 했다.  수정된 코드가 제대로 동작하는지 확인을 하기위해 TCPMultiSocketServer 프로그램(간단한 웹서버 프로그램) 코드와 같이 컴파일을 해서 돌리니 잘 동작한다.

관련된 모든 코드는 github에 오픈: https://github.com/jbkim/Parallax_W5500


C 매크로: Paste Token, String-izing Tokens

Pasting Tokens

Each argument passed to a macro is a token, and sometimes it might be expedient to paste arguments together to form a new token. This could come in handy if you have a complicated structure and you’d like to debug your program by printing out different fields. Instead of writing out the whole structure each time, you might use a macro to pass in the field of the structure to print.

To paste tokens in a macro, use ## between the two things to paste together.

For instance

#define BUILD_FIELD(field) my_struct.inner_struct.union_a.##field

Now, when used with a particular field name, it will expand to something like

my_struct.inner_struct.union_a.field1

The tokens are literally pasted together.

String-izing Tokens

Another potentially useful macro option is to turn a token into a string containing the literal text of the token. This might be useful for printing out the token. The syntax is simple–simply prefix the token with a pound sign (#).

#define PRINT_TOKEN(token) printf(#token " is %d", token)

For instance, PRINT_TOKEN(foo) would expand to

printf("<foo>" " is %d" <foo>)

(Note that in C, string literals next to each other are concatenated, so something like “token” ” is ” ” this ” will effectively become “token is this”. This can be useful for formatting printf statements.)

For instance, you might use it to print the value of an expression as well as the expression itself (for debugging purposes).

PRINT_TOKEN(x + y);

출처: http://www.cprogramming.com/tutorial/cpreprocessor.html 


Transformer없이 이더넷 구현하기

일반적으로 이더넷 응용에서는 PHY의 출력단에 트랜스포머가 필요하다. 하지만 길이가 짧은 경우나 특별한 응용의 경우 트랜스포머를 사용하지 않고 구현이 가능하다. 이 때는 TX+-, RX+- 신호에 DC 커플링 캐패시터 33nF를 연결을 한다.

[wpdm_file id=6]

사실 이 내용보다는 IEEE802.3에서 요구하는 PHY signal의 형태가 다른 문서에서는 볼 수 없어서 귀중한 자료…

Phy_Signal


CortexM0 보드와 CooCox

NXP LPC1114 보드

이전 블로그를 보니 2011년도 초에 NXP와 Nuvoton의 Cortex M0에 대해 쓴 블로그 포스팅이 있었는데 최근 당시에 CooCox로 부터 받은 보드와 최근에 Nuvoton에서 받은 보드를 테스트를 해봤다. 아래 그림에서 위에 있는 것은 NXP칩을 사용한 LPC1114보드이고, 아래 그림은 Nuvoton의 M0516NBL 을 사용한 보드이다.

CortexM0 보드

최근 이런 개발 보드들의 특징은 디버거를 포함을 하고 있는데, 보드의 좌측 부분이 디버거 기능을 하며,  CMSIS-DAP 기능을 한다.

하지만 몇 년 지난 보드를 다시 PC에 연결을 해보니 일단 연결 부터가 되지 않는다. 아마도 이 보드의 CooCoox의 ColinkEX가 업데이트가 됐는가 싶어서 이 보드의 ColinkEX f/w를 확인해 보니 예상한 대로 f/w가 업데이트 되어 있다. 관련 자료: http://www.coocox.org/CoLinkGuide/CoLinkDIY.htm

  • JP1을 쇼트시키고 USB 전원을 연결하면 LPC1343 칩의 내부 메모리가 “”CRP2 ENABLD” or “CRP DISABLD”의 레이블을 가진 MSD로 잡힌다.
  • 여기에 파일을 제거하고 위 링크에서 F/W를 다운로그해서 카피한다.
  • JP1을 오픈하고 USB 전원을 다시 연결한다.

물론 PC에는 드라이버를 설치를 해야한다.

Nuvoton NuTiny-M051보드

이 보드의 왼쪽 부분의 디버거의 이름은 Nulink이며, 보드를 PC에 연결을 하니 USB-HID로 잡힌다. NXP 보드와 마찬가지로 디버거를 이용해 개발을 하고 양산시에는 보드를 잘라서 F/W를 구울수 있는 구조로 되어 있다. 사용해 보니 mbed에 있는 CMSIS-DAP와 다른 점은 호스트에 연결되는 USB로 시리얼까지 처리를 하지는 않아서 시리얼 출력을 보려면 보드에서 선을 따로 뽑아야 한다. 하지만 NXP 보드는 보드에 RS232C 드라이버 칩과 소켓이 있어서 바로 연결을 할 수 있다.

CooCox 개발 환경

CooCox 역시 당시 블로그 포스팅에도 소개를 했었는데 최근 다시 설치를 해서 확인을 해보니 다양한 Cortex 칩들을 지원을 하고 있고, 커뮤니티도 제법 커져있다. 하지만 당시와 달라진 점은 ARM GCC 를 따로 설치를 해주고 경로를 설정을 해줘야 한다.

위 사이트에서 gcc를 다운로드 받고 설치를 한후, Project >> Select Toolchain Path를 지정을 한다.

CoIDE_Set_1

Blink 테스트

입베디드 보드에서의 Hello World와 같은 LED 깜박이기 예제를 돌려보자. 프로젝트를 만드는 것은 쉽다.

coocox

  • Project >> New Project : 프로젝트 이름을 정한다.
  • 칩 또는 보드를 선택을 하는데, 만약 이 툴에서 제공하는 보드리스트에 사용하는 보드가 있다면 보드를 선택을 하고, 없다면 칩을 선택한다.
  • 사용할 컴포넌트를 선택한다.  만약 GPIO를 선택을 하면  CMSIS Core와 CMSIS Boot는 자동으로 로드 된다. (스텝 3)
  • 좌측 창의 Component 부분의 GPIO에  2개의 예제가 있다고 표시가 된다. 이것을 선택을 하고 Blink예제를 add하면 프로젝트의 main 함수에서 blink 함수를 호출을 한다.
  • Blink.c 파일을 보면 Port2의 GPIO9 를 on/off 하는데, 내가 가지고 있는 보드의 설정과 동일하다. 즉 코드를 수정할 필요가 없다.
  • Project  >> Build (단축키 F7)를 한후, Flash >> Program Download를 선택한다. (보드의 JP2는 쇼트)
  • 보드의 JP2를 오픈하고 리셋 버튼을 누르면 다운로드 한 코드가 동작을 한다.

이상으로 코드 한줄 코딩하지 않고 개발 환경 설정하고 칩에 F/W까지 다운로드해서 동작을 확인했다. 사용을 해보니 참 편한데 한가지 아쉬운 점은 CooCox가 Windows만 지원을 한다는 것. LPCXpresso의 경우는 3가지 OS (Win, MAC, Linux)를 다 지원하는데….


Nightly build

Nightly build란?

오픈소스프로젝트의 소스를 다운로드하다보니 정식으로 릴리즈된 버젼이 있고, 그 밑에 Nightly build라는 것이 있다. 위키피디아에 찾아보니 다음과 같이 나온다.

소프트웨어 개발 단계에 따라 분류를 나눌 수 있다. 소프트웨어 배포자에 따라 이 소프트웨어 분류는 바뀔 수 있지만 일반적인 룰은 다음과 같다.

  1. 알파 버전: 개발 주기에서 알파 버전의 경우 내부 테스트용으로 공개하는 경우가 많다. 거의 모든 주요 기능을 포함하고 있지만 많은 버그가 존재하고 실제 사용자가 도입해서 사용하기에는 무리가 있는 버전을 말한다. 베타 버전 이전의 단계이다.
  2. 베타 버전: 베타 버전의 경우 알파에서 나온 문제점들을 수정한 단계이고 외부로 공개 테스트를 시작할 수 있을 정도의 완성도를 가진 소프트웨어를 말한다. 이후로는 새로운 기능보다는 나온 문제점들을 수정하고 UI를 최적화 하는 작업을 진행한다.
  3. RC (Release Candidate): RC는 Microsoft에서 사용하는 소프트웨어 개발 단계로 정식판이 배포되지 직전의 단계로 볼 수 있다. 일반적으로 베타와 정식 배포판의 중간단계에 해당한다.
  4. Nightly build: 매일 발생하는 소프트웨어에 대한 수정사항을 포함하고 있는 소프트웨어 배포버전이다. 소프트웨어는 테스트가 되어 있지 않을 수 있기 때문에 매우 불안정한 상태이다.

출처: 위키피디아(소프트웨어)

영문 위키피디아에 보면 왜 nightly build라는 말을썼는지 이해가 더 쉬울듯…

nightly build is a neutral build that takes place automatically. These typically take place when no one is likely to be working in the office so that there are no changes to the source code during the build. The results of the build are inspected by the arriving programmers, who generally place a priority on ensuring the recent changes to the source code have not broken the build process or functionality of the software.

 



Eagle CAD에서 라이브러리 관리

  • Eagle CAD에서 라이브러리에 있는 파트를 삭제하는 방법은 ?

라이브러리 자체를 삭제하는 것은 간단하지만, 라이브러리에 있는 부품을 삭제하고 싶을 때는 다음과 같이 하면 된다.

-. Control Panel에서 일단 해당라이브러리를 연다. File > Open > Library

-. Library > Remove… 메뉴를 선택을 하고, 삭제하고자 하는 라이브러리 명을 입력한다.

  • 라이브러리에 있는 부품을 복사하는 방법?

이건 간단한데, 자주쓰는 부품을 모아서 나만의 라이브러리를 만들때 유용하다.

-. Control Panel에서 라이브러리를 열고, 원하는 부품을 선택한다.

-. 오른쪽 마우스를 클릭하면 2개의 메뉴가 나타나는데, 이 메뉴가 활성화되어서 나타나게 하려면, 미리 Copy나 Add 하고자 하는 창이 열려있어야 한다.

즉 라이브러리를 먼저 열어와야 “Copy to Library”라는 메뉴가 활성화 된다. <= 이게 핵심..


Pages:1...11121314151617...24