'전체보기'에 해당되는 글 126건

  1. 2009.09.30 [MFC] 리스트 컨트롤 폰트 바꾸기
  2. 2009.09.18 TCP 헤더 분석 3
  3. 2009.09.16 ether_header 구조체와 iphdr 구조체를 이용한 패킷 분석
  4. 2009.09.16 바이트별로 노가다 작업을 통한 패킷 분석-ㅅ-; 1
  5. 2009.09.15 패킷 캡쳐로 살펴본 이더넷 프레임
  6. 2009.09.15 이더넷 프레임의 구조
  7. 2009.09.09 [ARM] 톨러런트
  8. 2009.09.07 소스 인사이트 include 파일 싱크 시키기와 ATmega128 용 프로젝트 생성하기
  9. 2009.09.04 8월 25일판 가을시즌 각종 드라마 시작날짜 1
  10. 2009.09.02 [ATmega128 & Zigbee] SPI 초기화
2009. 9. 30. 10:13

[MFC] 리스트 컨트롤 폰트 바꾸기

MFC나 API로 다이얼로그를 만들어서 하다보면 폰트가 마음에 안들때가 많습니다.

리스트 컨트롤로 헥스뷰어를 만들다가 폰트가 너무 마음에 안들어서 폰트 바꾸는 방법을 찾아봤습니다.

아래의 함수를 이용하면 폰트를 바꿀 수 있습니다.

HFONT CreateFont(
  int nHeight,             // logical height of font
  int nWidth,              // logical average character width
  int nEscapement,         // angle of escapement
  int nOrientation,        // base-line orientation angle
  int fnWeight,            // font weight
  DWORD fdwItalic,         // italic attribute flag
  DWORD fdwUnderline,      // underline attribute flag
  DWORD fdwStrikeOut,      // strikeout attribute flag
  DWORD fdwCharSet,        // character set identifier
  DWORD fdwOutputPrecision,  // output precision
  DWORD fdwClipPrecision,  // clipping precision
  DWORD fdwQuality,        // output quality
  DWORD fdwPitchAndFamily,  // pitch and family
  LPCTSTR lpszFace         // pointer to typeface name string
);

실제 사용은 아래와 같이 하면 됩니다.

HFONT hNewFont;   
hNewFont=CreateFont( 12,0,0,0,0,0,0,0,HANGEUL_CHARSET,3,2,1,       
                               VARIABLE_PITCH | FF_MODERN,"돋음");
m_hList.SendMessage( WM_SETFONT, (WPARAM)hNewFont, (LPARAM)TRUE);

m_hList는 리스트 컨트롤의 객체입니다.
만약 다른 컨트롤의 폰트를 바꾸고 싶다면 객체부분만 바꿔주면 됩니다.
2009. 9. 18. 09:03

TCP 헤더 분석

참고 : http://www.ktword.co.kr/abbr_view.php?mgid=125&m_temp1=347


TCP에 대한 자세한 내용은 위의 링크를 참조하면 된다.



1. TCP의 구조



TCP 프레임은 IP datagram에 캡슐화되어 저장되어 있다.

다른 프로토콜과 마찬가지로 헤더와 데이터부분으로 이루어져 있으며, 헤더의 길이는 옵션이 없을 경우 20바이트로 이루어져 있다.



2. 헤더 분석


    ㅇ Sourse/Destination Port number
    ㅇ Sequence Number (일련번호) 및 Acknowledgement Number (확인번호)
       - TCP에 의해 전송되는 데이터 세그먼트의 순서제어를 위해 사용됨
       - 32비트이므로 4기가 바이트 크기의 송신 데이터를 위해 일련번호를 붙일 수 있
         다. 예를들면, 일련번호 100에 100바이트를 전송하면 다음 패킷의 일련번호는
         200이 된다.
                      |      SEQ j (데이터 20)    |
                      |    -------------------->         |     
                      |           ACK j+20           |
                      |    <-------------------          |     
                      |           SEQ j+20           |
                      |    ------------------->          |          

    ㅇ Header length
       - 4 바이트 단위로 표시. 4 비트 길이. 따라서, TCP 헤더 길이는 총 60 바이트
         이하임
    ㅇ 6 개의 Flag bits     ☞ TCP 제어 플래그 참조
       - TCP 세그먼트 전달과 관련된 제어 기능을 함. TCP 회선 및 데이터 관리를 위해
         사용되는 제어용 플래그
    ㅇ window size
       - 흐름제어를 위해 사용하는 16 비트 필드 (65,535 bytes까지 가능)
       - TCP 흐름제어를 위해서  통신의 상대편에게 자신의 버퍼 크기를 지속적으로 통
         보하여주는 기능을 함. 수신측에 의해 능동적으로 흐름제어를 수행하게 됨.
    ㅇ Urgent pointer
       - TCP 세그먼트에 포함된 긴급 데이터의 마지막 바이트에 대한 일련번호
       - urgent pointer는 현재 일련번호(sequence number)로부터 긴급 데이터까지의
         바이트 오프셑(offset)을 말한다.
       - 해당 세그먼트의 일련번호에 urgent point 값을 더해 긴급 데이터의 끝을 알수
         있음



3. TCP 옵션


주요 옵션의 종류
   Type                              옵 션 내 용
   ----    -------------------------------------------------------------------
    0      End of Option          : 옵션 필드의 끝에 패딩(Padding)을 위해 사용 
    1      No Operatin            : 옵션 사이를 채우기 위함
    2      Maximum Segment Size (MSS)
            : 전송되는 TCP 데이터 세그먼트의 최대 길이, 이더넷은 1460
    3      Window Scale factor
    4      Selective Acknowledgment Permitted (Selective Reject)
            : 여러 패킷 중 손실된 패킷 만 선택적으로 재전송하기 위한 TCP 연결 설정
              시의 협상 옵션
    5      Selective Acknowledgment Data
    8      Timestamp
2009. 9. 16. 19:39

ether_header 구조체와 iphdr 구조체를 이용한 패킷 분석

이전 포스팅에서는 바이트별로 직접 골라냈었는데(-ㅅ-;) 이번엔 라이브러리에 있는 구조체를 활용해서 더 쉽게 패킷을 분석해보자.


ether_header 구조체

/usr/include/net/ethernet.h 에 위치한다. (gcc의 버전에 따라 다를 수 있다.)

/* 10Mb/s ethernet header */
struct ether_header
{
    u_int8_t  ether_dhost[ETH_ALEN];        /* destination eth addr */
    u_int8_t  ether_shost[ETH_ALEN];        /* source ether addr    */
    u_int16_t ether_type;                          /* packet type ID field */
} __attribute__ ((__packed__));



iphdr 구조체

/usr/include/netinet/ip.h 에 위치한다. (역시 gcc의 버전에 따라 다를 수 있다.)

   struct iphdr
      {
   #if __BYTE_ORDER == __LITTLE_ENDIAN
        unsigned int ihl:4;                             /* header length */
        unsigned int version:4;                       /* version */
   #elif __BYTE_ORDER == __BIG_ENDIAN
        unsigned int version:4;                       /* version */
        unsigned int ihl:4;                             /* header length */
   #else
   # error "Please fix <bits/endian.h>"
   #endif
        u_int8_t tos;                                     /* type of service */
        u_int16_t tot_len;                               /* total length */
        u_int16_t id;                                     /* identification */
        u_int16_t frag_off;                              /* fragment offset field */
        u_int8_t ttl;                                       /* time to live */
        u_int8_t protocol;                              /* protocol */
        u_int16_t check;                               /* checksum */
        u_int32_t saddr;                               /* source address */
        u_int32_t daddr;                               /* dest address */
        /*The options start here. */
      };


소스 코드



실행 화면


2009. 9. 16. 10:32

바이트별로 노가다 작업을 통한 패킷 분석-ㅅ-;

말그대로 제목과 같음

400바이트 이상의 패킷을 캡쳐했을때만 정보 표시 하도록 구현


실행화면


2009. 9. 15. 21:13

패킷 캡쳐로 살펴본 이더넷 프레임

이번 포스팅에서는 실제 패킷을 캡쳐하여 바이트 별로 분석을 해보자한다.

소스는 아래를 펼쳐보면 알 수 있다.

이전 포스팅에서 얘기했듯이 이더넷 프로토콜 타입에 대한 정보가 패킷내에 존재한다. 이것은 아래의 그림과 같은 모습의 구조를 띄고 있다.


위의 소스를 실제로 돌려봤을 때 다음과 같은 화면을 볼 수 있다. (리눅스에서 구동한 것이다.)


위의 프레임 구조에서 봤듯이 붉은 색으로 표시된 부분은 도착지의 MAC address이며, 파란색으로 표시된 부분은 출발지의 MAC address이다. 이를 ifconfig 명령어로 확인해보면 출발지의 값이 다음과 같이 동일하다는 것을 알 수 있다.


도착지 다음의 2바이트는 이더넷 타입을 나타내는 0x0800은 IP를 뜻한다.
(2009/09/15 - [소켓프로그래밍] - 이더넷 프레임의 구조 를 참조하자.)

그럼 IP 헤더에 대해 다시 알아보자.


< IP 헤더 >

1. IP 헤더 사이즈

- 헤더 사이즈는 만일 옵션 미지정시 20바이트이다.
- 즉, 최소 20 바이트란 말이며, 최대는 24바이트이다.
- IPv6의 경우는 40바이트가 최소이다.


2. IP 헤더 구성



이를 캡쳐한 화면과 비교해보자.



1. Version (4 bits)
- 0x0800 다음에 오는 4비트는 IP 버전을 뜻한다. 4 이므로 IPv4임을 알 수 있다.

2. Header Length (4 bits)
- 다음 4비트는 헤더의 길이를 뜻한다. 최소 5부터 15까지의 값을 가진다.
- 이 값을 왼쪽으로 비트 쉬프트를 2번 해준 값이 헤더의 길이가 된다.
- 위의 경우에는 5이므로 5<<2 의 값은 20 이므로 20이 된다.
- 헤더의 최대 값은 15<<2 즉, 60이 된다. 따라서 헤더의 크기 범위는 20~60.

3. Type of Service (ToS) Flag (8 bits)
- 요구되는 서비스 품질을 나타내나, 현재 대부분의 시스템에서는 이 필드를 무시한다.

4. Total Packet Length (16 bits)
- IP 패킷 전체의 길이를 바이트의 수로 나타낸다. 최대 값은 0xFFFF = 65535.
- 위의 그림에서는 0x004C = 76 bytes.

5. Fragment Identifier (16 bits)
- 각 조각이 동일한 데이터그램에 속하면 같은 일련번호를 공유한다.

6. Fragmentation Flag (3 bits) : 분열의 특성을 나타내는 플래그
- 첫번 째 bit : 미사용 (항상 0)
- 두번 째 bit : DF bit, Don't Fragment
                    분열(조각) 0, 미분열 1
                    1로 셋팅되면 목적지 컴퓨터가 조각들을 다시 모을 능력이 없기 때문에
                    라우터로 하여금 데이터그램을 단편화하지 말라는 뜻이다.
                    0으로 셋팅되면 라우터에서 분열(조각, 단편)이 가능함을 뜻한다.
- 세번 째 bit : MF bit, More Fragment
                    현재의 조각이 마지막이면 0, 더 많은 조각이 뒤에 계속 있으면 1
- 위의 그림에서는 0x4 = 0100(2) 에서 상위 3비트 이므로 010이다.
- 첫번 째 비트는 위에서 설명한바와 같이 0이고, 두번째는 1이므로 미분열이란 뜻이고,
   세번 째는 0이므로 뒤에는 더이상의 조각이 없다는 뜻이다..

7. Fragmentation offset (13 bits)
- 조각나기 전 원래의 데이터그램의 8 바이트 단위의 위치
- 위의 경우에서는 0x40 = 0100 0000(2) 에서 6번에 얘기한 상위 3비트 뒤에 오는 5비트와 그 이후의 8비트 0x00 이므로, 0 이다. (조각나지 않은 데이터 이므로 0)
※ 위 3개의 필드 (Fragment Identifier,Fragmentation Flag,Fragmentation Offset)(5, 6, 7)는 조각(분열)과 
재배열과 관련된 필드이다. 각 조각들은 최종 목적지 시스템에 전달되기 전에는 재배열되지 않고, 최종 목적지에
전달되면  목적지 시스템의 IP 소프트웨어가 원래의 데이터그램으로 재배열한다.

8. TTL, Time To Live (8 bits) - IP 패킷의 수명 - 즉, 네트워크 상에서 패킷이 남아있을 시간이다. 점점 감소하게 된다. - 위의 그림에서는 0x40 이므로 64이다.
9. Protocol Identifier (8 bits) - 어느 상위 계층 프로토콜이 데이터 내에 포함되었는가를 나타낸다. - 프로토콜의 번호들은 다음의 사이트에서 확인할 수 있다. http://www.iana.org/assignments/protocol-numbers/ - 위의 경우는 0x06 이므로,
TCP 프로토콜이란 것을 알 수 있다.

10. 헤더 검사합 checksum (16 bits) - 헤더에 대한 오류 검사를 위한 비트이다. - 위의 그림에서는 0x4540 이다.

11. source IP Address (32 bits) - 송신처 주소

12. Destination IP Address (32 bits) - 수신처 주소

13. IP 헤더 옵션 (선택옵션, 가변 길이 bits)

14. Padding (필요한 경우에만 사용, 가변 길이 bits)
2009. 9. 15. 20:05

이더넷 프레임의 구조

자료 출처 : http://www.ktword.co.kr/abbr_view.php?mgid=014&m_temp1=2965


1. 개요

Ethernet Protocol Type 이란 이더넷 패킷내의 데이터부분에서 캡슐화된 데이터가 어느 프로토콜에 해당하는지를 나타내고자,  13~14번째 바이트에 이를 표시하는 영역을 말한다.


2. 이더넷 프레임의 통상적인 형식 : IEEE 802.3 또는 DIX 2.0


- Preamble(10101...) 및 SFD(10101011) : 10101......10101011
- D A : Destination Address, S A : Source Address    ☞  MAC 주소
- Len/Type : 0x 600 이상이면 Type (DIX 2.0), 이하이면 Length (802.3) 로 해석
         . Length : 길이(3~1500 바이트)를 나타냄           ☞  MTU
         . Type   : Data에 담겨있는 상위 프로토콜          ☞  Ethertype


 - Type의 대표적인 값들 (0x600 이상의 값 만이 가능함)

     0600h                Xerox XNS IDP
    0800h            IP
     0805                  X.25
     0806h                ARP
     0835h                RARP
     6003h                DEC DECnet Phase Ⅳ
     8137h                Novell Netware IPX
     8191h                NetBIOS
     8847h                MPLS 
     8863h                PPPoE Discovery Stage
     8864h                PPPoE PPP Session Stage


4. 각 프레임의 형태



5. 참고사항

   ㅇ 위 프레임들 간의 주요한 차이는,
      MAC 부계층 바로 상위계층인 LLC 부계층 관련 부분(3 바이트)의 포함 여부에 있
      다.  (DIX Ethernet frame : 미포함, IEEE 802.3 frame : 포함)

  ㅇ 각 바이트별 비트들의 송신 순서
     - 이더넷 프레임의 각 바이트의 비트들은 FCS를 제외하고, 모두 LSB 부터 송신된다.
2009. 9. 9. 09:47

[ARM] 톨러런트

톨러런트란?



ARM은 3.3V로 구동되지만 5V까지의 입력을 받아도 견딜 수 있게 되어 있다.

즉, ARM은 3.3V나 5V의 입력을 받아 3.3V로 구동된다.

이런 방식을 톨러런트라고 한다.
2009. 9. 7. 11:30

소스 인사이트 include 파일 싱크 시키기와 ATmega128 용 프로젝트 생성하기

먼저 새 프로젝트를 생성합니다.



상단의 입력 폼에는 프로젝트의 이름을 적습니다.
하단에는 include 할 헤더 파일들을 어디서 가져올 것인지를 정하는 것인데, browse를 클릭합시다.


win avr 이 설치된 디렉터리로 가서 avr/include 디렉토리를 선택해 줍니다. (만약, 다른 컴파일러용 프로젝트를 생성한다면 해당 컴파일러의 include 디렉토리를 선택해주면 됩니다.)

그러면, 새 프로젝트 설정창이 나옵니다.


프로젝트에 사용될 소스 파일이 있는 디렉토리를 선택해 줍니다.

그러면 다음과 같은 화면이 나오고, 이제 프로젝트에 참조할 include 파일들을 실제로 추가 시켜주는 작업이 남았습니다.


include 디렉토리를 선택하고 Add All을 선택합니다.


위와 같은 화면이 나오는데 첫번째 것을 선택하면 하위 디렉토리의 파일도 같이 포함시킨다는 것이고, 그 아래 것은 하위의 모든 하위까지 포함시킨다는 것인데, 이것을 선택하면 다른 칩들의 헤더파일까지 모두 포함시켜버리므로 두개의 체크를 풀어줍시다.



이제 하위 디렉토리를 포함시켜 줘야 하는데 Compat과 Util 디렉토리는 칩과는 상관없이 공통으로 필요한 헤더들이므로 모두 포함시켜 줍시다.



Avr 디렉토리에서는 위쪽의 Io1200.h 앞의 파일까지와 아래쪽 Iox64a3.h 아래쪽 파일들 역시 칩과 관계없이 공통으로 필요한 헤더들이므로 더블 클릭이나 Add 버튼으로 포함시켜 줍니다.


이제 사용하는 칩의 헤더파일을 포함시켜주면 끝입니다. ATmega128용 프로그램을 작성한다면, Iom128.h를 포함시켜주고 Close를 클릭합니다.

이제 프로젝트에 포함된 헤더파일들을 실제 소스에서 참조 할 수 있도록 동기화를 시켜 주어야 합니다.

Project - Synchronize Files 를 선택해 줍니다.



첫번째 것을 체크하게 되면 좀전에 디렉토리에는 있지만 포함시키지 않은 파일들이 다시 포함되어버립니다. 따라서 체크를 해제 해주고 두번째 것만 채크해 주면 동기화를 시작하고 프로젝트를 시작할 준비가 모두 끝납니다.


이제 소스에서 매크로 함수나 define 값등을 ctrl 을 누른 상태로 클릭하게 되면 해당 헤더 파일로 링크를 시켜줍니다. 다만 이것은 소스 인사이트 내에서 보여주는 것일 뿐이고 실제로 컴파일 할때는 소스에서 직접 include를 시켜줘야 참조하게 됩니다.
2009. 9. 4. 14:15

8월 25일판 가을시즌 각종 드라마 시작날짜

출처는 디시 인사이드 기타미드갤(기미갤) 입니다.


드디어 미드의 시즌이 왔습니다. 자신이 좋아하는 미드를 잘 체크해서 즐겁게 봅시다.
(굵게 체크된건 개인적으로 보는 미드들=ㅅ=)

=======================================================================================================

FALL PREMIERE DATES 
Note: We're only including the shows that premiere after Sept. 1, 
which we consider the beginning of fall. Late summer shows like Mad 
Men and Project Runway appeared on our summer premiere dates calendar, 
published in May. 

Monday, Sept. 7
Durham County (ION)

Tuesday, Sept. 8 
90210, 8 p.m. (CW) 
Melrose Place, 9 p.m. (CW) 
Sons of Anarchy, 10 p.m. (FX) 

Wednesday, Sept. 9 
America's Next Top Model, 8 p.m. (CW) 
Glee, 9 p.m. (Fox) 
So You Think You Can Dance, 8 p.m. (Fox) 

Thursday, Sept. 10 
Supernatural, 9 p.m. (CW) 
The Vampire Diaries, 8 p.m. (CW) 

Friday, Sept. 11 
Are You Smarter Than a 5th Grader?, 8 p.m. (Fox) 

Saturday, Sept. 12 
America's Most Wanted, 9 p.m. (Fox) 
Cops, 8 p.m. (Fox) 

Monday, Sept. 14 
Gossip Girl, 9 p.m. (CW) 
The Jay Leno Show, 10 p.m. (NBC) 
Lincoln Heights, 8 p.m. (ABC Family)
One Tree Hill, 8 p.m. (CW) 

Tuesday, Sept. 15 
The Biggest Loser, 8 p.m. (NBC) 

Wednesday, Sept. 16 
The Beautiful Life, 9 p.m. (CW) 

Thursday, Sept. 17 
Bones, 8 p.m. (Fox) 
Community, 9:30 p.m. (NBC) 
Fringe, 9 p.m. (Fox) 
It's Always Sunny in Philadelphia, 10 p.m. (FX) 
The Office, 9 p.m. (NBC) 
Parks and Recreation, 8:30 p.m. (NBC) 
Saturday Night Live: Weekend Update Thursday, 8 p.m. (NBC) 
Survivor: Samoa, 8 p.m. (CBS) 

Friday, Sept. 18
Crash 10 p.m. (Starz)

Suday, Sept. 20
Bored To Death 9:30 p.m. (HBO)
Curb Your Enthusiasm 9 p.m. (HBO)

Monday, Sept. 21 
Accidentally on Purpose, 8:30 p.m. (CBS) 
The Big Bang Theory, 9:30 p.m. (CBS) 
Castle, 10 p.m. (ABC) 
CSI: Miami, 10 p.m. (CBS) 
Dancing With the Stars, 8 p.m. (ABC) 
Heroes, 8 p.m. (NBC) 
House, 8 p.m. (Fox) 
How I Met Your Mother, 8 p.m. (CBS) 
Two and a Half Men, 9 p.m. (CBS) 

Tuesday, Sept. 22 
The Forgotten, 10 p.m. (ABC) 
The Good Wife, 10 p.m. (CBS) 
NCIS, 8 p.m. (CBS) 
NCIS: Los Angeles, 9 p.m. (CBS) 

Wednesday, Sept. 23 
Cougar Town, 9:30 p.m. (ABC) 
Criminal Minds, 9 p.m. (CBS) 
CSI: NY, 10 p.m. (CBS) 
Eastwick, 10 p.m. (ABC) 
Gary Unmarried, 8:30 p.m. (CBS) 
Law & Order: Special Victims Unit, 9 p.m. (NBC) 
Mercy, 8 p.m. (NBC)
Modern Family, 9 p.m. (ABC) 
The New adventures of Old Christine, 8 p.m. (CBS) 

Thursday, Sept. 24 
CSI: Crime Scene Investigation, 9 p.m. (CBS) 
Flash Forward, 8 p.m. (ABC) 
Grey's Anatomy, 9 p.m. (ABC) 
The Mentalist, 10 p.m. (CBS) 

Friday, Sept. 25 
Brothers, 8 p.m. (Fox) 
Dollhouse, 9 p.m. (Fox) 
Ghost Whisperer, 8 p.m. (CBS) 
Law & Order, 8 p.m. (NBC) 
Medium, 9 p.m. (CBS) 
Numb3rs, 10 p.m. (CBS) 
Smallville, 8 p.m. (CW) 
Southland, 9 p.m. (NBC) 

Saturday, Sept. 26 
Saturday Night Live, 11:30 p.m. (NBC) 

Sunday, Sept. 27 
60 Minutes, 7 p.m. (CBS) 
The Amazing Race, 8 p.m. (CBS) 
American Dad, 9:30 p.m. (Fox) 
Brothers & Sisters, 10 p.m. (ABC) 
Californication, 10 p.m. (Showtime) 
The Cleveland Show, 8:30  p.m. (Fox) 
Cold Case, 10 p.m. (CBS) 
Desperate Housewives, 9 p.m. (ABC) 
Dexter, 9 p.m. (Showtime) 
Extreme Makeover: Home Edition, 7 p.m. (ABC) 
Family Guy, 9 p.m. (Fox) 
The Simpsons, 8 p.m. (Fox) 

Monday, Sept. 28 
Lie to Me, 9 p.m. (Fox) 
Trauma, 9 p.m. (NBC) 

Tuesday, Sept. 29 
The City, 10:30 p.m. (MTV)
Dancing With the Stars, 9 p.m. (ABC) 
Hell's Kitchen, 8 p.m. (Fox) 
The Hills, 10 p.m. (MTV)
Shark Tank, 8 p.m. (ABC) 

Wednesday, Sept. 30 
Hank, 8 p.m. (ABC) 
The Middle, 8:30 pm. (ABC) 

Thursday, Oct. 1 
Private Practice, 10 p.m. (ABC) 

Friday, Oct. 2 
'Til Death, 8:30 p.m. (Fox) 
Stargate Universe, 9 p.m. (Syfy) 
Star Wars: The Clone Wars 8 p.m. (Cartoon Network)


Sunday, Oct. 4 
America's Funniest Home Videos, 7 p.m (ABC) 
Three Rivers, 9 p.m. (CBS) 

Monday, Oct. 5
Sheri, 10 p.m. (Lifetime) 
Rita Rocks, 10:30 p.m. (Lifetime) 

Tuesday, Oct. 6 
Scare Tactics, 9 p.m. (Syfy) 

Wednesday, Oct. 7
Secret Girlfriend 10:30 p.m. (Comedy Central)
South Park 10 p.m. (Comedy Central)

Thursday, Oct. 8
TOSH.0 10 p.m. (Comedy Central)

Friday, Oct. 9 
Sanctuary, 10 p.m. (Syfy) 
Ugly Betty, 8 p.m. (ABC) 

Wednesday, Oct. 14
Nip/Tuck, 10 p.m. (FX)

Thursday, Oct. 15 
30 Rock, 9:30 p.m. (NBC) 

Friday, Oct. 16 
Supernanny, 8 p.m. (ABC) 

Thurday, Oct. 22
Jeff Dunham Show. 10:30 p.m. (Comedy Central)

Friday, Oct. 23
White Collar 10 p.m.(USA)

Wednesday, Oct. 28
Friday Night Lights 9 p.m. (DirecTV)

Tuesday, Nov, 3
V 10 p.m.(ABC)

Saturday, Nov. 7 
Legend of the Seeker (syndication) 
The Wanda Sykes Show, 11 p.m. (Fox)
=======================================================================================================

'미드' 카테고리의 다른 글

아쉬운 종영 - 라이프 시즌2 21화(Life.S02E21)  (0) 2009.05.01
멘탈리스트 정주행 시작  (0) 2009.04.30
2009. 9. 2. 15:26

[ATmega128 & Zigbee] SPI 초기화

SPI는 Serial Peripheral Interface의 약자로 시리얼 방식의 주변장치를 위한 인터페이스로 모토로라에서 제창된 통신 방식이다. 단순하고 범용적이기 때문에 많이 사용되고 있다.

SPI는 기본적으로 세가닥의 선이 필요하고(Clock, Data in, Data out), Chip select까지 있다면 4선이 필요로 한다.
칩의 개수만큼 Chip select 선이 필요하므로 칩의 개수가 적을 때 유용하며, TWI보다 구성이 훨씬 간단하여 TWI보다 무려 20배의 속도를 낼 수 있다고 한다.

atmega128에서 spi 통신을 시작하기전 관련 레지스터를 초기화 함수를 구현하였다.