:::: MENU ::::

SD 카드 관련 스펙 자료


http://www.sdcard.org/developers/tech/sdcard/pls/simplified_specs/

























Simplified Specifications + File Size Release Date
Part 1 Physical Layer Simplified Specification Ver3.01 + 1155KB May 18, 2010
Part A1 ASSD Extension Simplified Specification Ver2.00 + 241KB May 18, 2010
Part A2 SD Host Controller Simplified Specification Ver2.00 + 598KB Feb. 8, 2007
Part E1 SDIO Simplified Specification Ver2.00 + 433KB Feb. 8, 2007
Part E2 SDIO Bluetooth Type-A Simplified V1.00 + 248KB Apr. 3, 2006




Nuvoton의 Cortex M0 칩

제가 알기로는 현시점(2011년 1월)에서 Cortex M0 코어 칩은 NXPLPC11xxx 시리즈NuvotonNuMicro M051™ 시리즈가 유일 합니다.
Nuvoton은 대만에 본사가 있는데 Winbond로 부터 분사한 회사 같군요.
칩들은 메모리와 페리페럴별로 다양한 라인업이 준비가 되어 있으며, 온라인상에서 제품을 선택을 할수 있는 
On-line Products Slection Guide도 잘 준비가 되어 있네요.


칩의 성능이나 편이성등은 실제로 써봐야 알겠지만 ST나 NXP등의 업체에서 제공하는 자료들을 거의 모두 다 갖추었네요.
특이한 것은 개발툴 지원에 KEIL, IAR 말고
CooCox라는 Free & Open Cortex M3, Cortex M0 개발 환경도 지원하네요.


[IO 포트] push-pull, open drain

아래 자료는 irmus 님의 자료입니다. ^^;

MCU나 74 시리즈 로직 칩들을 보다 보면 출력 타입이 여러가지가 있는 것을 볼 수 있다. 가장 기본적이면서 또 그만큼 많이 사용되는 두가지 출력 타입에 대해 이야기 해보려 한다. push-pull 타입과 open drain(혹은 open collector) 타입이 그것이다.

Drain은 MOSFET의 Drain 핀을 의미한다. Collector는 BJT의 Collector이다. Open drain과 open collector는 동일한 동작 원리를 가지는 구성을 MOSFET로 만들었느냐 BJT로 만들었느냐의 차이일 뿐이다. 반면 push-pull 출력은 BJT나 MOSFET나 모두 같은 이름을 사용한다.







BJT 회로


CMOS 회로


위 그림이 push-pull 출력단을 간단하게 그려본 것이다.
push-pull 출력 포트는 2개의 TR로 구성된다. 아래쪽의 NPN TR(N-MOS)이 pull을 담당하고, 위쪽의 PNP TR(P-MOS)이 push를 담당한다. 단어의 의미를 생각해 보면 쉽게 이해할 수 있다. NPN TR은 GND쪽으로 끌어 당기는 역할을 하고, PNP TR은 VCC쪽으로 밀어 올리는 역할을 한다.

로직 회로에서는 TR을 switch로 사용한다는 것을 생각해 보면 쉽게 이해할 수 있다.

사용자 삽입 이미지

스위치로 치환해보자!

두개의 스위치 중 아래쪽 스위치를 ON 시키면 output port는 GND와 바로 연결된다. 즉, Output port를 GND쪽으로 끌어내린 것으로 0V가 출력된다. 반면 위쪽 스위치를 ON 시키면 VCC와 연결되어 high가 출력된다. VCC쪽으로 밀어 올린 것이다.

Push-pull 출력단은 그 자체로 동작한다. 이게 무슨 말이냐 하면… Output port에 아무것도 연결되어 있지 않더라도 output port의 전압이 의도한 바 대로 움직인다는 뜻이다. Low를 출력할 때엔 0V가 출력되고, high를 출력하면 VCC혹은 VDD가 출력된다. Output port에 아무것도 연결하지 말고 멀티메터나 오실로스코프로 관찰해 보면 출력 전압이 움직이는 것을 볼 수 있다.
Open collector 혹은 open drain은 이와 다르다.






사용자 삽입 이미지

Open Collector

사용자 삽입 이미지

Open Drain

이름 그대로 collector 혹은 drain 핀이 외부로 노출(open)되어 있다. Push-pull 출력단과 달리 밀어올려주는(PUSH) 위쪽 절반이 없다. 더군다나 VCC나 VDD와도 전혀 연결되어 있지 않다. 반쪽짜리 미완성 회로인 것이다.
다시 스위치 모델을 생각하면서 생각해 보자. NPN TR이나 N-MOS가 ON 되었을 경우에는 Output port가 GND로 당겨지므로 0V 출력이 나가게 된다. 이 반쪽은 잘 동작한다(엄밀히 따지면 또 그렇지도 않지만 설명을 위해^^). 반면 NPN TR이나 N-MOS가 OFF되었을 경우 Output port는 그냥 무주공산으로 떠버리게 된다. 소위 Unknown state가 된다. 0V도 아니고 VCC나 VDD도 아닌 상태.

Open drain 출력단은 말 그대로 미완성 회로다. 이 상태 만으로는 제대로 동작하지 않는다. 외부에 부가 회로가 필요하다. 그러면 왜 이렇게 사용하는 것일까? 그것은 바로 입맛에 맞게 알아서 꾸며 쓰기 위해서이다.
Open drain 출력단이 필요한 경우는 여러가지가 있다. 대표적인 예로 level converter(level shifer), bus 구성 등이 있다.

Level converter로 사용하는 예를 살펴보자

사용자 삽입 이미지

VDD != V_EXT

위 그림에서 open drain 출력의 Output Port를 오른쪽에 있는 다른 장치의 입력 포트에 연결하려고 한다. 간단하게 왼쪽의 큰 상자를 MCU라 생각하고 오른쪽의 작은 상자를 센서 칩이라 생각해 보자. MCU가 사용하는 VDD는 3.3V이다. 센서 칩이 사용하는 전원(V_EXT)는 5V다. 이처럼 칩들이 사용하는 전원 전압이 다른 경우 바로 연결하면 문제가 발생할 수 있다. 이를 해결하는 한가지 수단으로 open drain 혹은 open collector가 사용될 수 있다. 위 회로처럼 외부에 풀업 저항(pull-up resisitor)을 하나 달아주게 되면 level shifter가 구성된다.
MCU 내부의 N-MOS 스위치가 ON되었을 경우 Output Port는 0V로 당겨지므로(PULL) low 출력이 나가게 된다. 이 경우는 push-pull 출력단과 동일하다. 반면 N-MOS 스위치가 OFF 되었을 경우 Output port가 unknown 상태가 되는 대신 외부 풀업저항에 의해 V_EXT로 묶여 올라가게 되는 것이다. 이것을 소극적인 push라고 생각하면 여러가지로 도움이 된다. 반면 push-pull 출력단의 위쪽 스위치는 적극적인 push인 샘이다.
level shifter를 구성할 때 사용하는 풀업저항의 크기는 회로 성격(TTL회로냐 CMOS회로냐)과 전원 전압에 따라 달라진다. 전류의 크기와 소비 전력을 고려해서 구해야 한다.

Level shifter를 이처럼 간단하게 구성할 수도 있지만 실상은 조금 복잡하다. TTL 로직과 달리 CMOS 로직은 정전기에 약하다. 때문에 정전기 보호 회로가 IO 핀마다 달려있는데, 가장 기본적인 정전기 보호 회로는 아래 그림과 같이 다이오드로 구성된다.

사용자 삽입 이미지

다이오드로 구성된 ESD

위 그림 처럼 2개의 다이오드가 출력핀 바로 안쪽에 위치해서 GND와 VDD 범위를 넘어서는 전하(extra charge)는 다이오드를 통해 방출(discharge)시켜 버리는 것이다. 정전기는 전압은 높지만 전하(전기 에너지)는 작기 때문에 이처럼 그냥 다이오드로 방출시켜버리면 내부 회로를 보호할 수 있다.
ESD(Electro-Static Discharge) 회로가 level shifter에 미치는 영향은 VDD가 V_EXT보다 낮을 때 나타난다. 위에서 살펴본 예 처럼 V_EXT가 높으면 N-MOS가 OFF되어 R에 의해 소극적으로 push 되더라도 Output Port의 전압은 VDD를 넘어설 수 없다. 넘어선 전압만큼 다이오드를 통해 방출되어 버리기 때문이다. 더군다나 이렇게 방출되는 (V_EXT – VDD)만큼의 전기 에너지는 정전기 보호를 위해 설계된 다이오드의 용량을 초과하기 때문에 ESD 보호용 다이오드를 파괴시켜 버린다. MCU의 datasheet를 보다 보면 Absolute Rating 항목을 발견할 수 있고 여기에 IO 핀들에 인가될 수 있는 최대 전압이 명시되어 있다. 보통은 VDD+0.3V를 최대 전압으로 잡는다. ESD 보호용 다이오드의 forward voltage인 0.3V를 넘어서는 전압이 인가되면 다이오드를 통해 그 에너지가 흘러가게되고 결국 다이오드가 파괴된다. 운 좋으면 해당 핀만 못쓰게 되고, 운나쁘면 그냥 전체가 다 먹통이  된다.
정리하면 level shifter 목적으로 open drain 출력단을 사용하려면 ESD 보호 다이오드가 없는 칩을 사용하지 않는 이상 높은전압->낮은전압 변환만 사용해야만 한다는 것이다. 물론 CMOS 로직 칩에 ESD 보호 회로가 안달린 경우는 현실세계엔 없다 ^^; (있기는 하다. 학부다닐때 학교내에 있는 FAB에서 실험용으로 만든 CMOS 칩이 있었고, ESD가 안달려 있었다. 그래서 그 칩을 다루려면 손목에 접지밴드 두르고 작업해야만 했다. 그럼에도 불구하고 숱하게 날려먹었다. 그만큼 CMOS는 정전기에 약하다.)

Open drain을 사용하는 두번째 예로 bus 구성을 살펴보자. bus 구성이라 함은 다수의 칩이 모두 output으로 포트를 공유하는 경우를 말한다. 앞서 올렸었던 2010/07/12 – myGyro300SPI 3개 연결하기 포스팅을 보면 3개의 myGyro300SPI를 SPI 버스에 무작정 연결시켜 놓고 사용한다. SPI 버스를 구성하는 CLK, MOSI, CS는 master인 MCU에서 output하고 myGyro300SPI는 input으로 쓰이기 때문에 문제될 것이 없다. 반면 MISO 핀은 좀 다르다. myGyro300SPI가 모두 MISO 핀을 output으로 사용하고 있다. 이 경우가 왜 문제가 되는지는 좀만 생각해 보면 간단하다. 만약 myGyro300SPI의 MISO(DOUT)핀이 push-pull 출력단이라면 각 핀들이 0V 혹은 VDD_IO를 적극적으로 출력한다. 즉 어떤 녀석은 0V를 출력할 수도 있고 어떤 녀석은 3.3V를 출력할 수도 있다는 뜻이다. 이렇게 적극적으로 push/pull 하는 output port들이 서로 쫑나게 되면 회로가 타버리게 된다. 그래서 소극적으로 push하는 open-drain 출력단이 쓰인다. Open-drain 출력단에서 HIGH 출력을 내보내고 있을 때, 즉 N-MOS가 OFF되어 있을 때에는 unknown 상태로 된다. 우리말로는 의지박약 상태로 번역하고 싶다. 이 상태에는 아무도 안 건드리면 VDD_IO를 가질 수 있지만 옆에서 누가 “나 0V 할거야” 라고 강하게 주장(pull)하면 그쪽으로 군소리 없이 따라가게 된다. A형 혈액형이다.

이처럼 다수의 output port를 서로 묶어서 버스로 구성할 때에는 open drain 출력단이 필요하다. 여기서 잠깐 의혹이 하나 생긴다. 2010/07/12 – myGyro300SPI 3개 연결하기 글의 회로도를 보면 어디에도 풀업저항이 안보인다. Open drain은 반쪽짜리 미완성이므로 풀업저항이 꼭 필요하다고 설명했는데 왜이런걸까? 해답은 ADIS16100의 DOUT 핀 내부에 풀업저항이 내장되어 있기 때문이다. 데이터쉬트상에 따로 명기되어 있지는 않지만 풀업 저항이 내장되어 있다고 생각할 수 있다. 그걸 어떻게 아느냐고한다면… 몇가지 실험을 통해서 유추한것 뿐이다 ^^

또다른 예로 I2C 버스를 생각해 봐도 된다. I2C는 완전한 open drain 출력단으로 풀업 저항을 외부에 꼭 달아줘야만 한다. I2C는 버스 구성 뿐만 아니라 bi-directional 포트이기에 풀업저항을 내장할 수가 없고 스팩에도 그렇게 정해져 있다.

지금까지 push-pull과 open collector, open drain 출력단에 대해 살펴봤다. TTL로직과 CMOS 로직의 차이도 아주 쪼금 다루긴 했지만 많이 부족한 내용이다. 특히 TTL 로직의 경우 fan-in과 fan-out까지 고려해야 한다. open collector의 풀업저항 계산할 때 fan-in이 중요하다. 
칩설계를 전공한 것도 아니고 십년도 훨씬 지난 학부시절 전자회로 수업들은 지식으로 떠들다 보니 말만 장황하고 부족한 내용도 많은 글이 됐다. 어디까지나 초보 입문용으로 작성된 글이며, 설명된 내용들 외에도 중요한 포인트 들이 많이 있다는 것을 염두에 두도록 하자.


Cortex M0 비교 자료

1. 8051과 비교 자료
즉 같은 성능을 내려면 8051의 경우 80Mhz가 필요함

2. Cortex M3와 비교 자료

3. ARM7 & Cortex M0 & Cortex M3

정리하면
The smallest, lowest power ARM processor ever
  : Extending the ARM roadmap to low-cost MCU and mixed-signal
Transcending classifications
  : Easy to use 32-bit processor in an 8/16-bit footprint
Streamlined entry-point to the ARM architecture
  : Binary and tools upwards compatible with ARM Cortex


Migrating from version 4.x to version 5.x

EWARM 4.x => 5.0으로 갈아 타기위한 가이드 문서입니다.

cfile27.uf.173906564D425352191FFC.pdf

소스를 그룹별로 정리를 해서 프로젝트를 만들었는데,
-. CMSIS – ARM의 CMSIS 관련 소스
-. EWARMv5.4 – CMSIS에서 지원하는 device 중 ST 라이브러리 소스
   사용하는 디바이스에 맞는 소스를 넣어준다.

– startup_stm32f10x_ld_vl.s:    for STM32 Low density Value line devices
– startup_stm32f10x_ld.s:        for STM32 Low density devices
– startup_stm32f10x_md_vl.s:  for STM32 Medium density Value line devices
– startup_stm32f10x_md.s:      for STM32 Medium density devices
– startup_stm32f10x_hd_vl.s:   for STM32 High density Value line devices
– startup_stm32f10x_hd.s:       for STM32 High density devices
– startup_stm32f10x_xl.s:        for STM32 XL density devices

– startup_stm32f10x_cl.s:        for STM32 Connectivity line devices


-. StdPeriph_Driver –  ST에서 제공하는 페리페럴 드라이버 소스, 사용하는 드라이버 만 올리면 된다.
-. USER – 이건 사용자 소스



Wi-Fi Provisioning

Provisioning의 의미는 위키피디어에 정의되어 있는 내용을 살펴보면 다음과 같다.

In telecommunication, provisioning is the process of preparing and equipping a network to allow it to provide (new) services to its users. In NS/EP telecommunications services, “provisioning” equates to “initiation” and includes altering the state of an existing priority service or capability.

핵심적인 얘기는 the process of preparing and equipping a network…

즉 통신(네트워크)에서 사용자에게 네트워킹을 가능하게 해주는 절차 및 방법 이라고 이해하면 될 듯…

이것이 일반적인 유선이라면 별 무리가 없지만 무선의 경우는 얘기가 좀 달라진다.
왜냐면 일단 무선의 경우 선이 없으니 문제가 생기면 더 복잡하며, 사용자에게 가장 편리한 방법을 제공하는 것이 키포인트이다.
특히 사용자 시스템이 유저인터페이스가 없는 경우 즉 LCD나 키패드 같은 것이 없는 임베디스 시스템의 경우 더욱더 중요하다.

참고로 아래 내용은 임베디드 WiFi 솔루션을 제공하는 Gainspan의 자료임.



Wi-Fi client가 네트워크에 연결이 되려면 무조건 AP에 접속이 되야 하는데, 여러가지 방법이 있다.
GainSpan에서는 다음과 같이 3가지 방법을 소개하고 있다.

1. WPS(Wi-Fi Protected Setup)
  AP가 WPS를 지원을 할 경우 가능한 방법이며, WPS를 이용해 AP에 무선으로 연결이 되고, DHCP를 통해 IP를 받는다.

2. Ad hoc browser
   우선 Ad hoc을 통해 노트북과 연결이 되고, Wi-Fi client에서 동작하고 있는 웹서버에 접속해서 네트워크 설정을 한다.
   이 설정대로 AP에 접속이 된다.

3. Ad hoc custom APP
   Ad hoc browser와 내용이 동일한데, 노트북을 이용해 접속하는 것이 아니고 스마트폰에서 앱을 작성해서 Wi-Fi client에 접속을 하는 것만 다르다.



CMSIS-Cortex Microcontroller Software Interface Standard


CMSIS – Cortex Microcontroller Software Interface Standard


CMSIS - Cortex Microcontroller Software Interface Standard Image

최근 많은 칩 벤더들이 CortexM 시리즈의 칩들을 내놓고 있습니다. 코아는 같지만 다양한 메모리 옵션과 페리페럴들로 특화된 칩들이 나오고 있죠. 다양한 칩들이 나오다보니 ARM에서 CMSIS라는 CortexM 시리즈칩들의 하드웨어를 억세스하기위한 S/W 인터페이스를 만들었네요. 이것은 벤더에 무관하게 하드웨어를 추상화 시킨 레이어 입니다. 칩 벤더들이 좀 더 쉽게 자신들의 페리페럴 인터페이스 코드를 만들 수 있겠군요. CMSIS는 약 1K정도의 코드 메모리와 10바이트 미만의 램을 필요로 하답니다.10 Bytes RAM).

ARM에서 아래 보이는 칩 벤더 및 툴 벤더와 작업을 했다는데, ABC순서군요. ^^

AtmelCode RedEnergy MicroFreescale  HitexIAR  Keil  Micrium NXP Segger STMicroelectronics Texas InstrumentsToshiba

ARM에서는 이 CMSIS를 Ethernet, SD/MMC, 디버그 인터페이스 같은 미들웨어 레이어까지 확장할 계획이라고 하니 S/W 개발자 측면에서는 점점더 개발이 쉬워지는 느낌은 있으나, 기술의 겉만 보고 핵심은 파악하지 못하는 개발자가 많이 생길 것 같은 우려도 동시에 되는 군요.