우수신기술지정지원사업· 최종보고서 - ITFIND · 최종보고서...

209
수신기술 지정 지사업 · 최종보서 휴대정보통신기기용 반도체 스토리지 기술 SoC 개발기 : 주 퍼스터 ( ) 정보통신부

Transcript of 우수신기술지정지원사업· 최종보고서 - ITFIND · 최종보고서...

우수신기술 지정 지원사업·

최 종 보 고 서

휴대정보통신기기용 반도체 스토리지 기술SoC

개발기관 : 주 퍼스터( )

정 보 통 신 부

우수신기술 지정 지원사업·

최 종 보 고 서

휴대정보통신기기용 반도체 스토리지 기술SoC

개발기관 : 주 퍼스터( )

정 보 통 신 부

제 출 문

정보통신부 장관 귀하

본 보고서를 우수신기술 지정 지원사업·

휴대정보통신기기용 반도체 스토리지 기술 과제의 최종보고서로 제출합니SoC

다.

년 월 일2006 11 10

개 발 기 관 주 퍼스터: ( )

개발 책임자 최용석:

참여 연구원 김철승 윤보열 김효신 서영철 외 명: , , , 3

요 약 문

제 목1.

우수신기술 지정 지원사업 휴대정보통신기기용 반도체 스토리지 기술 과제· SoC

연구개발의 목적 및 중요성2.

가 연구개발의 목적.

기술 개발의 목적(1)

형 플래시 메모리는 디지털 카메라 휴대폰 등에 채용되어NAND , MP3, DRAM

처럼 대중화된 메모리 반도체이다 그러나 데이터 기록 속도가 범용하드디스크.

나 만큼 빠르지 않아 그 사용 용도가 제한되어 왔다 본 개발 기술은 이, DRAM .

러한 형 플래시 메모리의 약점을 극복하고 그 강점인 충격 진동에 강한NAND ,

스토리지 를 개발하여 인치 이하의 시장을 대체하는 것에 그 목적SoC 1.0 HDD

이 있다.

인치 이하의 시장을 대체하기 위해서는 가격 경쟁력이 필수적이다 가1.0 HDD .

격 경쟁력을 갖기 위해서는 셀 당 비트 또는(Cell) 2 비트를 저장할 수 있는4 MLC

플래시 메모리의 활용 기술이 필수적이다NAND .

플래시 메모리가 가지고 있는 세가지 약점 즉 저속 짧은 수명MLC NAND , , ,

높은 오류확률을 반도체 하드웨어 구조와 소프트웨어 구조를 활용하여 보완하도

록 하여 저가에 높은 성능을 발휘하는 인치 이하의 를 대체하는 기술은1.0 HDD

앞서 논의한 휴대폰 차량용 내비게이션 등 다양한 단말기에 필수적DMB, , DMB

으로 사용될 수 있을 것으로 전망된다.

기술 개발의 목표(2) .

휴대폰 및 녹화재생용 단말기 등에 적용되는 플래시 메모리를 사용DMB NAND

하는 대용량 반도체저장장치 의 개발을 목표로 함SoC

개발 결과물은 나 휴대폰용 시스템 반도체 등에 별도의 인터페이스 회1. DMB

로 없이 직접 연결되며 이상의 다치낸드플래시 이하, 2Giga Byte ( MLC:Multi

를 제어할 수 있는 시스템반도체 이하Level Cell) ( SoC)

용량 방송의 채널을 는 을2. 2Giga Byte : DMB 1 (1.2Mbps, MPEG4 384Kbps) 3

시간 이상 저장

저장속도3. MLC : Read 40MByte/Sec, Write 6MByte/Sec

.

나 연구개발의 중요성.

중요성(1)

인치 또는 인치 는 미국과 일본의 주도로 개발되어 왔으며 주로1.0 0.85 HDD , ,

휴대폰 등을 목적으로 개발이 진행되어 왔다 그러나 인치 이하, PMP, MP3 . , 1.0

의 가 갖는 문제점이 있으니 그것을 살펴보면HDD ,

먼저 속도가 느리다는 점이다 원판이 작기 때문이며 게다가 최근 보고된 바에. ,

의하면 제품 시험시에는 큰 문제가 없어 보이나 막상 시중에 출시되면 소비자, , ,

로부터의 요구 때문에 큰 곤욕을 치루고 있다는 보고이다 이는 충격에 상A/S .

대적으로 강하게 설계되어 있을 것으로 생각하고 자료 또한 그러하지만 실제, ,

소비자들은 쉽게 단말기를 땅에 떨어뜨리기가 일쑤이고 이 때문에 고장이 잦는

것은 어찌보면 당연한 일일 것이다. .

본 기술은 이러한 초소형 의 문제를 해결하여 소비자들이 신뢰성을 갖고HDD

단말기를 사용할 수 있도록 만드는것이 중요하다.

시장성(2)

먼저 플래시 메모리의 시장을 살펴보면 년까지 억 달러에 이를NAND 2010 400

것으로 전망된다 이에 대한 원동력은 휴대정보통신기기의 비약적인 발전에 그.

배경이 있다 와 디지털 카메라에서 시작된 플래시 마켓은 휴대폰에. MP3 NAND

적용됨은 물론 와 내비게이션 시장의 성장과 그 맥을 함께하고 있다, PMP .

뿐만 아니라 는 향후 플래시 마켓이 시, UMPC (Ultra Mobile PC) NAND PC

장에도 침투될 수 있음을 예상케 하고 있다.

본 기술개발에 의한 제품은 현재 최대용량 이며 년경 새로운 구조8GByte , 2007

의 를 적용하게 되면 까지 확장될 수 있을 것으로 기대되며 플MLC , 16GByte ,

래시 카드보다는 대용량을 포커스 하고 에서는 인치 이하 시장을 겨냥, HDD 1.0

한다면 나름대로의 시장을 개척할 수 있을 것으로 기대된다, .

마켓은 년 약 만대로 예상 되지만 그 시장은 약 억 달러Flash SSD 2010 270 , 45

에 달한다 낸드플래시 메모리의 가격 하락을 좀더 진보적으로 본다면 아마도. ,

보급 대수는 대폭 향상될수도 있을 것이다.

연구개발의 내용 및 범위3.

가 개발 내용.

사용- 32bit ARM7TDMI Core IP

개발- 32bit Error Detection & Correction IP (Verilog HDL & C Source Code)

파이프라인형 인터페이스 개발- MLC NAND Flash IP (Verilog HDL & C

Source Code)

인터페이스 규격인 규격 사용- HDD PATA (Parallel ATA)

- MLC Bad Block Management Algorithm (C Source Code)

- MLC Wear Leveling Algorithm (C Source Code)

나 개발 범위.

규격결정1.

반도체 개발2. IP

개발3. Firmware

검증보드 개발4. FPGA System

반도체스토리지 통합5. System Test

6. Top Simulation

외주7. P&R :

데이터 반도체수탁회사에 송부 외주8. GDS-II :

개발9. Test B/D

및 품평10. ES Sample Test

시제품 발표11.

시제품개발 결과 및 활용에 대한 건의4.

가 개발 결과.

기능 또는 휴대폰과 연결되는 반도체저장장치용 로 내1. : DMB SoC ARM CPU

규격 급 공정사용2. : 128TQFP-1010 0.35um UMC ASIC

구조 또는 휴대폰과 직접 인터페이스 되며 를 개 이상 연결하3. : DMB MLC 4

는 구조

특성 오류정정회로 를 내장하여 에서도 강인한 성능을 보4. : 32bit ECC( ) MLC

처리능력 최대 최대5. : Read - 40MByte/Sec, Write - 6MByte/Sec

용량 사용으로 까지 구현6. : MLC 4EA 8Giga Byte

체적7. : 10mm x 10mm x 1.4T

수명 년 이상8. : 5 .

나 활용에 대한 건의.

방송 수신 녹화 재생기로 활용1. DMB : DMB

맵 데이터 저장 및 방송 수신 녹화 재생2. Car Navi : DMB

기대 효과5.

가 기술적.

한국의 전략 상품인 휴대폰 등 제품의 부품 경쟁력 강화- , DMB, MP3

대용량 반도체 저장장치 분야에서 부품 국산화율 달성- 100%

충격 진동에 깨지기 쉬운 마그네틱 스토리지 일반 를 동등가격 이하로- ( HDD)

대체할 수 있는 신기술

나 경제적.

매체를 능가하는 성능 기능에 의해 년내 동등 규모 이상의 사업으로- HDD , 10

성장 가능한 사업

해외 제품 의존도가 인 이하 시장을 한국의 전략 제품이며 가격- 100% 1" HDD

에서 우수한 플래시 메모리를 이용하여 수입을 대체하는 효과MLC NAND

목 차

제 장 서론1 1

제 절 기술개발의 개요 배경 최근 연구동향1 , , 1

기술개발의 개요1. 1

기술개발의 역사2. 2

기술개발의 배경3. 6

기술개발의 연구동향4. 9

가. M-Systems 9

나 삼성전자. 10

다 하이닉스. 11

제 절 기술개발의 목적 중요성 시장성2 , , 12

기술개발의 목적1. 12

기술개발의 중요성2. 14

1. IP-STB 16

산업용2. PC 16

의료용 장비3. 16

초소형 노트북4. 16

우주 항공용 장비5. 16

기술개발의 시장성3. 18

제 장 본론2 22

제 절 기술개발의 구조1 22

시스템 구조1. 22

가 와. DMB PMP 22

나 휴대폰. 25

소프트웨어 구조2. 28

가 소프트웨어의 전체구조. 28

반도체 구조3. 29

가 시스템 반도체의 구조. 29

제 절 기술개발의 사양2 30

하이닉스 플래시 구조1. MLC NAND 30

가 개요. 30

나 특징. 32

다 구조 및 핀 번호. 33

인터페이스2. ATA 47

가 개요. 47

나 인터페이스의 역사. ATA 47

나 규격상의 특징. 53

블럭3. ECC 66

가. 1bit ECC 66

나 에서의 의 영향. MLC NAND 1bit ECC 70

다. Reed-Solomon ECC 72

4. ARM7TDMI 74

가 특징. 74

버스5. AMBA 79

가 특징. 79

6. AMBA Peripheral 85

가 사양 개요. 85

나. PMU 85

나 인터럽트 컨트롤러. 88

다 타이머. 91

마. UART 93

바. SMI 95

사 컨트롤러. ATA 96

제 절 기술개발의 시뮬레이션 및 검증3 FPGA 118

보드 구성1. FPGA 118

가 보드의 제작. Altera FPGA 118

시뮬레이션 환경의 구성2. 123

가 환경. Workstation 123

나 환경. ARM7TDMI Simulation 124

다 환경. AMBA Peripheral Simulation 125

라 기타 환경. Simulation 126

마 환경. Synthesis 127

바 검증 환경. 128

검증3. IP 129

가. Reed-Solomon ECC 129

나 기반. DMA Pipeline MLC NAND Flash Controller 132

다. Ultra ATA Controller 133

제 절 기술개발의 소프트웨어4 135

알고리즘의 검증1. 135

가 알고리즘의 구현. RS-ECC 135

나 알고리즘의 구현. CRC 137

소프트웨어2. 141

가 논리 물리 테이블 작성 알고리즘. / 141

나 섹터 알고리즘. MLC NAND Write 142

다 섹터 알고리즘. MLC NAND Read 143

라 블록 관리 알고리즘. MLC NAND BAD 144

마 알고리즘. MLC NAND Wear Leveling 145

바 수명관리 알고리즘. MLC NAND 146

사. MLC NAND Low Level Driver 147

아. ATA Command Processing 149

자. Host Communication Protocol 150

제 장 결론3 151

제 절 기술 개발 결과 정리1 151

반도체 스토리지 의 개발 흐름1. SoC 151

반도체 의2. ASIC Floor Plan 152

반도체 시제품의3. ASIC Die 153

사양4. Package : 128TQFP 154

주요 회로도5. Evaluation B/D 155

6. Evaluation B/D 157

7. Target B/D 158

성능8. Evaluation B/D 159

제 절 활용에 대한 건의 및 기대효과2 161

활용에 대한 건의1. 161

기대효과2. 165

상용화 계획3. 167

참고문헌 168

부록 169

전시회 참가 사진1. 169

가 년 대한민국 기술대전 참가 년 월. 2005 (2005 10 ) 169

나 년 참가 년 월. 2006 SEK2006/IT Techno-Mart (2006 6 ) 170

다 참가 년 월 하이닉스와 공동. iSEDEX 2006 (2006 10 : ) 171

반도체 네트워크 년 월호 논문 기고2. 2006 11 172

개발 환경3. 173

시뮬레이션 소스4. CRC 16 C 175

시뮬레이션 소스5. CRC 16 Verilog 179

소스6. ATA Command Processing C 181

테스트 프로그램 소스7. Pipelined MLC C 188

- 1 -

제 장 서론1

제 절 기술개발의 개요 배경 최근 연구동향1 , ,

기술개발의 개요1.

최근 모바일 컴퓨팅 환경이 다양화 되면서 나 와 같은DMB Wibro, HSDPA

방송 통신 융합형 인프라가 보급되고 있고 휴대폰에서 출발한 모바일 환경이,

자동차와 등에 적용되면서 다양한 형태의 제품과 서UMPC (Ultra Mobile PC)

비스가 대두되고 있다.

휴대폰에서는 는 물론 를 볼 수 있는 제품들은 일반적인 수준이MP3 , DMB

고 자동차에서도 및 네비게이션의 보급은 꾸준히 증가하고 있다 또, DMB GPS .

한 나 가 에 도입되어 이동중에 초고속 인터넷을 사용하, Wibro HSDPA UMPC

는 사례들이 속속 관련 웹사이트에 올라오기 시작 하였다.

이러한 다양한 방송 통신 인프라와 휴대폰 자동차 등의 단말기는 향, , UMPC

후 우리의 생활 문화를 질적으로 바꾸어 놓을 수 있을 것으로 기대된다.

본 기술은 다양한 모바일 컴퓨팅 환경에 필요한 저장매체를 기존의 소형

를 사용하는 것이 아니라 플래시 메모리로 바꾸는 작업이고 가HDD NAND ,

격에서도 경쟁력을 확보하기 위해서 저가 플래MLC(Multi Level Cell) NAND

시 메모리를 이용하는 것이다.

는 그 수명은 기존 에 비해 짧지만MLC (Multi Level Cell) NAND NAND ,

휴대폰 등의 정보통신 기기의 라이프사이클을 고려해 보면 오히려, DMB HDD

보다는 경쟁력을 갖추고 있는 장점을 가지고 있기 때문이다.

그러나 는 속도가 에 비해 상대적으로 저속이어, MLC SLC(Single Level Cell)

서 이를 고속으로 제어하는 것 또한 중요한 부분이다 이에 대한 기술은 국내에.

전무한 실정이어서 이에 대한 기술개발이 중요한 것이다.

또한 는 오류 발생 확률이 대단히 높기 때문에 이에 대한 적절한 오류, MLC

정정기술을 확보하는 것도 중요하다.

본 기술은 휴대정보통신 기기에 사용되는 인치 이하의 소형 를 논리1.0 HDD

적으로는 동일하게 하지만 물리적으로는 저가 플래시 메모리로 바꾸는, NAND

작업이다 인치 이하의 소형 는 와 가 역점. 1.0 HDD Conice Toshiba, SeaGate

적으로 추진하는 사업이어서 이에 대한 한판 승부가 기대되는 부분이다.

기술개발의 역사2.

- 2 -

는 년경 처음으로 라고하는 를 처음으로 세상M-systems 1995 FFD Flash-SSD

에 내놓았다 이 제품의 용도는 과연 무엇이었을까. ?

이 제품의 용도는 하드디스크를 대체하는 제품인데 하드디스크의 단점인 충,

격 진동 온도조건 그리고 수명을 보완할 수 있는 제품이 군사무기 분야에서 필, ,

요하게 되었다 전투기 잠수함 미사일 제어 시스템 전자식 탱크 항공모함 등. , , , ,

등의 군사무기들은 컴퓨터 제어에 의해 이루어 진다 이런 시스템에서.

는 처음으로 적용되어 그 위력을 발휘하고 있다 군사무기 시장에서Flash-SSD .

의 최대의 납품업체는 바로 인 것이다Flash-SSD M-systems .

년경 당시 반도체는 차세대 전략 기술로 기술을 설정하고 내부적1994 LG Flash

으로 많은 기술개발을 하고 있었고 당시 이스라엘의 초기에는, SanDisk (

와 전략적 제휴를 맺게 된다 다음해에 영국에서SunDisk) . 32bit ARM RISC

의 도입을 추진하고 그뒤 독일에서 사와, hyperstone ATA Flash Disk

의 공동개발을 추진하게 되었다 이와 함께 히타치에 앤드플래시Controller .

가 개발한 낸드플래시와 동급의 기술 를 염두하고 차세(AND Flash : Hitachi )

대 시장에 대한 그림을 그려 나갔다Flash Disk .

한편 독일의 사와 함께 개발을 하였던 팀은 각고의 노력끝에 시, hyperstone

- 3 -

제품을 만들어 낼 수 있었다 그 때 까지만 하더라도 샌디스크와 히타치를 비롯.

한 극히 일부의 회사에서만 이런 기술을 볼 수 있었던 상태였다 여러가지 많은.

문제점들이 있었지만 그 시제품은 국내에서 최초로 개발된 이, ATA Flash Disk

다 나름대로 사와 공동 개발한 제품은 큰 의미가 있었다 진보적인. hyperstone .

알고리즘 채택은 당시로서는 획기적인 것 이었으며 현재까지도 그 성능은ECC

타 회사에 비해서 한수 위의 기술로 인정되고 있다.

당시 사는 기술만을 고집해 왔으나 반도체와의 공동개발hyperstone CPU , LG

이후에 만들어진 에서 사업적 전환을 꾀하여 최근까지 관련 제품을Flash Disk

지속적으로 개발하고 있다.

한때 현재의 에서 를 으로 변경하여 저 소비전, Hynix ( MagnaChip) CPU ARM

력화된 제품을 발표하였으나 빛을 보지는 못하였다.

한편 삼성전자는 자체 기술로 를 개발하였으나 호환성이슈등 몇CF controller ,

가지 문제로 인하여 역시 시장에서 빛을 보지 못했고 이후 신형, CF controller

에 의해 활기를 찾게 되었다 신형 는 플래시를 내장하여. CF controller NOR

업그레이드가 용이하게 접근하며 호환성 문제를 대폭 해결하고 속도 또한 높이

는데 성공하였다 그러나 대만 반도체 업체의 저가 공세속에서 시장 점유는 크. ,

게 확대하지 못했다.

삼성전자는 와 특허 크로스라이센스를 맺고 시장에 본격적으로 진출SanDisk

하게 된다 또한 과 제휴를 하여 응용 제품군에 대한 라인업을 약속. , M-systems

하나 큰 성과를 거두지 못하고 와의 제휴는 막을 내리게 된다, M-systems .

는 이후에 와 제휴하게 되면서 낸드플래시 전반에 대한 포트폴M-systems hynix

리오를 강화하게 된다 이 계통의 이스라엘 회사들의 특징은 제휴 관계가 항구.

적이지 못하고 이익 여하에 따라 지속적으로 변하는게 특징이다 사랑은 변하. “

는것이야 라고 했던가 반도체와 결별한 는 삼성전자와 제휴를!” ? LG SanDisk

맺은 이후 도시바와 전략적으로 이라는 회사를 설립하여 삼성전자Flash Vision

와 경쟁하고 있다.

삼성전자와 하이닉스 두회사는 많은 어려움을 딪고 후발주자로 나선 상태에서

상상을 초월한 노력의 결과로 한국의 낸드플래시 기술을 세계 제일의 수준으로

높인 당사자 들이다 그 이면에는 우리만이 가지고 있는 끈기 와 장인정신. “ ” “ ”

이 있었기 때문이 아닌가 하는 생각이 든다.

삼성전자는 년 처음으로 에 대한 개발을 선언하였고 년에 를2005 SSD , 2006 SSD

- 4 -

발표하였다 최근 삼성전자는 공정의 차세대 시제품을 발. 40nano 32Gbit NAND

표하면서 업계에서의 주도권을 쥐고 있다 하이닉스 역시 삼성전자와 선의의. “

경쟁자 로서 삼성전자를 바짝 추격하고 있다 이러한 삼성전자와 하이닉스의” .

낸드플래시 사업의 결실은 에서 보게 될 것으로 기대된다Flash-SSD .

삼성전자의 시제품과 응용제품40nano 32Gbit NAND

우리 연구소에서는 를 년 처음 제품 시연을 하였고 년에Flash-SSD 2005 , 2006

를 발표하였다 에 비해 무려 년이 뒤진 시점이지만 그Flash-SSD . M-systems 10 ,

의미는 사못 차이가 난다.

아무 기술도 배경도 없는 상태의 발표가 아니라 세계일류상품인 우리의 낸드플,

래시에 우리 기술로 만든 컨트롤러 기술이 결합되어 이제는 우리의 컴퓨터의 메

모리와 보조기억장치는 모두 로 만들 수 있게된 것이다 컴퓨"Made in Korea" .

터의 핵심 부품을 보면 와 메모리 보조기억장치 그리고, CPU GPU(Graphic

와 마지막으로 가 있다Processing Unit) LCD .

미국의 와 북미의 그리고 나머지는 한국의 부품들이 컴퓨터를 장악CPU GPU

하게되는 것이다 비단 컴퓨터 뿐만 아니라 휴대폰 등에서는 와. , DMB CPU GPU

까지도 한국의 부품들이 만들어지고 있다.

이제까지는 우리나라의 군사무기와 산업용 핵심제품에 탑재된 가 문제가SSD

생기면 무조건 해외로 보내야 하는 상황에서 이제는 우리의 손으로 만든

를 가지고 앞으로 우리의 잠수함 우리의 항공모함 우리의 전투기 우Flash-SSD , ,

리의 탱크 우리의 인공위성을 만들 수 있는 것이다 마치 비행기가 추락하면, .

블랙박스를 찾는데 찾기만 하면 무조건 미국으로 보내진다 왜냐하면 블랙박스, . ,

해독능력이 없기 때문이다.

- 5 -

블랙박스와 유사한 기능을 수행하는 실제 우리나라 전투기에 장착Flash-SSD (

됨 가 문제가 생기면 이제는 우리의 손으로 해결할 수 도 있게된 것이다) .

또한 각종 산업용 장비 분야에서 그 안정성을 극대화 시킬 수 있는,

로 우리의 산업 경쟁력을 한층 더 높여줄 수 있을 것이다Flash-SSD .

와 노트북에서 부팅속도를 비약적으로 향상시켜주며 특히 소형노트북UMPC ,

사용자는 그 성능의 향상을 피부로 느낄 수 있는 바꿔 가 유행이 될 날“HDD ”

이 눈앞에 와 있다.

- 6 -

기술개발의 배경3.

본 기술개발은 하나의 착상에서 시작되었다 즉 가 나온후 이 나왔. , TV VTR

듯이 와 같은 방송데이터를 저장하는 솔루션이 언젠가는 필요하지 않겠냐, DMB

는 것이다 본 기술개발에 착수하는 시점에서는 휴대폰용 인치 이하의. 1.0 HDD

가 제품화 되고 있었고 를 만드는 회사들에서 인치 이하의 를 채, PMP 1.0 HDD

용하는 사례들이 늘어나고 있었다 이러한 상황에서 인치 이하의 는 전. 1.0 HDD

량 수입에 의존하는 품목이었고 이것을 우리나라에서 만들어지는 플래, NAND

시 메모리를 사용하면 어떨까 하는 생각이었다.

삼성전자의 휴대폰HDD 의 초소형Conice HDD

삼성전자의 세계 최초의 휴대폰은 우리가 개발을 준비하고 있을 때 발표HDD

된 제품이다 인치 사의 제품을 채용한 것으로 이에 대한 시장에서의. 0.85 Conice

반응이 무척 기대되었다.

어쨋든 단말기에서의 대용량 저장장치는 필수적으로 자리잡을 것이고 이에 대,

해서 저가의 솔루션 그리고 안정적인 솔루션은 향후 필수적으로 채용될 것으로

전망되고 있다.

- 7 -

년 여름휴가를 깜짝 놀라게한 사건은 의 인수이다2006 SanDisk M-systems .

너무 놀라 이스라엘 회사들이 회사 팔고 그돈으로 이스라엘에 전비를 대느라 그

런 인수 합병을 하는지 착각할 정도였다 이스라엘에는 원래 과. M-systems

그리고 이라는 회사가 있었다 는 산업용과 군용에SanDisk Saifun . M-systems

강한 응용제품을 개발하고 있었고 는 제품 자체 기술과 상Flash , SanDisk Flash

용제품을 개발하고 있었다 은 낸드기술과 유사한 기술을 개발하고 있었. Saifun

다 이 세회사가 기술에서 차지하는 비중은 대단히 높다 현재 은. NAND . Saifun

예전의 지멘스 반도체부문 과는 조인트벤처 에는 기술공여를 하infineon( ) , AMD

고 있는 회사이다.

을 자회사로 인수함에 따라 사실상 는 세계 최강의 기술력M-systems SanDisk

과 시장주도력을 보유하게 되었다.

이에 반해 일본의 는 초기에 앞선 기술로 선전하였으나 낙후된 설비Hitachi ,

와 변화에 능동적으로 대응하지 못하고 앤드플래시 사업을 추진하다 한계에 부

딪쳐 결국 사업 정리 단계에 들어섰다 년 초만 하더라도 기술자들. 2000 Hitachi

은 대단한 자부심으로 뭉쳐 있었고 의욕적으로 사업을 전개하였으나 낸드 플래, ,

시의 공세와 의 폐쇄성이 부른 결과라 하겠다 당시에 는 업계에hitachi . Hitachi

서 선도적으로 트랜지스터 하나로 를 저장하는 기술을 가지고 있었지만 주2bit ,

변 업체들에게 이에 대한 응용 기술 제공을 등한시 하다가 때를 놓치고 말았다.

초기의 와 메모리 카드에는 제품들이 꽤 채용되었지만 그 낸드플MP3 Hitachi ,

래시와는 다른 특성은 업체들에게 당혹감을 주기에 충분하였다 결국 나중에 관.

련 응용 기술을 공개하였지만 이미 때는 늦어 낙조의 길을 걷게 되었다, .

는 대만에 설비와 기술을 넘겨주게 되어 대만은 향후 낸드플래시 사업Hitachi

의 후발주자가 될것을 예상하게 한다

.

과 이 로 미국을 중심으로 전선을 형성하고 있고intel micron IM Flash ,

와 가 또다른 전선을 형성하고 있다 은 의 선두주SanDisk Toshiba . micron CF

자 를 삼켰으며 이에 앞서 년 하반기에 미국의Lexar Media , 2005 SimpleTech

는 를 개발 판매 하고 있던 를 합병시켰다Flash-SSD - Memtech .

이로써 세계 지도는 를 거대한 축으로 하고 이Flash-SSD SanDisk SimpleTech

시장에 참여한 양상으로 되고 있으며 또한 시장에 진, Micron-Lexar Flash-SSD

- 8 -

입하는 것은 시간 문제가 아니겠는가 하는 전망을 해본다.

한편 대만의 회사들도 시장에 대해서 높은 관심을 보이고 있다 최, Flash-SSD .

근에 만난 대만 회장은 사업에 대해 현재는 매출에서 차지하는PQI Flash-SSD

비중이 낮지만 향후 주도적 사업이 될 것이라는 데에서 함께 공감을 했다 다른.

대만 회사에서도 의 개발을 진행하고 있음을 물론이다 대만 회사들Flash-SSD .

의 공통점은 저가를 무기로 시장에서의 지배력을 높이려는 생각을 가지고 있는

것 같다.

년은 가 첫 세계대전을 벌일 것으로 기대된다 메모리와2007 Flash-SSD . USB

마찬가지로 대만업체의 공세가 예상되면서 국내의 삼성전자와 하이닉스는 실질

적 최대의 수혜자로 떠오를 것으로 전망된다 이 에 중소 벤처 회사는 기술적.

차별화와 마케팅 차별화를 통해서 나름대로의 시장을 가져가야 한다 기술적.

차별화 없이 대만의 가격 공세를 막을 도리는 없기 때문이다.

또한 낸드플래시 소자에 대해서도 한차원 높은 강력하고도 전략적이며 장기,

적인 특허 전략을 구사 할 것을 조언하고 싶다 유아기적 발상일지는 모르겠지.

만 기회가 된다면 삼성전자와 하이닉스가 낸드플래시 사업에 대해서 특허 크로,

스라이센스 제휴도 제안하고 싶다 세계 시장의 선두에 있는 두 회사가 상호 철.

저히 기술유출은 막도록 하지만 특허와 신기술 분야에 대해서 상호 좋은 아이,

디어를 공유하고 규격 또한 통일화 해서 나아 간다면 낸드 플래시 시장에서의,

주도권은 한층 더 강화될 것으로 전망된다 왜냐하면 실제 낸드플래시 사용자. ,

의 입장에서는 두회사의 세부 규격이 서로 상이함에 의해 많은 기술적 오류와

신뢰성의 문제를 발생시키고 있다 이러한 기반하에서 는 안정성이. Flash-SSD

더욱 높아질 것이며 규격의 상이함에서 오는 컨트롤러의 호환성 문제는 대폭 해

소될 것으로 예상 된다.

낸드플래시는 사업과는 상이한 점이 많다 규격과 기능이 메이커 마다DRAM .

서로 다르지만 일반 개발 업체는 쉽게 이를 인지하고 있지 못하고 있다 그냥, .

처럼 로 대치가 될것을 기대하고 있다 이런 문제를 언제까지나 개DRAM 1:1 ..

발업체에 막대한 기술적 시간 낭비를 만들 것이 아니라 선두에 있는 삼성전자와

하이닉스가 진지하게 상의하여 최대스펙과 최소스펙을 정의하여 각사의 공통사

양을 만들고 각사의 고유 기능은 나름대로 구현하여 최소스펙만 만족하면 모두

동작시킬 수 있도록 해주는 것이 낸드플래시 소자를 개발하는 측에서 해줄 일인

것 같다.

- 9 -

기술개발의 연구동향4.

가. M-Systems

를이용한 제품에 대해서 가장 기술력이 높은 제품은 역시 이스라엘의MLC

이다M-Systems .

의 기술M-Systems x4 NAND

는 삼성전자와의 제휴관계를 정리하고 하이닉스와 새로운 제휴관계M-Systems

를 만들어 제품 관련 기술을 개발하고 있다MLC NAND .

개발이 진행되는 도중에 가 이스라엘의 에 인수되었다는 소M-Systems SanDisk

식을 접하게 되었다.

가 가진 제어기술과 이를 이용한 기술을M-Systems MLC NAND Flash SSD

가 거액에 인수하는데 충분한 요건이 된다고 사료된다SanDisk .

의 자회사인 는 현재 삼성전자와 하이닉스에서 개발하는SanDisk M-Systems

기술에 머물지 않고 기술을 개발하고 있2-bit MLC NAND 4-bit MLC NAND

다 하이닉스 기술진들과 관련 기술을 협의한 결과 는. M-Systems MLC

에 대해서는 세계 최고 수준의 기술을 보유한것으로 보인다NAND .

에서 만회 사이클로 한정된 제품에서 수명을 비약적으로 늘리는2-bit MLC 1

기술을 보유하는 것은 그리 쉬운기술이 아니기 때문이며 를 가장 빨, 4-bit MLC

리 구현해 내는 것을 보았을 때 빠른 시간을 투자해서 따라가야할 대상으로 판,

단된다.

- 10 -

나 삼성전자.

삼성전자는 와 두가지 스토리지를 모두 개발하는 와 비슷HDD NAND Toshiba

한 사업전략을 구사하고 있다.

삼성전자의 는 아래와 같은 구조로 되어 있다는 것을 해외 사이트에서 입SSD

수하였다 이슈는 에 대응하는 여부가 우리에게는 대단히 중요한 사항이어. MLC

이에 대해서 추적해본 결과 삼성전자의 컨트롤러는 에 대응이 되지 않았MLC

다 에 대한 오류 정정능력을 갖고 있지 않기 때문이다. MLC .

단 삼성전자는 자체 보유한 공정기술을 이용해서 또는 기술을, 0.18um 0.13um

사용한 것으로 보인다.

- 11 -

다 하이닉스.

하이닉스는 시스템반도체 부문인 매그너칩을 분사시킨 이후 반도체 메모리 제품

에만 집중하고 있으며 개발 초기에 아래와 같은 로드맵을 제시하였다, .

하이닉스는 몇가지 특허 이슈등에 대해 상당히 민감해 있는 상태에서

와의 전략적 제휴를 통해 의 기술을 활용해 유사 제품을M-Systems M-Systems

개발할 계획이라고 밝혔다.

하이닉스의 플래시 메모리 로드맵NAND

- 12 -

제 절 기술개발의 목적 중요성 시장성2 , ,

기술개발의 목적1.

형 플래시 메모리는 디지털 카메라 휴대폰 등에 채용되어NAND , MP3,

처럼 대중화된 메모리 반도체이다 그러나 데이터 기록 속도가 범용하드DRAM .

디스크나 만큼 빠르지 않아 그 사용 용도가 제한되어 왔다 본 개발 기, DRAM .

술은 이러한 형 플래시 메모리의 약점을 극복하고 그 강점인 충격 진동NAND ,

에 강한 스토리지 를 개발하여 인치 이하의 시장을 대체하는 것에SoC 1.0 HDD

그 목적이 있다.

인치 이하의 시장을 대체하기 위해서는 가격 경쟁력이 필수적이다1.0 HDD .

가격 경쟁력을 갖기 위해서는 셀 당 비트 또는 비트를 저장할 수 있는(Cell) 2 4

플래시 메모리의 활용 기술이 필수적이다MLC NAND .

플래시 메모리가 가지고 있는 세가지 약점 즉 저속 짧은 수명MLC NAND , , ,

높은 오류확률을 반도체 하드웨어 구조와 소프트웨어 구조를 활용하여 보완하도

록 하여 저가에 높은 성능을 발휘하는 인치 이하의 를 대체하는 기술1.0 HDD

은 앞서 논의한 휴대폰 차량용 내비게이션 등 다양한 단말기에 필DMB, , DMB

수적으로 사용될 수 있을 것으로 전망된다.

의 동향 자료 년 월Web Feet Research NVM Market [2006 .8 ]

는 그림과 같이 와 직접 경쟁하는 제품이 될 것이며 인치MLC NAND HDD , 1.0

- 13 -

와 인치의 는 기술에 의해 향후 시장에서 찾아보기 어렵0.85 HDD MLC NAND

게될 전망이다.

수입에 의존하는 인치 인치 를 국산 메모리100% 1.0 , 0.85 HDD MLC NAND

소자와 우리의 기술로 만든 컨트롤러를 이용해 대체해 보는것이 본 기술개발의

근본적인 목적이다.

의 년 월Gartner NAND Flash Supply and Demand [2006 8 ]

또한 과거 공급부족에서 시달리던 플래시 메모리가 년부터는 공급, NAND 2007

과잉상태로 들어가면서 큰 폭의 가격 하락이 예상되고 있다 이 시점에서 국가.

의 중요 산업인 플래시 메모리 분야에서 우리 독자의 시스템 솔루션으NAND

로 시장에 보다 적극적으로 개입하는 것 또한 중요한 목적이 될 것이다.

- 14 -

기술개발의 중요성2.

인치 또는 인치 는 미국과 일본의 주도로 개발되어 왔으며 주로1.0 0.85 HDD , ,

휴대폰 등을 목적으로 개발이 진행되어 왔다 그러나 인치 이하, PMP, MP3 . , 1.0

의 가 갖는 문제점이 있으니 그것을 살펴보면HDD ,

먼저 속도가 느리다는 점이다 원판이 작기 때문이며 게다가 최근 보고된 바에. ,

의하면 제품 시험시에는 큰 문제가 없어 보이나 막상 시중에 출시되면 소비자, , ,

로부터의 요구 때문에 큰 곤욕을 치루고 있다는 보고이다 이는 충격에 상A/S .

대적으로 강하게 설계되어 있을 것으로 생각하고 자료 또한 그러하지만 실제, ,

소비자들은 쉽게 단말기를 땅에 떨어뜨리기가 일쑤이고 이 때문에 고장이 잦는

것은 어찌보면 당연한 일일 것이다.

인치 와 인치의 제품 비교1.0 0.85

본 기술은 이러한 초소형 의 문제를 해결하여 소비자들이 신뢰성을 갖고HDD

단말기를 사용할 수 있도록 만드는것이 중요하다.

- 15 -

년NIKKEI ELECTRONICS [2006 ]

위 그림은 플래시 메모리의 가격 하락에 의해 인치 는 년NAND 1.0 HDD 2007

경 플래시 메모리로 대체될 수 있음을 보여주는 그림이다NAND .

특히 한국이 가지고 있는 플래시 메모리를 활용하여 인치 이하의NAND 1.0

제품군에 대해서는 플래시 메모리로 제품을 제공한다면 많은 효과가 있NAND

을 것으로 예상된다.

본 기술은 이러한 초소형 의 문제를 해결하여 소비자들이 신뢰성을 갖고HDD

단말기를 사용할 수 있도록 만드는것이 중요하다.

- 16 -

1. IP-STB

등을 을 통해 전송하- H.264 / MPEG4 / Windows Media 9 Cable Modem

는 분야로 내장 와 의 증가로 저가 반도체스토리지의 채용을, OS Application

검토하고 있는 분야

산업용2. PC

현재 를 사용하고 있으나 에서의 부팅- Flash Disk , Embedded Windows XP

시간이 약 초 이상 소요되는 문제를 해결하기 위해 고속화된 반도체 스토리지30

의 채용을 검토하고 있는 분야

의료용 장비3.

등의 의료장비는 강자성 환경이어서 범용 를 사용하기 힘든- MRI ( ) HDD强磁

분야임.

초소형 노트북4.

에 비해 소형이며 가볍고 또한 소비전력이 범용 에 비해 약- HDD HDD

정도로 매우 낮기 때문에 노트북 배터리 사용 시간을 정도 오래1/10 10~15%

사용할 수 있게 된다.

우주 항공용 장비5.

우주 항공용 장비는 가속도에 영향을 받기 때문에 범용 는 사용하기가- HDD

곤란하다 반면 반도체스토리지는 이상의 충격에도 견딜 수 있기 때문. , 2000G

- 17 -

에 우주항공전자기기등에 채용할 수있다.

이외에도 열악한 환경에서 견딜 수 있는 분야인 군수 산업 분야에도 많은 응용

할 수 있는 장점이 있다.

- 18 -

기술개발의 시장성3.

먼저 플래시 메모리의 시장을 살펴보면 년까지 억 달러에 이를NAND 2010 400

것으로 전망된다 이에 대한 원동력은 휴대정보통신기기의 비약적인 발전에 그.

배경이 있다 와 디지털 카메라에서 시작된 플래시 마켓은 휴대폰에. MP3 NAND

적용됨은 물론 와 내비게이션 시장의 성장과 그 맥을 함께하고 있다, PMP .

뿐만 아니라 는 향후 플래시 마켓이 시, UMPC (Ultra Mobile PC) NAND PC

장에도 침투될 수 있음을 예상케 하고 있다.

의 시장 예측 년 월Web Feet Research NVM [2006 8 ]

그렇다면 시장은 어떠할 가 시장은 플래시 시장과는 상호, HDD ? HDD NAND

보완 관계에 있다 대용량 스토리지는 당연 가 필수적인 요소일 수 밖에. HDD

없다 다만 인치와 인치 시장에 대해서는 큰 단점을 가지고 있다 소형화. , 1.0 0.85 .

에 따르는 단가 상승과 성능저하 그리고 충격에 대한 근본적인 문제에 의해서

다분히 플래시 메모리에게 시장을 내어줄 수 밖에 없는 상황에 처해 있NAND

는 것이다 시장의 원동력은 인치에 있으며 노트북 시장에 열쇄가 있. HDD 2.5

다 그 성장율이 다른 크기의 에 비해 현저히 높기 때문에 시장은. HDD HDD

인치에 무게중심을 싣고 움직이고 있다 인치 데스트톱 마켓은 대용량 화2.5 . 3.5

가 계속 진행될 전망이다 비록 치열하게 경쟁하고 있는 시장이지만 년까. , , 2010

지 억대가 넘는 양의 시장으로 성장하고 있다7 .

- 19 -

의 시장 예측 년 월Trend Focus HDD [2006 4 ]

플래시 메모리가 적용되는 또하나의 어플리케이션은 플래시 카드이다NAND .

플래시 카드는 년에 발표된 이래로 다양한 형태로 발전되어 가고 있다1991 .

휴대폰 내비게이션등에 현재 채용되어 나름대로 견인차 역할을 하, MP3, PMP,

고 있다 이 시장은 지속적으로 성장할 시장이며 각각의 에 따라. , Form Factor

성장할 것으로 예상된다.

플래시 카드의 발표시기와 종류

현재 두각을 나타내고 있는 플래시 카드는 카드이다 소형화 타잎인SD . Mini

- 20 -

카드와 일명 까지 라인업하고 있으나 그 용량은 현재SD Micro SD ( T-Flash) ,

최대 용량이 이며 그 한계가 노정되고 있다 플래시 카드는 그 크기의4GByte , .

제약으로 인하여 대용량화에는 한계가 있을 것으로 사료된다.

본 기술개발에 의한 제품은 현재 최대용량 이며 년경 새로운 구조8GByte , 2007

의 를 적용하게 되면 까지 확장될 수 있을 것으로 기대되며 플MLC , 16GByte ,

래시 카드보다는 대용량을 포커스 하고 에서는 인치 이하 시장을 겨냥, HDD 1.0

한다면 나름대로의 시장을 개척할 수 있을 것으로 기대된다, .

아래 그림은 년 삼성전자에서 발표한 에 대한 시장 규모를 예측2006 Flash-SSD

한 것으로 의 분석 자료를 근간으로 연합뉴스그래픽에서 그Web-Feet Research

린 그림이다.

Flash-SSD Industry Forecast

Unit :Million US$

Unit :1K Set

Flash-SSD Industry Forecast

Unit :Million US$

Unit :1K Set

시장 예측Flash-SSD

- 21 -

년 약 만대로 나와 있지만 그 시장은 약 억 달러에 달한다 낸드플래2010 270 , 45 .

시 메모리의 가격 하락을 좀더 진보적으로 본다면 아마도 보급 대수는 대폭 향,

상될수도 있을 것이다.

- 22 -

제 장 본론2

제 절 기술개발의 구조1

시스템 구조1.

가 와. DMB PMP

먼저 제품에 채용될 시스템의 구조를 보자 또는 에 사용되는 구. DMB PMP

조를 염두할 때 아래와 같은 구조를 볼 수 있다 의 은, . OKI ML69Q6500 MP3

시장을 위해 칩셋을 개발하였고 한국에서 알고리즘 포팅을 완료하였다, H.264 .

먼저 를 통해 들어온 스트리밍 데이터는 를 통DMB BaseBand H.264 Decoder

해 와 데이터로 분리되며 는 에 는 스피커에Audio Video , Video LCD Audio

전달되는 구조를 갖고 있다 녹화 또는 동영상 파일의 재생시 본 기술개발 제품.

과 인터페이스를 통해 연결되는 구조를 가지고 있다ATA .

및 수신기의 블럭 다이어 그램DMB PMP

- 23 -

의 의 칩 블럭다이어 그램은 다음 그림과 같다OKI ML69Q6500 .

의 의 블럭 다이어 그램OKI ML69Q6500

은 를 가지고 있으므로 외부의 별도의 인ML69Q6500 ATA/ATAPI Controller

터페이스 없이 쉽게 와 연결되는 구조를 가지고 있다 국내외에 나와있는HDD .

칩셋의 구조도 이와 유사하다고 본다.

- 24 -

의 는 다음과 같은 구조로 되어 있다ML69Q6500 ATA/ATAPI Controller .

의 의 블럭 다이어 그램ML69Q6500 ATA/ATAPI Controller

- 25 -

나 휴대폰.

당초 계획에서는 아래 그림과 같은 Qualcomm MSM(Mobile Station Modem)

칩에 직접 연결하는 개념을 구상했으나 실제 휴대폰 응용제품의 경우는 직접연,

결하는 사례는 다분히 그 빈도가 적었다 그 이유는 다양한 어플리케이션 즉. , ,

고해상도카메라 동영상 녹화 재생기능 등의 기능을 구현하기에는DMB, , , 3D

칩셋의 지원프로그램이 그리 강력하지 않기 때문이다Qualcomm .

칩과의 인터페이스Qualcomm MSM

MCPMCP

- 26 -

코어로직은 다음과 같은 시리즈를 발표하고 있어서 멀티미디어 기능상에Hera

서 효율적으로 를 직결할 수 있는 칩셋을 준비하고 있다HDD . (Hera2 / Hera

이러한 휴대폰 멀티미디어 칩셋은 향후 휴대폰에서 막강한 기능을 발휘DMB)

도리 것으로 기대된다.

코아로직의 휴대폰용 시리즈HERA

실제 멀티미디어 휴대폰 어플리케이션은 다음 그림과 같이 된다.

과 멀티미디어 프로세서와 연결구조MSM

HDD I/F

- 27 -

다 시스템 설계 구조.

당초 계획에서는 아래 그림과 같은 Qualcomm MSM(Mobile Station Modem)

칩에 직접 연결

F/W 개발개발개발개발 반도체설계반도체설계반도체설계반도체설계

FPGA Verification

P&R(외주외주외주외주)

Fab

ES Sample

Test

시제품완성시제품완성시제품완성시제품완성

- 28 -

소프트웨어 구조2.

가 소프트웨어의 전체구조.

소프트웨어의 전체 구조는 먼저 플래시 메모리를 직접 인터페, MLC NAND

이스 하는 인터페이스와 실시간 오류정정을 위한 가 필요하다 이 기32bit ECC .

본 작업이 끝난 데이터에 대해서 관리와 관리를 하고 다음으Bad Block Zone ,

로 처리를 수행한다 이렇게 된 상태에서 측과의 인터페이Wear Leveling . Host

스를 관장하는 인터페이스에 연결된다Ultra ATA .

- 29 -

반도체 구조3.

가 시스템 반도체의 구조.

개발하는 시스템 반도체의 구조는 다음 그림과 같이 구성된다.

- 30 -

제 절 기술개발의 사양2

하이닉스 플래시 구조1. MLC NAND

가 특징.

고밀도 낸드 플래시 메모리고밀도 낸드 플래시 메모리고밀도 낸드 플래시 메모리고밀도 낸드 플래시 메모리

- Cost effective solutions for mass storage applications

낸드 인터페이스낸드 인터페이스낸드 인터페이스낸드 인터페이스

- x8 or x16 bus width

- Multiplexed address/ Data

- Pinout compatibility for all densities

제공 전압제공 전압제공 전압제공 전압

- 3.3V device : VCC = 2.7V to 3.6 V : HY27UTxx4G2M

메모리 셀 어레이메모리 셀 어레이메모리 셀 어레이메모리 셀 어레이

- (2K + 64) bytes x 128 pages x 2048 blocks

- (1K + 32) words x 128 pages x 2048 blocks

페이지 크기페이지 크기페이지 크기페이지 크기

- x8 device : (2048+64 spare) bytes : HY27UT084G2M

- x16 device : (1024+32 spare) words : HY27UT164G2M

블럭 크기블럭 크기블럭 크기블럭 크기

- x8 device : (256K+8K) bytes

- x16 device : (128K+4K) words

페이지 읽기 프로그램페이지 읽기 프로그램페이지 읽기 프로그램페이지 읽기 프로그램////

- Random access: 50us (Max)

- Sequentiall access: 50ns (Min)

- Page program time: 800us (Typ)

캐시 프로그램 원래 스펙에는 들어 있으나 칩 내부의 버그로 실제 제품에캐시 프로그램 원래 스펙에는 들어 있으나 칩 내부의 버그로 실제 제품에캐시 프로그램 원래 스펙에는 들어 있으나 칩 내부의 버그로 실제 제품에캐시 프로그램 원래 스펙에는 들어 있으나 칩 내부의 버그로 실제 제품에( NAND( NAND( NAND( NAND

는 기능을 삭제하여 출시되었다 그러므로 기록 속도 향상에 부정적인 영향을 줄는 기능을 삭제하여 출시되었다 그러므로 기록 속도 향상에 부정적인 영향을 줄는 기능을 삭제하여 출시되었다 그러므로 기록 속도 향상에 부정적인 영향을 줄는 기능을 삭제하여 출시되었다 그러므로 기록 속도 향상에 부정적인 영향을 줄....

수 밖에 없게 되었다수 밖에 없게 되었다수 밖에 없게 되었다수 밖에 없게 되었다.).).).)

- Double (2048+64) Byte buffer and controls allow managing pipelined data load

- 31 -

and programming operations

고속 블럭 소거고속 블럭 소거고속 블럭 소거고속 블럭 소거

- Block erase time: 2ms (Typ)

상태 레지스터상태 레지스터상태 레지스터상태 레지스터

전자적 표기전자적 표기전자적 표기전자적 표기

- 1st code: Manufacturer Code

- 2nd code: Device Code

- 3th code: Internal chip number, Cell Type, Number of Simultaneously

Programmed Pages.

- 4th code: Page size, Block size, Organization, Spare size

칩 인에이블 무시기능칩 인에이블 무시기능칩 인에이블 무시기능칩 인에이블 무시기능

-Simple interface with microcontroller

하드웨어 데이터 보호하드웨어 데이터 보호하드웨어 데이터 보호하드웨어 데이터 보호

-Program/Erase locked during Power transitions.

전원들어옴과 동시에 자동 페이지 읽기 선택가능전원들어옴과 동시에 자동 페이지 읽기 선택가능전원들어옴과 동시에 자동 페이지 읽기 선택가능전원들어옴과 동시에 자동 페이지 읽기 선택가능0000

-Boot from NAND support

-Automatic Memory Download

시리얼 넘버 선택 가능시리얼 넘버 선택 가능시리얼 넘버 선택 가능시리얼 넘버 선택 가능

데이터 보존데이터 보존데이터 보존데이터 보존

-10000 Program / Erase cycles

-10 Years Data Retention

패키지패키지패키지패키지

- HY27UT(08/16)4G2M-T(P) : 48-pin TSOP1(12 x 20 x 1.2 mm)

---- HY27UT(08/16)4G2M-T (Lead)

----HY27UT(08/16)4G2M-TP (Lead Free)

- 32 -

나 특징.

여기에전제된특징및기타자료는하이닉스에서공식적으로 발표한자료가아니며

이해를 돕기위해서 임의로 해석한 사항이며 실제 제품과 다를 수 있음을 전제한다, .

현재 플래시메모리는특허전쟁에휘말려있는민감한제품임을상기하고양NAND

해 바란다.

는 에 용량을갖는구조이다 이소자는HY27UTxx4G2M 512Mx8bit 16Mx8bit . 3.3V

전원으로제공되며 셀 은가장저가의고체상태대량저장장치Vcc , MLC NAND (cell)

의 솔루션을제공한다 이메모리는독립적으로소거가능한블럭으로나누어지게되.

고 소거할데이터가 지워질 때 소거하지 않을정당한 데이터는 유지되도록처리 된, ,

다 이소자는총 블럭을가지고있으며 각블럭은 개의페이지로나뉘어진. 2048 , 128

다 각 페이지는 의구조를 갖는다. 2048+64 Byte .

각셀은 를갖는다 짝수페이지는셀의 가저장되2bit . (2-bit Multi Level Cell) LSB

며 홀수 페이지는 셀의 가 저장된다, MSB .

프로그램오퍼레이션은 에 구조인한페이지를기록할수있다800us 2048+64Byte .

소거오퍼레이션은 블럭을 에수행될수있다 페이지에서의데이터256KByte 2.5ms .

는 바이트당 에 읽을 수 있다 핀은 어드레스와 데이터입출력 뿐만 아니라60ns . I/O

커맨드 를 처리할 수 있다 이 인터페이스는 핀 카운트를 줄이고 용량이(Command) .

변하더라도 커맨드 데이터 어드레스등의 핀 변경 없이 쉽게 대응할 수 있도록, , PCB

한다 커맨드 데이터와어드레스는동시에 핀을사용해서동. , CE#, WE#, ALE, CLE

기되어 진다 칩 내부에 존재하는 프로그램 소거 제어기는 모든 프로그램과 소거 기. /

능에 필요한 반복펄스 내부 검증과 데이터의 안정한 전송등을 관장한다, .

모디파이 오퍼레이션은입력핀 를사용해락 을걸수있다 출력(modify) WP# (Lock) .

핀 오픈 드레인 버퍼 신호는 각 오퍼레이션에서 디바이스의 상태를 표시한다RB# ( ) .

특히 다수개의 플래시가사용되는시스템응용에서 핀은한번에모두연, NAND RB#

결하여 전체 상태 신호를 파악 할 수 있다.

쓰기조건이필요한시스템에서도 은 회의확장된신HY27(U/S)Txx4G2M 10,000

뢰성을 제공한다.

이칩은 를사용하지않을수있는기능을제공한다 이것은선택사항으로마이CE# .

크로컨트롤러에의해서 플래시메모리 소자로부터 수행코드를 직접 다운로드NAND

할 때 사용하며 이 때 의 변화는 읽기 오퍼레이션을 정지시키기 않는다, , CE# .

캐시프로그램은플래시어레이에데이터레지스터가복사되는동안캐시레지스터

에데이터를넣는것을가능하게하는것이나 플래시내부에존재하는컨트롤, NAND

러의한계로 인하여 사용할수 없다 이 기능은추후에 업그레이드 될사항으로 기록.

속도향상에 큰 도움을 주는 기능이다.

- 33 -

파이프라인 프로그램 오퍼레이션은 긴 파일이 메모리 내부에 씌여질 때 전체 프로,

그램 성능을 향상시키는 데 사용할 수 있지만 이 역시 플래시 내부에 존재하, NAND

는컨트롤러의 한계로 인하여사용할 수 없다 이 기능역시 추후에 업그레이드될 사.

항이다.

이 소자는 영역이 존재하며 전원작동시 자동 읽기 기능 및OTP/Unique ID , Read

확장 기능등 부가 가능을 가지고 있다ID2 .

는 패키지에서 사용가능하다HY27UTxx4G2M 48 - TSOP1 12 x 20 mm .

다 구조 및 핀 번호.

내부 구조는 어느 플래시와 동일한 구조를 갖고 있다NAND .

의 내부 구조HY27UTxx4G2M

의 구조는 실제 페이지 블럭4096 Mbit + 128Mbit (2K + 64)Byte x 128 x 2048

으로 구성된다 즉 개개의 페이지는 구조를 가지고 있고 개의. , (2K + 64)Byte , 1

블럭이 개의 페이지로 구성된다 총 페이지로 구성되고 있는 것이다128 . 262144 .

핀 레이아웃

- 34 -

각 핀의 기능은 다음과 같다 기준. (x8 )

이 핀들의 기능을 좀 더 자세히 살펴보자.

IO7 - IO0 Data Input / Outputs

CLE Command latch enable

ALE Address latch enable

CE# Chip Enable

RE# Read Enable

WE# Write Enable

WP# Write Protect

RB# Ready / Busy

Vcc Power Supply

Vss Ground

NC No Connection

PRE Power-On Read Enable

- 35 -

이 핀들의 기능은 다음과 같다 서두에서 설명한 것 처럼 의 간단한. , IO0~IO7

포트를 통해서 어드레스와 데이터 그리고 커맨드를 처리할 수 있고 메모리 용량

에 관계없이 레이아웃을 그대로 유지할 수 있다는 점이 과 다른PCB DRAM

플래시 메모리 핀의 특징이다NAND .

이 디바이스에서의 어드레스 관리는 다음과 같다.

Pin Name Description

IO0-IO7

DATA INPUTS/OUTPUTS The IO pins allow to input command, address and data and to output data

during read / program operations. The inputs are latched on the rising edge of Write Enable (WE#).

The I/O buffer float to High-Z when the device is deselected or the outputs are disabled.

CLECOMMANDLATCHENABLE This input activates the latching of the IO inputs inside the Command

Register on the Rising edge of Write Enable (WE#).

ALEADDRESS LATCH ENABLE This input activates the latching of the IO inputs inside the Address Register

on the Rising edge of Write Enable (WE#).

CE#CHIPENABLE This input controls the selection of the device. When the device is busy CE# low does not

deselect the memory.

WE#WRITE ENABLE This input acts as clock to latch Command, Address and Data. The IO inputs are

latched on the rise edge of WE#.

RE#

READ ENABLE The RE# input is the serial data-out control, and when active drives the data onto the

I/O bus. Data is valid tREA after the falling edge of RE# which also increments the internal column

address counter by one.

WP#WRITE PROTECT The WP# pin, when Low, provides an Hardware protection against undesired modify

(program / erase) operations.

RB# READYBUSY The Ready/Busy output is an Open Drain pin that signals the state of the memory.

VCC SUPPLY VOLTAGE The VCC supplies the power for all the operations (Read, Write, Erase).

VSS GROUND

NC NO CONNECTION

PRE

To Enable and disable Power On Auto Read. When PRE is a logic high, Power-On Auto-Read mode are

enabled, and when PRE is a logic low, Power-On Auto-Read mode are disabled. Power-On Auto-Read

mode is available only on 3.3V device. Not using POWER-ONAUTO-READ, connect it Vss or leave it N.C

- 36 -

총 개의 사이클이 필요로 하며 로 표기된 것은 무조건 로 설정 되어야5 L Low

한다.

플래시 메모리에 수행할 오퍼레이션을 지정하는 커맨드는 다음과 같다NAND .

실제 값이 까지 전달되어 해당 오퍼레이션을 수행하게 된다I/O0~I/O7 .

커맨드 입력은 다음 그림과 같다.

커맨드 입력 버스 오퍼레이션은 메모리 소자에 명령을 주는데 사용한다 커맨드.

는 칩인에이블이 커맨드 래치 인에이블이 어드레스 래치 인에이블Low, High,

이 그리고 리드 인에이블이 그리고 라이트 인에이블의 라이징Low (Read) High

엣지 일 때 수락된다 커맨드 코드는 항상 에서 수행된다(Rising Edge) . IO7:0 .

IO0 IO1 IO2 IO3 IO4 IO5 IO6 IO7

1st Cycle A0 A1 A2 A3 A4 A5 A6 A7

2nd Cycle A8 A9 A10 A11 L(1) L(1) L(1) L(1)

3rdCycle A12 A13 A14 A15 A16 A17 A18 A194th Cycle A20 A21 A22 A23 A24 A25 A26 A27

5th Cycle A28 A29 L(1) L(1) L(1) L(1) L(1) L(1)

FUNCTION 1st CYCLE 2nd CYCLE 3rd CYCLEAcceptable command

during busy

READ 1 00h 30h -

READ ID 90h - -

RESET FFh - - YesPAGE PROGRAM(start) 80h 10h -

CACHE PROGRAM 80h 15h -

BLOCKERASE 60h D0h -

READ STATUS REGISTER 70h - - YesRANDOMDATA INPUT 85h - -

RANDOMDATAOUTPUT 05h E0h -

- 37 -

커맨드 래치 사이클

어드레스 입력은 다음 그림과 같다.

어드레스 입력 버스 오퍼레이션은 메모리 어드레스의 입력을 허가한다 어드. 29

레스를 입력하기 위해서는 를 처리할 필요가 있고 클럭사이클이 필요하4Gbit 5

다 어드레스는 칩인에이블 어드레스 래치 인에이블 커맨드 래치 인. Low, High,

에이블 리드 인에이블 라이트 인이에블 라이징 엣지에서 래치된다Low, High, .

커멘드 에 대해서 모디파이 오퍼레이션 을 시작하는 것에 대해서(Write/Erase) ,

기록 보호핀은 반드시 로 되어 있어야 한다 어드레스는 항상 에High . IO7:0

수행되어야 한다.

- 38 -

어드레스 래치 사이클

데이터 입력은 다음 그림과 같다.

데이터 입력 버스 오퍼레이션은 프로그램 되어질 디바이스에 데이터 전달은 수

행한다 데이터 삽입은 라이트 인이에블 사이클에 하나씩 수행된다 칩인에이블. .

이 어드레스 래치 인이에블이 커맨드 래치 인에이블이 리드Low, Low, Low,

인에이블이 쓰기보호 핀이 라이트 인에이블의 라이징 엣지일 때 데High, High,

이터는 수락된다 내부적으로 어드레스 카운터가 존재해서 이전에 설정된 어드.

레스에 의해 한번 라이트가 인에이블 될 때 마다 하나씩 어드레스가 증가함을

잊어서는 안된다.

데이터 입력 래치 사이클

- 39 -

데이터 출력은 다음 그림과 같다.

데이터 출력 버스 오퍼레이션은 메모리 어레이로부터 데이터를 가져오고(Read

를 수행 상태 레지스터의 내용을 체크하고 데이터를 체크하는 기능을 수행) , ID

한다 칩인에이블이 라이트 인에이블 어드레스 래치 커맨드. Low, High, Low,

래치 인에이블 인 상태에서 리드 인이에블의 토클링으로 하나씩 데이터가Low

나오게 된다 중요한 점은 핀이 로 떨어진 후에 데이터가 튀어 나오. RE# Low

게 되는데 최근 플래시 메모리의 고속화 경향에 따라 이 기능이 이슈, NAND 

가 되고 있다 보다 빠르게 액세스 되기 위해서는 에서 사용하는 기. DRAM EDO

능이 요구되고 있으나 디바이스에 따라 를 지원하는 것과 지원하지 않는것, EDO

이 있으므로 이는 주의해야 한다 현재 본 디바이스는 모드를 지원하지 않. EDO

지만 향후에는 가 지원될 것으로 예상된다 는 보다 빠른 액세스가, EDO . EDO

가능하지만 타이밍 설계가 복잡해 지는 단점이 있다 게다가 연속된 데이터에, .

의해 타이밍을 잘못 맞출 경우에는 오류가 발생할 수 있으므로 특별히 주의해야

한다.

리드후 시퀀셜 출력 사이클 (CLE = L, WE#=H, ALE = L)

- 40 -

다음 그림이 의 액세스 방법이다 이 표준 액세스 방법에 비해EDO Type . Dout

밀려서 액세스 되는 방법이다 워낙 고속으로 데이터를 출력해주기 때문에 이러.

한 파형으로 처리되는 것 같다 본 디바이스는 을 권장하지 않는. ( EDO type

다.)

리드후 시퀀셜 출력 사이클(EDO Type CLE=L, WE#=H, ALE=L)

페이지 리드

디바이스 전원이 인가됨에 따라 디바이스는 기본적으로 리드 모드로 들어간다, .

이 오퍼레이션은 또한 개의 어드레스 사이클에 따라 명령 레지스터에 와5 00h

를 기록하는 것으로 초기화 된다 두 개의 중요한 리드 오퍼레이션에서 개30h . , 5

의 어드레스 사이클과 로 동작을 초기화 하는데 따르는 두 번재 리드 오퍼30h

레이션은 명령이 필요하지 않는다 두종류의 오퍼레이션은 랜덤리드00h .

와 시리얼 페이지 리드 이다 랜덤 리드 모드는(random reada) (serial page read) .

페이지 어드레스가 변할 때 인에이블 된다 선택된 페이지 내의 의 데. 2112Byte

이터는 안에 데이터 레이스터로 전송된다 시스템 컨트롤러는 핀의50us . R/B

출력을 분석해서 이 데이터 전송의 수행 완료를 파악해도 좋다 한번 페이50us .

지에 데이터가 데이터레지스터로 적재되기만 하면 순서적으로 펄스에 의, RE#

해 사이클의 읽어내는것이 가능하다 클럭의 토클링은 선택된 컬럼50ns . RE#

어드레스에서 최종 컬럼 어드레스까지의 데이터 출력을 할 수 있게 만(column)

든다.

디바이스는 랜덤 데이터 출력 명령을 사용해서 순서적으로 데이터를 가져오는

대신에 페이지에서 데이터를 랜덤으로 출력할 수 있다.

앞으로 나올 다음 데이터의 컬럼 어드레스는 랜덤 데이터 출력 명령에 따라 어

드레스가 바뀔 수 있다.

- 41 -

랜덤 데이터 출력은 페이지에서 몇 번을 읽었는지와 관계없이 여러번 수행할 수

있다.

오퍼레이션Read1 (Read One Page)

랜덤 데이터 출력

- 42 -

페이지 프로그램

디바이스는 기본적으로 페이지 단위로 프로그램된다 동일 페이지 내에서의 연.

속된 부분페이지 프로그램 오퍼레이션의 수는 소거 오퍼레이션의 끼어들기 없이

번을 넘지 않아야 한다2 .

어드레싱은 블록내에서 순서적으로 진행되도로고 한다 바이트까지 연속. 2112

된 데이터 적재로 구성되는 페이지 프로그램 사이클은 데이터를 데이터레지스터

로 적재될 수 있으며 이 대 적재된 데이터는 해당 셀에 프로그램 되어진다, , .

연속된 데이터 적재주기는 시리얼 데이터 입력 명령 삽입에 의해 시작된(80h)

다 이때 개의 어드레스 입력과 그다음의 데이터 열로 표현된다. , 5 .

디바이스는 페이지 내에서 랜덤 데이터 입력을 제공한다 다음 데이터의 컬럼.

어드레스는 다음 수행되는 랜덤 데이터 입력 명령 의 어드레스 변경이 가(85h)

능하다 랜덤 데이터 입력은 페이지에서 몇변 수행되는것에 관계없이 여러번 수.

행되어져도 좋다.

페이지 프로그램은 확인 명령 로 프로그래밍 처리(Confirm Command : 10h)

를 시작한다 이전에 연속된 데이터를 입력하는 것 없이 를 기록하면 프로. 10h ,

그래밍 처리가 시작되지 않는다.

내부 기록 상태 제어기 는 프로그램과 검증 에 대(write state controller) (verify)

해서 필요한 타이밍과 알고리즘을 자동적으로 수행한다 이것으로 시스템 제어.

기가 다양한 태스크에 대해 자유롭게 된다 한번 프로그램 처리가 시작되면 리. ,

드 상태 레지스터 명령은 상태 레지스터를 읽기위한 모드로(read status register)

들어간다.

시스템 컨트롤러는 출력 또는 상태 레지스터 의 상태 비트RB# (status bit:

을 모니터링하는 것으로 프로그램 사이클의 완료를 검출할 수 있다 페이I/O6) .

지 프로그램이 완료되면 라이트 상태 비트 을 체크해도, (Write Status bit : I/O0)

된다.

내부 기록 검증회로는 이 이면 오류가 발생한 것이고 이면 성공적으(I/O0) 1 , 0

로 프로그램된 것을 나타낸다 리드 스테이터스 명령 은. (Read Status Command)

다른 타당한 명령이 커맨드 레지스터에 씌여질 때 까지 그 상태를 유지한다.

- 43 -

랜덤 데이터 입력 프로그램 오퍼레이션( )

블록 소거

소거 오퍼레이션은 기본적으로 블록 단위로 이루어 진다 블록 어드레스 적재는.

소거 셋업 명령 에 의해 두사이클 내에서 시작된다 오직 어드레스(60h) .

까지만 타당하며 은 무시된다A19~A29 , A12~A18 .

블록 어드레스 적재 후의 소거 확인 명령 는 내부 소거 처리를 시작하게 한(D0h)

다 이 두가지 단계는 외부 노이즈 환경에 따르는 원하지 않는 데이터 손실을.

막는 데 사용한다.

소거 확인 명령 입력후 라이징 엣지 후에 내부 컨트롤러는 소거와 소거검WE#

증을 처리한다.

소거 처리가 시작되면 리드 스테이터스 레지스터 명령이 스테이터스 레지스,

터를 읽어도 좋은 상태가 되며 시스템 컨트롤러는 출력 또는 스테이터스, RB#

레지스터 비트를 모니터링하는 것으로 소거의 완료를 검출할 수 있다(I/O6) .

리드 스테이터스 명령과 리셋 명령에 의해서만 소거 동작이 처리되는 동안 인

정된다 소거 오퍼레이션이 끝나면 라이트 스테이터스 비트 을 체크해도. , (I/O0)

좋다.

- 44 -

블록 소거 오퍼레이션 (Erase One Block)

리드 스테이터스 레지스터

스테이터스는 리드 라이트 소거 오퍼레이션이 수행되는 여부를 확인 할 때 사, ,

용하며 그 타이밍은 다음 그림과 같다.

스테이터스 리드 사이클

- 45 -

리드 ID

디바이스가 가지는 제품의 정보는 명령 다음에 를 주는 것으로 처리된90h 00h

다 다음 파형에서 보다시피 가 출력된다. , ADh DCh 84h, 25h .

는 하이닉스의 플래시 메모리를 의미한다ADh NAND .

리드 오퍼레이션ID

배드 블록 매니지먼트(Bad Block Management)

배드 블록을 가진 디바이스는 모든 블록이 정상인 디바이스와 동일한 특성AC

과 특성을 갖는다 배드 블록은 선택 트랜지스터의 비트라인과 커몬 소스DC .

라인 의 분리에 의해 정상인 블록의 성능에 영향을 주지(common source line)

않는다 디바이스는 정상적으로 소거된 블록 내의 모든 위치를 제공한다 어. (FFh) (

드레싱 가능하다).

배드 블록 정보는 제품 선적시 기재되며 최종 페이지 스패어 영역의 첫 번째,

바이트가 가 아닌 값을 가지면 배드 블록이다 최종 페이지그 배드이면 최FFh . (

종 페이지-2 )

배드 블록 정보는 배드 정보가 지워질 지 모르는 소거 동작 전에 반드시 읽어져

야 한다 원래의 배드 블록 정보에 기인한 배드 블록을 인지할 수 있도록 시스.

템에 대해서는 다음과 같은 플로우차트를 권장한다.

첫 번째 블록이 놓여지는 블록어드레스 는 정상적 블록임을 보증하고 있다00h .

- 46 -

배드 블록 메니지먼트 프로우 차트

- 47 -

제 절 기술개발의 사양2

인터페이스2. ATA

가 개요.

는 가장 일반화된저장장치의 하나로 컴퓨터 시스템의발달과 함께눈부신 발HDD ,

전을이뤘다 과같은광학저장장치도 보다는상대적으로역사가짧. DVD-ROM HDD

지만이미범용적인장치가된지오래이다 응용프로그램에서는이와같은보조기억.

장치의 물리적인 실체를 모르더라도 파일 시스템에 의한 표준 파일 입출력을 이용해

자원을사용할수있도록되어있다 운영체제에서는이러한시스템공용자원에대한.

적절한시스템서비스를제공하는것이핵심적인부분의하나로서 특히이역할은디,

바이스드라이버와파일시스템에의해이루어진다 이들은응용프로그램에대한표.

준화된서비스의제공을위해하드웨어에관한세부적인사항은 그내부에감추고일

반적인 논리 체계를 구성하는 역할을 맡고 있다 이들 중 파일 시스템은 운영체제를.

공부할때의필수과정이므로논리적인체계에대한내용은이미많이알려져있는반

면디바이스드라이버또는그이하의하드웨어에근접한 수준의내용은그다지알려

져 있지 않는 편이다.

하드디스크제어를위한 규격에대해서ATA(Advanced Technology Attachment)

전반적인 내용을 살펴보자.

나 인터페이스의 역사. ATA

인터페이스는대략 년경에시작돼 등다양한HDD 1970 SMD, ST-506, ESDI, SCSI

방식을거쳐진화해왔다 는 년을전후해웨. IDE(Integrated Device Electronics) 1986

스턴디지털 컴팩 그리고 씨게이트의 전신인 의 세 회사가 제정한 인터페이스, , CDC

방식이다 당시 컴팩이 제조할 완제품 에 사용되는 하드디스크를 만들기 위해 각. PC

회사가 역할을 분담하는 형태였다 따라서 기술적인 완성도보다는 의 버스에. PC ISA

서동작되면서가격이상대적으로싼인터페이스구현이그목표였다고보면될것같

다 같은제어방식에서는 와디바이스사이에는별도의컨트롤러가있어서. SCSI CPU

는 이컨트롤러를통해디바이스를제어하게된다 그러나 에서는이방법대CPU . IDE

신컨트롤러기능을하드디스크드라이브자체에내장시킴으로써상대적으로간단한

인터페이스를구현할수있도록하였다 마찬가지로 의복잡한커맨드프로토콜. SCSI

이 아닌 간단한 커맨드 체계를 사용했다 대신 일부 기능의 희생이 불가피했는데. ,

- 48 -

가하나의버스에최대 대의드라이브를연결할수있는데반해 는케이블당SCSI 8 IDE

대로 제한될 수밖에 없었다 이런 의도에서 출발한 인터페이스는 에만 특화2 . IDE PC

된 단순한 형태였다 그러나 요즘 들어선 울트라 를 채용한 고속의 데이터 전송. DMA

능력과 가격 하락 등에 의한 장점을 갖춰 나가면서 다른 표준을 압도하고 있다 여기.

서그치지않고다른플랫폼에서도채용되는등세력을점점넓혀가고있는추세이다.

표준과 규격의 변화 는 와 함께 혼용됨으로써용어가 혼란을 주는경우ATA ATA IDE

가 많지만 근본적으로는같은 것이며 웨스턴디지털등이 를정리해서 에서, IDE ANSI

정식규격으로승인받은기술이다 라는명칭에서도알수있듯이초기의. ATA PC-AT

를타겟으로시작해 등으로계속확장 개정됐으며 현재 의표ATA-2, ATA-3 , ATA-7ㆍ

준화작업이진행중이다 표준화작업은. NCITS(National Committee on Information

기술위원회의 하나인 에서 진행하고 있다Technology Standards) T13 .

다 인터페이스의 구체. ATA

레지스터는 크게 컨트롤 블럭 레지스터군과 커맨드 블럭 레지스터군으로 나눠I/O

진다 레지스터를액세스하기 위해서 사용되는어드레스 신호는 다음표와 같이총. 5

개로 이뤄져 있다.

- 49 -

은각각컨트롤 블럭과커맨드블럭을선택하기 위해사용되고 에서/CS0, /CS1 , DA0

까지 선의 어드레스 신호로 각 레지스터를 지정하게 된다 의 경우 어드DA2 3 . PC I/O

레스 등으로각블럭의레지스터를지정하도록되어있다 각레지스터는읽3F6, 1F0 .

기나 쓰기동작에따라그기능이다르게정의되기도하는데 얼터네이트스테이터스,

레지스터나에러레지스터와같은경우가그러하다 대부분의레지스터의크기는 비. 8

트이지만 데이터 레지스터만 비트로 되어 있다 이는 의 전송 데이터 크기가16 . ATA

비트인것과관계가있다 하드디스크를제어하는데는전통적인 모드와함께16 . CHS

모드가선택적으로사용된다 는하드디스크의LBA(Linear Block Addressing) . CHS

구조와 직접 관련이 있는 실린더 헤드 섹터 번호를 지정해서 하드디스크의 특정 섹, ,

터를 지정하는 방법이다 그러나 모드는 하드디스크가 대용량이 되면서 지정하. CHS

는 실린더나 헤드의 번호가 실제 구조와는 아무런 상관이 없게 되어 더 이상 의미를

갖지못하므로 에서는삭제된상태이다 현재는대부분 모드로사용된다ATA-7 . LBA .

에서는총 비트의어드레스를하드디스크의섹터에순차적으로할당하여이를LBA 28

지정하는 방법이다.

각 어드레싱 모드에 따라 레지스터에 설정하는 값도 달라지도록 되어 있다.

이나 에서는 처음부터 모드만이 사용되었는데 명령 체계CD-ROM DVD-ROM LBA ,

또한 라는별도의방식을사용한다 에서는명령과파라미터값모두가ATAPI . ATAPI

데이터레지스터를통해패킷형태로전달되므로 나 같Sector Number Cylinder Low

은 어드레싱용 레지스터는 본래의 의미대로 사용하지 않는다 실제 하드웨어를 구성.

해 디바이스를제어하기위해선각레지스터를잘알아둘 필요가있으므로각레지스

터의비트구성과용법에대해자세히살펴보기로하겠다 레지스터의비트구성다음.

표와함께 정리했다.

- 50 -

데이터레지스터데이터레지스터 는 모드에서데이터전송시에사(data register) PIO

용되는레지스터로서호스트에서읽고쓰기가가능하다 다른모든레지스터가 비트. 8

인데반해데이터레지스터는 의버스폭인 비트의액세스가가능하도록 비트IDE 16 16

로되어있다 커맨드레지스터커맨드레지스터 는호스트에서드. (command register)

라이브로 명령을 내릴 때 사용되는 레지스터이다 명령은 비트의 코드로 되어 있고. 8

호스트측에서는필요한명령코드를이레지스터에기입하게된다 명령에따라서는.

여러파라미터가함께필요한경우가있는데 이경우다른레지스터에파라미터가함,

- 51 -

께 전달되어야 한다.

다음표에는 표준을기준으로한주요명령과함께파라미터의전달에사용되ATA-7

는 레지스터의 구성이 같이 정리되어 있다.

커맨드 레지스터는 쓰기 전용인데 같은 주소를 읽어내는 경우에는 스테이터스 레지

스터로동작하게된다 스테이터스레지스터스테이터스레지스터 는. (status register)

드라이브의 현재 동작 상태를 나타내는 레지스터로 하드디스크의 제어에서 중요한

위치를차지한다 스테이터스레지스터의 각비트값을통해현재의디바이스상태를.

알수있는데 에서는잘쓰이지않는몇개의비트정의가삭제되고총 개의비ATA7 4

트만 정의하고 있다 이전 표에 나타난 로 표시된 부분은 명령에 따라 다르게 사용. #

되는 비트를 나타낸다.

를 나타내며 이비트가 로되어 있는경우에는 현재 드라이브가명령BSY : Busy 1①

수행중이거나기타다른이유로 상태임을나타낸다 이상태에서드라이브의다Busy .

른 레지스터를 액세스하는 것은 무의미하며 동작을 계속 수행하기 위해서는 비BSY

트가 으로 복귀될 때까지 기다려야 한다 마찬가지로 일 때는 스테이터스 레0 . BSY=1

지스터의 다른 비트 값도 무시된다.

를 나타내는 비트이다DRDY : Drive Ready .②

를나타낸다 드라이브가명령을수행하여호스트로데이터를DRQ : Data Request .③

전송할 준비가 완료되어 쓸 때 셋팅된다.

비트로 명령 수행 중에 에러가 발생했음을 나타낸다ERR : Error④

각 명령에 대한 자세한 설명과 용법은 실제 표준 문서의 대부분을 차지하는 만큼 그

양이방대하므로여기서는모두설명할수는없고 또실제로이번실험에서사용하는,

명령은 서너개로 충분하므로 사용되는 부분만을 다룰 것이다 명령의 프로토콜은 데.

이터전송의동반 여부 또는 를 사용하느냐에따른분류 특정 명령어에따, DMA PIO ,

른 분류들로나눠진다 파라미터로사용되는레지스터의구성도함께정리되어있다. .

실행시데이터전송을 동반하지않는 명령군의프로토콜ND : Non-data command,

입력 전송만을 사용하는 명령군의 프로토콜PI : PIO data in command, PIO

출력 전송만을 사용하는 명령군의 프로토콜PO : PIO data out command, PIO

- 52 -

명령에서만 사용되는 프로토콜DR : Device Reset , Device Reset

명령에서만사용되는프DD : Execute Device Diagnostic, Execute Device Diagnostic

로토콜

디바이스용 명령 프로토콜P : Packet command, ATAPI

데이터 전송을 사용하는 명령군의 프로토콜DM : DMA command, DMA

데이터 전송을 사용하는 명령군의 프로토콜DMO : Overlapped/queded DMA

FR : Feature Register

SC : Sector Count Register

SN : Sector Number Register

CY : Cylinder High/Low Register

DH : Drive Head Register

- 53 -

나 규격상의 특징.

명령명령명령명령Ultra DMA data-outUltra DMA data-outUltra DMA data-outUltra DMA data-out

의 초기화의 초기화의 초기화의 초기화Ultra DMA data-out burstUltra DMA data-out burstUltra DMA data-out burstUltra DMA data-out burst

DMARQ(device)

DMACK-(host)

STOP(host)

DDMARDY-(device)

HSTROBE(host)

DD(15:0)(host)

DA0, DA1, DA2,CS0-, CS1-

tUI

tACK tENV

tZIORDY tLI

tDZFS

tDVH

tACK

tACK

tUI

NOTES −1 See 9.14.1 Initiating an Ultra DMA data out burst.2 The definitions for the STOP, DDMARDY, and HSTROBE signal lines are not in effect

until DMARQ and DMACK are asserted.

tDVS

다음 단계가 순서대로 일어나도록 한다.

a) 호스트는 가 초기화되기전에 를니게이트상태Ultra DMA burst DMACK-

로 유지한다.

b) 디바이스는 가 니게이트일때 를 초기화하기 위DMACK- , Ultra DMA burst

하여 를 애서트 한다DMARQ .

c) 단계 는 동시에 또는 어떤 순서로 진행되어도 좋다 호스트는(c), (d), (e) .

를 애서트 한다STOP .

d) 호스트는 를 애서트 한다HSTROBE .

e) 호스트는 를 니게이트로한다 호스트는CS0-, CS1-, DA2, DA1, DA0 . burst

의끝에 를 니게이트를 한후까지는 계속 를DMACK- CS0-, CS1-, DA2, DA1, DA0

니게이트로 유지한다.

- 54 -

f) 단계 는호스트가 를 애서트하기 전 최소(c), (d), (e) DMACK- tACK전에처

리해야한다 호스트는 의 끝까지 를 애서트하여유지. Ultra DMA burst DMACK-

해야 한다.

g) 디바이스는호스트가 를 애서트 한후DMACK- tZIORDY에 를DDMARDY-

니게이트로 해도 좋다 디바이스가 를 일단 니게이트로 하면 디바이스. DDMARDY- ,

는 호스트가 의 끝에 를 니게이트 한 직후까지는Ultra DMA burst DMACK-

를 풀어주어서는 안 된다DDMARDY- .

h) 호스트는 가 애서트된후DMACK- tENV이내에 를 니게이트한다 호스STOP .

트는 의첫번째 니게이션 후까지는 를 애서트하지않도록한다HSTROBE STOP .

i) 디바이스는 호스트가 을 니게이트한 직후STOP tLI이내에 를DDMARDY-

애서트한다 와 가 애서트된후에디바이스는 호스트에의DMARQ DDMARDY- ,

해 의첫번째 니게이트가일어난후까지는 두신호를 니게이트해서는HSTROBE

안 된다.

j) 호스트는데이터전송의첫워드를 위에드라이브한다 이단계는DD(15:0) .

초기화의 어느 단계에서 일어나도 된다Ultra DMA burst .

k) 데이터의첫번째워드를전송하기위하여디바이스가 를애서트DDMARDY-

한 직후에 호스트는 디바이스 tUI보다 길지 않은 시간에 를 니게이트 한HSTROBE

다 호스트는데이터의 첫번째워드를 위에 드라이브한후. DD(15:0) tDVS보다길지

않은 시간 내에 를 니게이트 하도록 한다HSTROBE .

전송전송전송전송The data-outThe data-outThe data-outThe data-out

tDHtDHIC

tDVHtDVHIC

HSTROBEat host

DD(15:0)at host

HSTROBEat device

DD(15:0)at device

tCYC tCYC

tDVStDVSIC

tDStDSIC

t2CYC

t2CYC

NOTES −1 See 9.14.2 The data out transfer.2 DD(15:0) and HSTROBE signals are shown at both the device and the host to emphasize that

cable settling time as well as cable propagation delay shall not allow the data signals to beconsidered stable at the device until some time after they are driven by the host.

tDVHtDVHIC

tDVHtDVHICtDVS

tDVSIC

tDHtDHIC

tDHtDHIC

tDStDSIC

- 55 -

다음 단계는 지정된 순서로 일어나야 한다.

a) 호스트는 데이터 워드를 상에 드라이브 한다DD(15:0) .

b) 호스트는 의 상태가 변한후DD(15:0) tDVS 보다짧은시간내에새로운워드.

를래치하기 엣지를발생시키도록한다 호스트는선택된 모HSTROBE . Ultra DMA

드에 대한 tCYC 보다도 높지않은주파수로 엣지를 발생시키도록한다HSTROBE .

호스트는 선택된 모드에 대한Ultra DMA t2CYC 보다도 높은 주파수로 두 개의

또는 엣지를 발생시켜서는 안 된다rising falling HSTROBE .

c) 호스트는데이터를래치하기위한 엣지를 발생시킨후 최소HSTROBE tDVH

까지는 의 상태를 변경해서는 안 된다DD(15:0) .

d) 가 디바이스 또는 호스트에 의한 일시정지 또는 종료될Ultra DMA burst

때 까지는 순서를 반복 한다(a), (b), (c) .

의 일시정지의 일시정지의 일시정지의 일시정지Ultra DMA data-out burstUltra DMA data-out burstUltra DMA data-out burstUltra DMA data-out burst

다음 단계는 지정된 순서로 일어나야 한다.

측의 일시정지Host Ultra DMA data-out burst

호스트는 최소한 한 개 데이터 워드의 전송이 될 때까지는 일시a) Ultra DMA burst

정지 해서는 안 된다.

호스트는 엣지를발생하지않는것으로 를 일시정지b) HSTROBE Ultra DMA burst

한다 만약 호스트가 를 종료할 준비가 되어있다면. Ultra DMA burst Ultra DMA

항을 참고하라data-out burst 0 .

호스트는 엣지를 발생하는 것으로 를 재개한다c) HSTROBE Ultra DMA burst .

측의 일시정지Device Ultra DMA data-out burst

- 56 -

DMARQ(device)

DMACK-(host)

STOP(host)

DDMARDY-(device)

HSTROBE(host)

DD(15:0)(host)

tRFS

tRP

NOTES − 1 See 9.14.3.2 Device pausing an Ultra DMA data out burst. 2 The device may negate DMARQ to request termination of the Ultra DMA burst no sooner

than tRP after DDMARDY- is negated. 3 After negating DDMARDY-, the device may receive zero, one, two, or three more data

words from the host.

a) 디바이스는최소한한개데이터워드의 전송이될때까지는Ultra DMA burst

일시정지 해서는 안 된다.

b) 디바이스는 를 니게이트하는것으로 를일DDMARDY- Ultra DMA burst

시정지 한다.

c) 호스트는 디바이스가 를 니게이트한DDMARDY- tRFS 이내에 HSTROBE

엣지를 정지해야 한다.

d) 모드 에서동작하고있을때 디바이스는Ultra DMA 2, 1, or 0 , DDMARDY-

가 니게이트된후 영 하나 둘 에서는영 하나만표기됨 의 추가적인, , ( *** ATAPI-5 , )

데이터워드를 수신하도록준비되어져야한다 모드 에서 동. Ultra DMA 6, 5, 4 or 3

작하고있을때 디바이스는 가니게이트된후 영 하나 둘 셋의추가, DDMARDY- , , ,

적인데이터워드를 수신하도록준비되어져야한다 와동일 추가적인.(*** ATAPI-5 )

데이터 워드는 케이블 라운드 트립 실수 방해 지연과 호스트에 대한 를 위한( , ) ( ) tRFS

타이밍의 결과이다.

e) 디바이스는 를 애서트하는것으로 를재개한DDMARDY- Ultra DMA burst

다.

의 종료의 종료의 종료의 종료Ultra DMA data-out burstUltra DMA data-out burstUltra DMA data-out burstUltra DMA data-out burst

호스트의 종료Ultra DMA data-out burst

- 57 -

DMARQ(device)

DMACK-(host)

STOP(host)

DDMARDY-(device)

HSTROBE(host)

DD(15:0)(host)

DA0, DA1, DA2,CS0-, CS1-

tACK

tLI

tMLI

tCVS

tLI

tLI

tACK

tIORDYZ

tACK

CRC

tCVH

tSS

NOTES −1 See 9.14.4.1 Host terminating an Ultra DMA data out burst.2 The definitions for the STOP, DDMARDY, and HSTROBE signal lines are no longer in

effect after DMARQ and DMACK are negated.

다음 단계는 지정된 순서로 일어나야 한다.

a) 호스트는 추가적인 엣지를 발생하지 않는 것으로HSTROBE Ultra DMA

의 종료를 초기화 한다burst .

b) 호스트는마지막 엣지를발생한후HSTROBE tSS후보다빠르지않게 STOP

을애서트한다 호스트는 가종료된후까지다시 을 니게이트. Ultra DMA burst STOP

하지 않도록 한다.

c) 디바이스는 호스트가 을 애서트한 후STOP tLI 이내에 를 애서트 한DMARQ

다 디바이스는 가종료된후까지 다시 가애서트되지않. Ultra DMA burst DMARQ

도록 한다.

d) 디바이스는호스트가 을니게이트한직후STOP tLI이내에 를니DDMARDY-

게이트한다 디바이스는 종료가 완전히 끝난후 까지는 재차. Ultra DMA burst

를 애서트 해서는 안된다DDMARDY- .

e) 만약 가니게이트되면 호스트는디바이스가 를니게이트HSTROBE , DMARQ

한직후 tLI내에 를애서트한다 이애서트에서는데이터가전송되지않도HSTROBE .

- 58 -

록한다 디바이스는 상의이변화 를무시한다 는. HSTORBE (transition) . HSTROBE

가 종료될 때까지 애서트 상태로 놓아둔다Ultra DMA burst

f) 호스트는 상에 호스트 계산결과를 앉힌다DD(15:0) CRC .

g) 호스트는 호스트가 와 을 애서트한 후 그리고 디바이스가HSTROBE STOP ,

와 를애서트한 후DMARQ DDMARDY- tMLI 이후에 그리고 상의 호스트, DD(15:0)

계산 결과가 앉혀진 후CRC tDVS 이후에 를 애서트 한다DMACK- .

h) 디바이스는 의 니게이트엣지 상태에 에서 호스트DMACK- DD(15:0) CRC

데이터를 래치한다.

i) 디바이스는 디바이스의 계산과 호스트로부터 수신된 데이터를 비CRC CRC

교한다 만약어떤하나의명령에대한하나또는그이상의 동안에. Ultra DMA burst

잘못된 비교오류가 발생하면 명령의끝에서 디바이스는 첫 번째에러가 발생하였,

음을 리포트 한다.

j) 디바이스는호스트가 를 니게이트한후DMACK- tIORDYZ내에 DDMARDY-

를 풀어준다.

k) 호스트는 가 니게이트한후 최소한DMACK- tACK까지는 STOP, HSTROBE

둘 다를 니게이트하지 않는다.

l) 호스트는 가 니게이트한 후 최소한DMACK- tACK 까지는 DIOW-, CS0-,

을 애서트 하지 않는다CS1-, DA2, DA1, DA0 .

연산CRC

연산은 다음 그림과 같은 구조를 갖는다CRC .

Combinational Logic

Edge Triggered Register Device

CRCOUT (15:0) CRCIN (15:0:) DD(15:0)

f1-f16

Word Clock

발생함수는CRC : G(X) = X16 + X12 + X5 + 1

- 59 -

구현 방법CRC

- 60 -

핀과 제공되는 신호I/O ATA

- 61 -

- 62 -

파워온 후의 응답

마스터디바이스 은파워온상태가풀어진후 마스터디바이스는슬레이브디(device0) ,

바이스 의존재를확인하기위해 까지 신호를검사한다 마스(device 1) 450ms DASP- .

터 디바이스는 신호의애서트를확인할때 슬레이브디바이스의존재를인식DASP- ,

한다 다음 마스터디바이스는슬레이브디바이스가파워온진단을성공적으로마쳤. ,

는지의 여부를 보기 위해 신호를 검사한다PDIAG- .

만약 마스터디바이스가 이내에 신호의애서트를확인할수없으면 마, 450ms DASP- ,

스터 디바이스는 슬레이브 디바이스가 연결되지 않았다고 인식한다.

슬레이브디바이스 는 파워온상태가 풀어진 후 슬레이브디바이스는 아래(device1) ,

와 같은사항을마스터디바이스에게파워온진단의 결과와슬레이브디바이스의존

재를 보고한다.

신호 이내에 애서트DASP- :400 ms

신호 동안 니게이트하고 초 동안 애서트PDIAG- : 1ms 30

- 63 -

하드웨어 리셋에 대한 응답

인터페이스를통한하드웨어리셋 에대한응답은파워온리셋과유사하다RESET- ( ) .

하드웨어 리셋의 수신 하에 마스터 디바이스는 슬레이브 디바이스의 존재를 확인하,

기위해 까지 신호를검사한다 마스터디바이스는 신호의애서450ms DASP- . DASP-

트를 확인할 때 슬레이브 디바이스의 존재를 인식한다 다음 마스터 디바이스는 슬, . ,

레이브디바이스가파워온진단을성공적으로마쳤는지의여부를보기위해 PDIAG-

신호를 검사한다.

만약 마스터디바이스가 이내에 신호의애서트를확인할수없으면 마, 450ms DASP- ,

스터 디바이스는 슬레이브 디바이스가 연결되지 않았다고 인식한다.

슬레이브디바이스 는하드웨어리셋을수신한후 슬레이브디바이스는아(device1) ,

래와 같은사항을마스터디바이스에게하드웨어리셋의 진단의결과와슬레이브디

바이스의 존재를 보고한다.

신호 이내에 애서트DASP- :400 ms

신호 동안 니게이트하고 초 동안 애서트PDIAG- : 1ms 30

- 64 -

소프트웨어 리셋에 대한 응답

마스터디바이스는소프트웨어리셋에대한 신호를검사하지않는다 만약슬DASP- .

레이브 디바이스가 존재하면 마스터 디바이스는 슬레이브 디바이스가 자체 진단을,

성공적으로마쳤는지의여부를보기위해 초동안 신호를검사한다 슬레이15 PDIAG- .

브 디바이스가소프트웨어리셋을수신한후 슬레이브디바이스는아래와같은사항,

을 마스터 디바이스에게 자체 진단을 결과와 슬레이브 디바이스의 존재를 보고한다.

신호 이내로 니게이트 하고 초 내에 애서트PDIAG- : 1ms 30

가 슬레이브디바이스로세트되었을때 는 신호가니게이트될* HDD , HDD PDIAG-

때 신호를애서트하고 신호가애서트될때 신호를니게이, DASP- , PDIAG- , DASP-

트 한다.

- 65 -

명령에 대한 응답Diagnostic

마스터디바이스가 명령을수신하고슬레이브디EXECUTE DEVICE DIAGNOSTIC

바이스가존재하면 마스터디바이스는슬레이브디바이스가자체진단이성공적으로,

수행되었는지의 여부를 초동안 신호를 검사한다6 PDIAG- .

마스터 디바이스는 신호를 검사하지 않는다DASP- .

슬레이브디바이스가 명령을수신한후 슬레이브EXECUTE DEVICE DIAGNOSTIC ,

디바이스는 아래와 같이 마스터 디바이스에게 자체 진단의 결과를 보고한다.

신호 이내로 니게이트 하고 초동안 애서트PDIAG : 1ms 5

가슬레이브디바이스로세트되었을때 는 신호가니게이트될* HDD , HDD PDIAG-

때 신호를애서트하고 신호가애서트될때 신호를니게이, DASP- , PDIAG- , DASP-

트 한다.

- 66 -

제 절 기술개발의 사양2

블럭3. ECC

가. 1bit ECC

비트열은 의 데이터로부터 생성됨ECC parity 256Byte (2048bit)

에서 비트의 오류를 정정하기 위해서는 비트의 데이터가 필요함256Byte 1 22 ECC

바이트당256 1bit ECC

데이터 비트열에서 가 에러가 발생했다고 하면 가 영향을d5 , ecp1, ecp2, ecp5

받게되며 당초에 기록한 의 값과 당금 의 에러에 의해 만들어진, ecp0~ecp5 d5

코드가 서로 다르게 된다ECC .

에서 공통비트는 이기 때문에 이 비트가 어레임을 인지할 수 있고ecp1,2,3 d5

는 과 둘밖에 없는 비트이기 때문에 역의 수가 정정한 값이 된다d5 1 0 .

d7 d6 d5 d4 d3 d2 d1 d0

ecp1 ecp0

ecp3 ecp2

ecp5 ecp4

ecp0 = NOT ( d6 (+) d4 (+) d2 (+) d0 )

ecp1 = NOT ( d7 (+) d5 (+) d3 (+) d1 )

ecp2 = NOT ( d5 (+) d4 (+) d1 (+) d0 )

ecp3 = NOT ( d7 (+) d6 (+) d3 (+) d2 )

ecp4 = NOT ( d3 (+) d2 (+) d1 (+) d0 )

ecp5 = NOT ( d7 (+) d6 (+) d5 (+) d4 )

ECC 코드코드코드코드1바이트에서바이트에서바이트에서바이트에서 4비트의비트의비트의비트의조합방식조합방식조합방식조합방식

- 67 -

가 오류가 발생할 경우d5

비트 에러가 발생할 경우 에러가 발생했다는 사항만 알 수 있고 오류 검출은2 ,

가능하나 정정할 수 없다는 것이 가장 큰 문제임,

비트 에러가 발생할 경우 비트 에러로 간주 또는 잘못 정정될 수 있다는 치명3 1

적인 문제를 가지고 있어서 신뢰성이 상대적으로 저하된 에서는 큰MLC NAND

문제가 될 수 있다.

d7 d6 d5 d4 d3 d2 d1 d0

ecp1 ecp0

ecp3 ecp2

ecp5 ecp4

ECC 코드코드코드코드

1바이트의바이트의바이트의바이트의데이터데이터데이터데이터에서에서에서에서 4비트의비트의비트의비트의조합방식조합방식조합방식조합방식

ecp1 = NOT ( d7 (+) d5 (+) d3 (+) d1 )

ecp2 = NOT ( d5 (+) d4 (+) d1 (+) d0 )

ecp5 = NOT ( d7 (+) d6 (+)d5 (+) d4)

정정정정정정정정값은값은값은값은 : NOT (d5)

- 68 -

발생기Comumn Parity

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U5

DFF2

Q1

D2

CLK3

CLR4

U5

DFF2

Q1

D2

CLK3

CLR4

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U1

XOR2

12

3

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

D7

D6

D5

D4

D3

D2

D1

D0

CLK

RST

CP5

CP3

CP4

CP2

CP1

CP0

U1

XOR2

12

3Dall

- 69 -

발생기Line Parity

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

LP7

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A3

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U4

G32

1

2

3

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A2

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A1

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A0

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

LP4

LP6

LP5

LP1

LP2

LP3

LP0

CLKDallRST

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

LP15

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A7

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U4

G32

1

2

3

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A6

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A5

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U4

G32

1

23

U1

XOR2

12

3

U5

DFF2

Q1

D2

CLK3

CLR4

U3

G04

1 2A4

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

U3

G04

1 2

LP13

LP14

LP12

LP11

LP10

LP9

LP8

- 70 -

나 에서의 의 영향. MLC NAND 1bit ECC

낸드 플래시 메모리 셀 구조는 다음 그림과 같다.

이 때 의 오류가 발생할 경우를 생각하면 로도 쉽게 오류를 정, Bit1 , 1bit ECC

정할 수 있게 된다.

그러나 시간이 지남에 따라 인접한 라인이 영향을 받을 수 있다 이는 곧, Bit .

다음의 그림과 같은 형태로 오류가 발전할 수 있다는 점에 주목해야 한다.

1 Cell Error in NAND Block

Bit 0 Bit 1 Bit 2 Bit 3

Select Gate 1

Select Gate 2

Word

Word

Word

Word

Source

X

Bit 0 Bit 1 Bit 2 Bit 3

Select Gate 1

Select Gate 2

Word

Word

Word

Word

Source

X

- 71 -

즉 이경우에는 로는 대책이 없다 오류의 검출 자체가 불가능하게 되, 1bit ECC .

기 때문이다.

플래시 메모리의 경우 상대적으로 신뢰성이 떨어지기 때문에 이를MLC NAND

보완할 오류 정정 기술이 필요하게 된다 게다가 최근 개발이 착수되고 있는.

의 경우 오류 확률이 더욱 높아지게 되기 때문에 오류 정정에 대한4bit-MLC

과제가 더욱 커지게 되고 있다.

3 Cell Errors in NAND Block

Bit 0 Bit 1 Bit 2 Bit 3

Select Gate 1

Select Gate 2

Word

Word

Word

Word

Source

XXX

Bit 0 Bit 1 Bit 2 Bit 3

Select Gate 1

Select Gate 2

Word

Word

Word

Word

Source

XXX

- 72 -

다. Reed-Solomon ECC

는 보통 다음과 같은 형태로 이루어져 있다Reed-Solomon ECC .

보다시피 곱셈과 덧셈이 부가되어 연산량이 많은것이 특징이다.

데이터를 플래시 메모리에 기록할 때에는 원래의 데이터에 패리티를 부가해서

기록하게 되며 데이터를 플래시 메모리로부터 읽어올 때에는 원래의 데이터와,

패리티 를 함께 신드롬 연산을 통하여 불러오게 된다.

신드롬 연산을 통하면 쉽게 오류의 발생 여부를 알 수 있게 된다, .

오류가 발생한 경우에는 오류정정 연산을 하여 해당 위치의 오류를 수정하는 것

이 기본 원리이다.

는 를 개의 영역으로 분할하여 사용하는32bit Parallel ECC IP 8bit ECC IP 4

로 를 사용하고 있다IP , RS(130,128) Code .

RS(130,128) CodeRS(130,128) CodeRS(130,128) CodeRS(130,128) Code

코드는 바이트의데이터를입력받아서 바이트의패리티를부가한RS(130,128) 128 , 2

다 이러한 바이트의패리티는 바이트의부호화된프레임 내의최대 바. 2 130 (Frame) 1

이트까지의에러를고칠수있다 이때 고칠수있는에러의분포는다음과같은범주. ,

내에 있어야 한다.

- 73 -

데이터에 대한 인코더의출력 에 대해 형태로All Zero (Encoder Output) Case I IV~

에러가발생했을때 은모두에러를고칠수있는경우이다 하지만, Case I III . , Case~

와 같은 형태로 에러가발생했을 때는 단지 비트의 에러로 보이지만 코드에IV 2 , RS

서는 에러로 간주하여 에러를 고칠 수 없다2 Symbol .

더구나 심볼 이상의에러가 발생했을 경우에는 디코딩후에 에러를 포함, 2 (Symbol)

하고 있는지의 여부도 알 수가 없다.

0 0 0 0 0 0 0 0...

Symbol (1 Byte)

...0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0Encoder Output

0 0 0 0 0 0 0 0... ...1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0... ...1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0... ...0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 1... ...1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Decoder Input- Case I

Decoder Input- Case II

Decoder Input- Case III

Decoder Input- Case IV

의 오류 패턴Reed-Solomon ECC

는 에 비해 비약적으로 많은 연산이 필요하기 때문에 실제 액RS-ECC 1bit ECC

세스 하는데 소요되는 비용이 만만치 않지만 플래시 메모리를 취, MLC NAND

급할 때에는 매우 유용한 알고리즘이다.

- 74 -

4. ARM7TDMI

가 특징.

는범용 비트 로 저소비전력이며고성능의 입니다 이ARM7TDMI 32 CPU , CPU . CPU

는 이라는아키텍쳐를채용하여메모리가제약되어있거나코드길이가한정THUMB

된 응용에 적합합니다.

는 비트표준 명령어셋과 비트 명령어셋의두개의ARM7TDMI 32 ARM 16 THUMB

명령어셋을가지고있습니다 이 명령어셋에의한코드길이는 비트표. THUMB 32

준명령어셋으로구성된코드길이의최대 이며 전형적인 비트레지스터를사1/2 , 16

용하는 비트 프로세서에 비해 의 고성능을 그대로 보유하고있는데 이는16 ARM ,

코드가 코드로서 같은 비트 레지스터로 동작하기 때문입니다THUMB ARM 32 .

자세한 에 대한 자세한 설명은 관련 데이터 시트를 참조하십시오ARM7TDMI .

비트 아키텍쳐32 RISC

저소비전력

및주변블록 디버그지원 비트 하드웨어ARM7TDMI - On-chip ICEbreaker - 32 x 8

승산기 명령어 디코더- Thumb

임베디드프로세서사용 고성능 비트 아키텍쳐 고밀도ARM7TDMI - 32 RISC - 16

비트 명령어 셋 코드(THUMB )

안정적인 동작: 0 ~ 50MHz

단계 파이프라인 아키텍쳐3 (Fetch, decode, and execution stage)

향상된 소프트웨어 개발 환경ARM

코드는 코드에비해약 정도의 절약효과가있으며 외부에 비THUMB ARM 35% , 16

트 메모리 구성 시 약 정도의 성능 향상이 있습니다160% .

- 75 -

ARM7TDMI

DBGRQBREAKPTDBGACKnEXEC

EXTERN1EXTERN0DBGEN

RANGEOUT0RANGEOUT1

DBGRQ1COMMRXCOMMTX

Debug

MCLKnWAITECLK

nIRQnFIQ

ISYNC

nRESETBUSENHIGHZBIGENDnENIN

nENOUTnENOUTI

ABEAPEALEDBETBE

BUSDISECAPCLK

TCKTMSTDInTRSTTDOTAPSM[3:0]IR[3:0]nTDOENTCK1TCK2SCREG[3:0]

11

nMREQSEQnRWMAS[1:0]BL[3:0]LOCK

nTRANSABORT

nOPCnCPICPACPB

nM[4:0]

A[31:0]

DOUT[31:0]

D[31:0]

DIN[31:0]

TBIT

BoundaryScan

Boundary Scan

Control Signals

ProcessorModeProcessorState

MemoryInterface

MemoryManagementInterface

CoprocessorInterface

BusControl

Interrupt

Clocks

ARM7TDMI

DBGRQBREAKPTDBGACKnEXEC

EXTERN1EXTERN0DBGEN

RANGEOUT0RANGEOUT1

DBGRQ1COMMRXCOMMTX

Debug

MCLKnWAITECLK

nIRQnFIQ

ISYNC

nRESETBUSENHIGHZBIGENDnENIN

nENOUTnENOUTI

ABEAPEALEDBETBE

BUSDISECAPCLK

TCKTMSTDInTRSTTDOTAPSM[3:0]IR[3:0]nTDOENTCK1TCK2SCREG[3:0]

11

nMREQSEQnRWMAS[1:0]BL[3:0]LOCK

nTRANSABORT

nOPCnCPICPACPB

nM[4:0]

A[31:0]

DOUT[31:0]

D[31:0]

DIN[31:0]

TBIT

BoundaryScan

Boundary Scan

Control Signals

ProcessorModeProcessorState

MemoryInterface

MemoryManagementInterface

CoprocessorInterface

BusControl

Interrupt

Clocks

- 76 -

ICE Breaker

TAP controller

Core

All

Other

Signals

TCK TMS nTRST TDI TDO TAPSM[3:0] IR[3:0] SCREG[3:0]

Scan Chain2 Scan Chain0

Scan Chain1

Bus SplitterD[31:0]

DIN[31:0]

DOUT[31:0]

A[31:0]

RANGEOUT0

RANGEOUT1

EXTERN1

EXTERN0nOPC

nRWMAS[1:0]

nTRANSnMREQ

ICE Breaker

TAP controller

Core

All

Other

Signals

TCK TMS nTRST TDI TDO TAPSM[3:0] IR[3:0] SCREG[3:0]

Scan Chain2 Scan Chain0

Scan Chain1

Bus SplitterD[31:0]

DIN[31:0]

DOUT[31:0]

A[31:0]

RANGEOUT0

RANGEOUT1

EXTERN1

EXTERN0nOPC

nRWMAS[1:0]

nTRANSnMREQ

Address Register

AddressIncrementer

Register Bank(31X32-bit registers)(6 status registers)

32X8Multiplier

BarrelShifter

Write Data RegisterInstruction Pipeline &Read Data Register &

Thumb Instruction Decoder

InstructionDecoder

&ControlLogic

B

bus

32-bit ALU

AL

U

bus

A

bus

PC

bu

s

Inc

remen

ter

b

us

ScanControl

ALE ABEA[31:0]

D[31:0]nENOUT nENINDBE

DBGRQIBREAKPTIDBGACK

ECLKnEXECISYNCBL[3:0]APE

MCLKnWAITnRW

MAS[1:0]nIREQnFIQnRESET

ABORTnTRANSnMREQnOPCSEQ

LOCKnCPICPACPBnM[4:0]

TBETBIT

HIGHZ

Address Register

AddressIncrementer

Register Bank(31X32-bit registers)(6 status registers)

32X8Multiplier

BarrelShifter

Write Data RegisterInstruction Pipeline &Read Data Register &

Thumb Instruction Decoder

InstructionDecoder

&ControlLogic

B

bus

32-bit ALU

AL

U

bus

A

bus

PC

bu

s

Inc

remen

ter

b

us

ScanControl

ALE ABEA[31:0]

D[31:0]nENOUT nENINDBE

DBGRQIBREAKPTIDBGACK

ECLKnEXECISYNCBL[3:0]APE

MCLKnWAITnRW

MAS[1:0]nIREQnFIQnRESET

ABORTnTRANSnMREQnOPCSEQ

LOCKnCPICPACPBnM[4:0]

TBETBIT

HIGHZ

- 77 -

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14

R15(PC)

CPSR

R0

R1

R2

R3

R4

R5

R6

R7

R8_fiq

R9_fiq

R10_fiq

R11_fiq

R12_fiq

R13_fiq

R14_fiq

R15(PC)

CPSR

SPSR_fiq

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_svc

R14_svc

R15(PC)

CPSR

SPSR_svc

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_abt

R14_abt

R15(PC)

CPSR

SPSR_abt

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_irq

R14_irq

R15(PC)

CPSR

SPSR_irq

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_und

R14_und

R15(PC)

CPSR

SPSR_und

= banked register

UndefinedIRQAbortSupervisorFIQSystem & User

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14

R15(PC)

CPSR

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14

R15(PC)

CPSR

R0

R1

R2

R3

R4

R5

R6

R7

R8_fiq

R9_fiq

R10_fiq

R11_fiq

R12_fiq

R13_fiq

R14_fiq

R15(PC)

CPSR

SPSR_fiq

R0

R1

R2

R3

R4

R5

R6

R7

R8_fiq

R9_fiq

R10_fiq

R11_fiq

R12_fiq

R13_fiq

R14_fiq

R15(PC)

CPSR

SPSR_fiq

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_svc

R14_svc

R15(PC)

CPSR

SPSR_svc

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_svc

R14_svc

R15(PC)

CPSR

SPSR_svc

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_abt

R14_abt

R15(PC)

CPSR

SPSR_abt

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_abt

R14_abt

R15(PC)

CPSR

SPSR_abt

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_irq

R14_irq

R15(PC)

CPSR

SPSR_irq

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_irq

R14_irq

R15(PC)

CPSR

SPSR_irq

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_und

R14_und

R15(PC)

CPSR

SPSR_und

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_und

R14_und

R15(PC)

CPSR

SPSR_und

= banked register= banked register

UndefinedIRQAbortSupervisorFIQSystem & User

31 30 9 8 7 6 5 4 3 2 1 019 18 17 16 15 14 13 12 11 1029 28 27 26 25 24 23 22 21 20

Cond 0 0 I Opcode S Rn Rd Operand2Data Processing /PSR Transfer

Cond 0 0 0

Cond 1 1 1 Ignored by processor

0 0 0 A S Rd Rn Rs 1 0 0 1 Rm Multiply

Cond 0 0 0 0 1 U A S RdHi RdLo Rn 1 0 0 1 Rm Multiply Long

Cond 0 0 0 1 0 B 0 0 Rn Rd 1 0 0 1 Rm Single Data Swap0 0 0 0

Cond 0 0 0 1 0 0 1 0 0 0 0 1 Rn Branch and Exchange1 1 1 1 1 1 1 1 1 1 1 1

Cond 0 0 0 L Rn RdHalfword Data Transferregister offset

P U 0 W 1 S H 1 Rm0 0 0 0

Cond 0 0 0 L Rn RdHalfword Data Transferimmediate offset

P U 1 W 1 S H 1 OffsetOffset

Cond 0 1 I P U B W L Rn Rd Single Data TransferOffset

Cond 0 1 I P Undefined

Cond 1 0 0 P U B W L Rn Block Data TransferRegister List

Cond 1 0 1 L BranchOffset

Cond 1 1 0 Rn CRd OffsetCoprocessor DataTransfer

P U N W L CP#

Cond 1 1 1 CRn CRd CPCoprocessor DataOperation

0 CP Opc CP# 0 CRm

Cond 1 1 1 CRn Rd CPCoprocessor RegisterTransfer

0 CP Opc CP# 1 CRmL

1 Software Interrupt

31 30 9 8 7 6 5 4 3 2 1 019 18 17 16 15 14 13 12 11 1029 28 27 26 25 24 23 22 21 20

31 30 9 8 7 6 5 4 3 2 1 019 18 17 16 15 14 13 12 11 1029 28 27 26 25 24 23 22 21 2031 30 9 8 7 6 5 4 3 2 1 019 18 17 16 15 14 13 12 11 1029 28 27 26 25 24 23 22 21 20

Cond 0 0 I Opcode S Rn Rd Operand2Data Processing /PSR Transfer

Cond 0 0 0

Cond 1 1 1 Ignored by processor

0 0 0 A S Rd Rn Rs 1 0 0 1 Rm Multiply

Cond 0 0 0 0 1 U A S RdHi RdLo Rn 1 0 0 1 Rm Multiply Long

Cond 0 0 0 1 0 B 0 0 Rn Rd 1 0 0 1 Rm Single Data Swap0 0 0 0

Cond 0 0 0 1 0 0 1 0 0 0 0 1 Rn Branch and Exchange1 1 1 1 1 1 1 1 1 1 1 1

Cond 0 0 0 L Rn RdHalfword Data Transferregister offset

P U 0 W 1 S H 1 Rm0 0 0 0

Cond 0 0 0 L Rn RdHalfword Data Transferimmediate offset

P U 1 W 1 S H 1 OffsetOffset

Cond 0 1 I P U B W L Rn Rd Single Data TransferOffset

Cond 0 1 I P Undefined

Cond 1 0 0 P U B W L Rn Block Data TransferRegister List

Cond 1 0 1 L BranchOffset

Cond 1 1 0 Rn CRd OffsetCoprocessor DataTransfer

P U N W L CP#

Cond 1 1 1 CRn CRd CPCoprocessor DataOperation

0 CP Opc CP# 0 CRm

Cond 1 1 1 CRn Rd CPCoprocessor RegisterTransfer

0 CP Opc CP# 1 CRmL

1 Software Interrupt

31 30 9 8 7 6 5 4 3 2 1 019 18 17 16 15 14 13 12 11 1029 28 27 26 25 24 23 22 21 2031 30 9 8 7 6 5 4 3 2 1 019 18 17 16 15 14 13 12 11 1029 28 27 26 25 24 23 22 21 20

- 78 -

Mnemonic Instruction Action

ADC Add with carry Rd := Rn + Op2 + Carry ADD Add Rd := Rn + Op2AND AND Rd := Rn AND Op2

B Branch R15 := address

BIC Bit Clear Rd := Rn AND NOT Op2

BL Branch with Link R14 := R15, R15 := address

BX Branch and Exchange R15 := Rn, T bit := Rn[0]

CDP Coprocessor Data Processing (Coprocessor-specific)

CMN Compare Negative CPSR flags := Rn + Op2

CMP Compare CPSR flags := Rn - Op2

EOR Exclusive OR Rd := (Rn AND NOT Op2) OR (op2 AND NOT Rn)

LDC Load coprocessor from memory Coprocessor load

LDM Load multiple registers Stack manipulation (Pop)

LDR Load register from memory Rd := (address)

MCR Move CPU register to coprocessor register cRn := rRn {<op>cRm}

MLA Multiply Accumulate Rd := (Rm * Rs) + Rn

MOV Move register or constant Rd : = Op2

MRC Move from coprocessor register to CPU register Rn := cRn {<op>cRm}

MRS Move PSR status/flags to register Rn := PSR

MSR Move register to PSR status/flags PSR := Rm

MUL Multiply Rd := Rm * Rs

MVN Move negative register Rd := 0xFFFFFFFF EOR Op2

ORR OR Rd := Rn OR Op2

RSB Reverse Subtract Rd := Op2 - Rn

RSC Reverse Subtract with Carry Rd := Op2 - Rn - 1 + Carry

SBC Subtract with Carry Rd := Rn - Op2 - 1 + Carry

STC Store coprocessor register to memory address := CRn

STM Store Multiple Stack manipulation (Push)

STR Store register to memory <address> := Rd

SUB Subtract Rd := Rn - Op2

SWI Software Interrupt OS call

SWP Swap register with memory Rd := [Rn], [Rn] := Rm

TEQ Test bitwise equality CPSR flags := Rn EOR Op2

TST Test bits CPSR flags := Rn AND Op2

- 79 -

버스5. AMBA

가 특징.

는 원래 또는 를사용하여 칩내부의 모듈러아AMBA ARM710A ARM7TDMI CPU

키텍처를 사용하는데 주 목적이 있었다 당시에는 주변 마다 버스에 직접. I/O CPU

물려 인터페이스 하는 방식이 주로 사용되었고 특히 버스와 같은 형태가 주로, , ISA

사용되었다 이 때 사의 주창에 따라 에 대한 포럼이만들어지고 이에. , ARM , AMBA

스펙은 범용 의 개념으로 발전하였다AMBA On Chip Bus .

시스템구조는아래 그림과같이 가존재하여버스마스터쉽AMBA , BUS ARBITER

을 관장하는구조를 가지며 는어드레스 디코딩을수행하는구조로 되어, DECODER

있다 버스 마스터쉽은 이론상 여러개의 가 올라갈 수 있고 또한 올라갈. CPU , DMA

수 있다 즉 전체 버스를 점유할 수 있는 권리를 얻을 수 있는 모드이다. , .

간단한 시스템 구조AMBA

Bus Slave

ROM

Bus Slave

Serial

Port

Bus Slave

External Bus

Interface

DMA

B_A[31:0]

B_CYC[1:0]

B_D[31:0]

DECODER

ARM

ARBITER

D_SELROM D_SELUART D_SELEBI

A_GNTARM A_REQDMAA_REQARM A_GNTDMA

B_WAIT, B_ERROR, B_LAST

ADDR

DATA

CSN

- 80 -

는 여기에서 그치지 않고 당시에 버스에 새로운 개념을 불어 넣어 많은AMBA ,

호평을 받았다 이는 시스템에서는 저전력을 요하는 저속 주변 와 고속을 요. , IO

하는 장치로 나뉘어 진다는 것이다 즉 고속을 요하는 곳에는 고성능을 위주로. ,

한 버스를 편재 시키고 이와는 완전히 분리되어 저속 주변 를 관장하는 버, IO

스는 이벤트가 존재할 때 마다 버스가 사용이 되는 구조이다.

고속을 요하는 버스를 저속 저전력을 요하는 버ASB : Advanced System Bus,

스를 라고 부르며 는 의 슬레이브APB : Advanced Peripheral Bus , APB ASB

인 를 통해 버스와 연결된다APB Bridge ASB .

가 억세스 되지 않을 때는 버스만 액티브 되기 때문에 불필요한APB Bus ASB

를 사용하지 않는 만큼 소비전력에서 많은 효과를 볼 수 있다APB Bus .

또한 소비전력을 줄이는 과제는 결국 버스 캐패시턴스를 줄이는 데 있는데, ,

버스는 구조 자체가 아주 효과적이다AMBA ASB/APB .

최근에는 로 의 고속성을 보강하는 버스 구조가 시스템 등에AHB ASB ARM9

서 사용된다.

본 시스템에서는 의 구조만 사용해도 성능상의 이슈는 없AMBA ASB / APB

으므로 전통적인 접근법을 사용한다AMBA .

와 의 관계ASB APB

ExternalBusI/F

RAMARMUART

Timer

PIO

RTC

ASB

High PerformanceHigh BandwidthSystem Bus

Low PowerSimple InterfacePeripheral Bus

APB

- 81 -

다음 그림은 시스템의 예로서 버스 마스터에 대한 과 그AMBA , Arbiter APB (

림에서는 와 동일 에 대한 관계가 기술되어 있다EPB : APB ) .

여기서 에 연결되는 블록은 로 디코딩 되나 에 연결ASB Decoder , APB Bridge

되는 디코딩 관계가 기술되어 있지 않다.

에서는 의 어드레스 디코딩은 가 담당 하도록 되어 있AMBA APB APB Bridge

다.

시스템의 예AMBA

의 기본 버스 사이클ASB

그러면 의 사이클을 살펴보자, ASB , 는 을사용하고버스의ASB Pipelened protocol

각 상태는 몇개의 로 구성된다Stage .

은 전달하는 정보의 종류 를 표시하게 되어 있다B_TRAN .

즉 이렇게 가지의상태를나타낸다, Address Only, Non-Sequential and Sequential 3 .

ARMBus Master

ARMBus Master

ROMBus Slave

ROMBus Slave

Real TimeClock

EPB Slave

Real TimeClock

EPB Slave

ExternalBus I/FBus Slave

ExternalBus I/FBus Slave

UARTEPB Slave

UARTEPB Slave

ArbiterArbiter

DecoderDecoder

Test I/FController

Test I/FController

DMABus Master

DMABus Master

EPB StubBus Slave

EPB StubBus Slave

PIOBus Slave

PIOBus Slave

- 82 -

의 기본 버스 사이클ASB

어드레스 디코드

개별선택신호를발생하는중추적어드레스디코우더로, 는 각 가D_SELx Slave 32

비트의 어드레스를 디코드하는데 필요한 를 줄일 수 있게 된다gate Count .

의 어드레스 디코딩ASB

B_CLK

B_TRAN[1:0]

B_A[31:0]

B_D[31:0]

Phase 1 Phase 2

Bus Cycle

Transfer

Type

Address

Data

B_CLK

B_TRAN[1:0]

B_A[31:0]

B_D[31:0]

Phase 1 Phase 2

Bus Cycle

Transfer

Type

Address

Data

B_CLK

B_TRAN[1:0]

B_A[31:0]

D_SELx

Bus Cycle

Transfer

Type

Address

B_D[31:0] Data

- 83 -

Transfer Response

모든 이 에응답할수없기때문에 신호를사용한다Peripheral Single Cycle B_WAIT .

해당 의 모든 전달은 반드시 응답이 주어져야 한다Slave Transfer .

Trans Response

버스APB

버스는 처음부터 존재한 것이 아니라 당시에는 비트 버스로 대표되는APB , 8 80

버스와 계열 버스가 존재하였다 은 계열 버스는 나름대로 장점이 존68 . ARM 80

재하지만 계열 버스가 보다 효율적인 전송 방식을 갖고 있음을 발견한다, 68 .

원래 사는 애플컴퓨터 클론을 만들던 회사에서 출발하였고ARM Acorn 68000

을 이용한 컴퓨터도 만들기도 하였기 때문에 이 버스에 대한 지식이 있었다.

버스는 계열 버스를 에 맞게 수정 도입하였다APB 68 AMBA .

가 어드레스 디코딩을 수행하고 가 스트로보 역할을 하여PSELxx APB , PSTB

데이터 버스상에서 읽기 또는 쓰기를 정상적으로 수행할 수 있도록 해준다.

설계에 따라 저속으로 설계가 가능하다 또한 데이터 버스 폭을APB Bridge , . ,

비트를 사용하지 않고 비트를 사용해도 된다 당연히 어드레스 버스 폭 또32 8 . ,

한 가 가지는 어드래싱 영역내에서 관리할 수 있도록 할 수 있기 때문에APB

대폭 줄일 수 있게 된다 이렇게 되면 칩 내부에서도 핀 수를 상당히 줄이는 효. ,

과를 볼 수 있게 된다 바로 이것이 버스의 장점이다. APB .

- 84 -

단 버스에 고속 디바이스를 연결하는 것은 목적에 올바르지 않다 어떤, APB .

디바이스 예를 들면 에서 레지스터 액세스는 에, NAND Flash Controller APB

연결될 수 있으나 고속 데이터 교환 블록은 보다는 쪽에 연결되는, APB ASB

것이 타당하다 아니면 전용 버스 라인으로 연결시켜주는 것이 좋다. .

억세스APB

- 85 -

6. AMBA Peripheral

가 사양 개요.

개발에서 전체적인 개발 시간을 줄이기 위해 검증된 페리페럴을 가AMBA APB

능한 한 수정없이 그대로 사용함을 전제로 한다.

이는 설계사항에서 나타나듯이 를 강조한 것으로 검증AMBA APB Re-usability

된 페리페럴을 그냥 그대로 사용함으로 설계 시간과 오류 가능성을 최소한으로

줄여주기 위함이다.

나. PMU

는전 에 을제공하는데이때 은 의 에동기된PMU system reset , reset clock rising edge

과 의 에동기된 등 가지형태의 을제공하며 또한각reset clock falling edge reset 2 reset ,

별 을 에 맞게 제공한다block clock mode .

예를 들면 의 경우 시에는 동작하지 않는 으로SMI block Normal mode block SMI

의 을 차단한다block clock .

또한 를위해 를비롯한일부 의 을유지시키는power save CPU block clock level sleep

와 발진을멈춰전 에 공급을멈추는 를제공하며mode xtal system clock stop mode ,

이때 와 에서 에의해 로복귀하게된다sleep mode stop mode interrupt normal mode .

의 기능중또다른한가지는 을생성하여 에PMU REMAP signal REMAP signal level

따라 구성을 달리 할 수 있도록 하는 것이다memory map .

의 특징PMU

Clock distribution of all over system

Reset control

RUN, Sleep and Stop modes control

Memory map control

- 86 -

의 블록 다이어그램PMU

RESETRESETRESETRESET

은 의 가지경우의 이있으며Reset power on reset, manual reset, S/W reset 3 reset ,

의경우 으로 를 르 하는것을S/W reset user reset program counter reset address jump

말하며 과 은 내부의 을 로떨어트, power on reset manual reset system reset signal low

린후일정시간이후 값만큼 다시 로올려 이 인동안각(RDCNT value ) high , reset low

및 등의 를 수행하도록 한다register bus initialize .

RUNRUNRUNRUN

으로 를사용하며 에의해CPU operation clock BCLK Mode signal[2:0] normal mode,

으로구분되어지며 각 의 은 에따라test mode 0,1 TIC mode , block clock Mode state

인가되도록 되어 있다.

SLP - Sleep ModeSLP - Sleep ModeSLP - Sleep ModeSLP - Sleep Mode

를위해 를비롯한 및 에연결된일부 의Power save CPU ASB bus APB bus block clock

이 을유지하도록하며 에의해 를벗어나low level , interrupt sleep mode RUN mode

로 돌아가도록 하고 있다.

STP - Stop ModeSTP - Stop ModeSTP - Stop ModeSTP - Stop Mode

보다더욱 를위해전 의 공급을차단하기위한Sleep mode power save system clock

로 발진회로를멈추도록한다 와마찬가지로 에의mode XTAL . Sleep mode interrupt

nPOR

P_A[7:0]P_D[15:0]

P_SELP_STB

P_WRITEnIRQINnFIQIN

Firm

MODE[2:0]

CLKIN

B_RESETn_OUT1B_RESETn_OUT2P_RESETn_OUT1P_RESETn_OUT2

nPDNnSLP

REMAP

BCLK_XX for ASBBCLK_XX for APB

ResetDe-bounceDigital Filter

PMU Register

BCLKFrequencyControl

BCLKDistributionControl

PMU Control

Reset ControlnPOR

P_A[7:0]P_D[15:0]

P_SELP_STB

P_WRITEnIRQINnFIQIN

Firm

MODE[2:0]

CLKIN

B_RESETn_OUT1B_RESETn_OUT2P_RESETn_OUT1P_RESETn_OUT2

nPDNnSLP

REMAP

BCLK_XX for ASBBCLK_XX for APB

ResetDe-bounceDigital Filter

PMU Register

BCLKFrequencyControl

BCLKDistributionControl

PMU Control

Reset Control

- 87 -

해 를 벗어나 로 돌아가도록 하고 있다stop mode RUN mode .

과 상태 천이도Reset PMU

RESET

SLEEP

RUN

STOP

nPOR

S/W ControlManual Reset

S/W Control S/W Control

Wake-up by

interruptWake-up byinterrupt

RESET

SLEEP

RUN

STOP

nPOR

S/W ControlManual Reset

S/W Control S/W Control

Wake-up by

interruptWake-up byinterrupt

- 88 -

나 인터럽트 컨트롤러.

에서 제공되는 인터럽트 컨트롤러는 소프트웨어 구현상에서 우선도를 구AMBA

현하는데 많은 사이클이 소요된다.

최근에 인터럽트 컨트롤러에 대한 가 소개되고 있으나 입수할 수 없Vector IP ,

어서 기존 인터럽트 컨트롤러 를 사용하였다IP .

는 에 연결되어 있으며 를 통해 여러 개의INTC APB bus , APB bridge interrupt

를 나 로 에게연결하며 또한 는source IRQ FIQ interrupt processor , interrupt source 1

개의 와 개의 를갖고있다 개의external interrupt source 9 internal interrupt source . 1

는 의 이며 개의external interrupt source Host reset interrupt , 9 internal interrupt

는 개의 와 개의 와 개의source 2 debug interrupt 1 timer interrupt 1 DMAC complete

그리고 개의 로구성되어있다 는interrupt, 5 host access interrupt . External interrupt

와 시에는 에 된 로 사용을 하고normal mode sleep mode clock sync interrupt , stop

시에는 에 되지 않은 원래 로 인가되도록 하여 시mode clock sync signal stop mode

와 의 개 에의해 가발생하도록external interrupt PCMCIA 5 interrupt source interrupt

하였다.

내부에는 를 하는 를 로INTC interrupt source masking mask register, interrupt level

할지 로 할지 결정하는 와edge trigger mode register trigger polarity register,

를 로할지 로할지결정하는 그리고 차로interrupt source FIQ IRQ direction register, 2

에대해 하는 와 와interrupt source masking FIQ mask register IRQ mask register, FIQ

에어떤 가 되었는지나타내는 와IRQ interrupt source enable FIQ status register IRQ

마지막으로 된 를 시키는status register, enable interrupt source clear status clear

를 가지고 있다register .

인터럽트 컨트롤러의 특징

Asynchronous interrupt controller

1 external interrupt & 9 internal interrupts

Low interrupt latency

Selection of the active modes of all interrupt source inputs (Level or Edge trigger)

Maskable for each interrupt source and output signal

Selection of the output paths (IRQ or FIQ for each interrupt source)

- 89 -

인터럽트 컨트롤러의 블록 다이어그램

인터럽트 컨트롤러는 맨 처음 마스크 여부를 결정하고 그 다음으로 엣지냐 레, ,

벨이냐를 결정지은다 그다음으로 우선권을 제어하게 되며 를 선택 또는. , FIQ

를 선택할 수 있는 구조로 되어 있다 최종적으로 또는IRQ . FIQ Mask IRQ

를 선택할 수 있게 되어 있는 구조로 인터럽트 발생시 코딩을 줄여주고Mask ,

당연히 사이클수의 감소를 목적으로 한다.

Control Block

Mask Register

Trigger Mode Register

Trigger Polarity Register

Direction Register

FIQ status Register

IRQ status Register

FIQ Mask Register

IRQ Mask Register

Status Clear Register

TIC input Register

TIC output Register

BUS

interface

INT_SRC[9:0] nIRQ

nFIQ

InternalData Bus

Control Block

Mask Register

Trigger Mode Register

Trigger Polarity Register

Direction Register

FIQ status Register

IRQ status Register

FIQ Mask Register

IRQ Mask Register

Status Clear Register

TIC input Register

TIC output Register

BUS

interface

INT_SRC[9:0] nIRQ

nFIQ

InternalData Bus

- 90 -

인터렙트 컨트롤러의 상세구조

MaskControl

INT source 0INT source 1INT source 2

INT source 3

INT source 9

Edge/LevelControl

High/Low,Rising/FallingControl

FIQorIRQ

FIQ

IRQ

FIQMask

IRQMask

Clear Control

nFIQ

nIRQ

Source MaskControl

Trigger ModeControl

PolarityControl

DirectionControl

statusControl

RequestControl

10 10 10 10

10 10

MaskControl

INT source 0INT source 1INT source 2

INT source 3

INT source 9

Edge/LevelControl

High/Low,Rising/FallingControl

FIQorIRQ

FIQ

IRQ

FIQMask

IRQMask

Clear Control

nFIQ

nIRQ

Source MaskControl

Trigger ModeControl

PolarityControl

DirectionControl

statusControl

RequestControl

10 10 10 10

10 10

- 91 -

다 타이머.

는 이며 나Timer 16bit counter 1 channel , free running mode compare match mode

로만 이용 가능하다 에 이용 가능한 은 에서 선택된. Timer clock PMU block clock

을 다시(CLKIN, CLKIN/2, CLKIN/4, CLKIN/8, CLKIN/16, CLKIN/32, BCLK) /2,

하여사용하게되며 는제공하지않는/4, /16, /64 , external input clock select mode

다 에서발생하는 는 시 에의한. Timer interrupt free running mode overflow interrupt

가 있으며 또한 시 와 의 가request , compare match mode TCOUNT GRA/GRB value

일치하는 가 있다compare match interrupt request .

타이머의 특징

1 channel with 16bit counter

Compare match waveform output function

1 interrupt source

Selectable 4 internal clock source

Independent function with 7 general registers

타이머의 블록 다이어 그램

ClockGeneration

ClockSelection

Control

16bitTimer

channel

Businterface

Timer interrupt

Internal Data Bus

Clock

Reset

ClockGeneration

ClockSelection

Control

16bitTimer

channel

Businterface

Timer interrupt

Internal Data Bus

Clock

Reset

- 92 -

라. GPIO

범용 포트 는 에 연결된 주변장치로 포트로 구성된 비트의 프I/O (GPIO) APB A/B 16

로그래밍 가능한 범용 입출력 포트이다 포트는 포트 로 나뉘어져 있다 각각의. A, B .

핀은 입력 또는 출력으로 구성할 수 있다.

A P B I /F

P o rt A

D a ta R eg .

P o rt A

D ir. R eg .

P o rt

B D a ta R eg .

P o rt B

D ir. R eg .

P o rt B

P o rt A

E PA [7 :0 ]

PA [7 :0 ]

PA O E [7 :0 ]

E P B [7 :0 ]

P B [7 :0 ]

P B O E [7 :0 ]

P D [7 :0 ]

PA [7 :2 ]

B n R E S

P S E L

P S T B

PW R IT E

블럭도GPIO

모든포트에는데이터레지스터와입출력방향레지스터가있다 방향레지스터는포.

트의각핀을입력으로사용할지또는출력으로사용할지의여부를결정한다 데이터.

레지스터는 핀이 출력용일 경우 핀을 통해 출력될 값을 저장하고 또한 핀의 입출력,

여부에 상관없이 현재 핀의 값을 읽을 경우 사용된다.

PPPPnnnnDRDRDRDR 포트 데이터 레지스터이다 이 레지스터에 쓴 값은 포트 데이터방향 레지n . n

스터가 일때해당 핀의출력값이 된다 이레지스터의 어드레스로읽혀진데이터'1' .

는 포트 의 외부 값을 반영한다 모든 비트는 리셋 후 으로 초기화 된다n . '0' .

PPPPnnnnDDR*DDR*DDR*DDR* 포트 입출력방향레지스터이다 이레지스터의비트가 이면포트 의해n . '1' n

당핀이 입력으로 사용되며 비트가 이 되면 그 핀은 출력으로 동작한다 리셋 후의, '0' .

값은 포트에 따라 다르다.

- 93 -

마. UART

내장된 는 를가지고있UART(Universal Asynchronous Receiver/Transmitter) FIFO

으며 초기설정으로기능적으로 과동일한바이트모드 를사용하지않, 16C450 (FIFO

는모드 가된다 그리고송수신의과도한 의부하를줄이기위해서 과같) . CPU 16C550

이 모드로 설정도 가능하다 모드에서는 바이트의 데이터가 송수신FIFO . FIFO 16

에 각각 저장될 수 있다FIFO .

는외부의직렬데이터를받아서저장하고 에서내부버스를통해받은데UART , CPU

이터를직렬데이터로변환해서외부로전송한다 는내부버스를통해 가. CPU UART

동작하는중에언제라도 다음에전송할 데이터를 에전달할 수있으며 이전에UART ,

수신한 데이터나 현재의 상태를 읽을 수 있다 의 상태 정보에는 지금UART . UART

에 의해 실행되고 있는 송수신의 설정이나 상태뿐만 아니라 데이터를 받을 때UART

의 오류 발생 여부도 점검이 가능하다 패리티 오버런 프레임 브레이크 등. ( , , , ).

각각에는 프로그래머블한 보레이트 제네레이터가 있어서 입력 기준 클럭UART0/1

을 에서 까지의값으로분주할수있으며 이렇게분주된클럭을다시 분주해1 65535 , 16

서 의내부송수신부를구동하는클럭만든다 또한별도 비트프리스케일러가UART . 8

내장되어 있어서 부 입력 클럭을 분주할 수 있다UART .

또한사용자에의해서프로그래머블한인터럽트설정이가능하여 와의통신을, UART

위해 인터럽트를 발생하여 의 동작을 최적화 할 수 있다CPU .

Prescale r C lock

Genera tion

UART_CLK

In te rna lbus

UART0 UART1

INT_UART [1:0 ]

UCLK0

Bus Interface

Con tro l

ENUCLK0

ENUCLK1

UCLK1

- 94 -

APB I/F

&

CONTROL

LOGIC

BAUD

GENERATOR

TRANSMITTER

TIMING

&

CONTROL

TRANSMITTER

FIFO

RECEIVER

TIMING

&

CONTROL

DATA

BUS

BUFFER

RECEIVER

BUFFER

REGISTER

RECEIVER

F IFO

LINE

CONTROL

REGISTER

DIVISOR

LATCH(LS)

DIVISOR

LATCH(MS)

LINE

STATUS

REGISTER

TRANSMITTER

HOLD ING

REG ISTER

INTERRUPT

ENABLE

REGISTER

INTERRUPT

ID

REGISTER

F IFO

CONTROL

REGISTER

RECEIVER

SHIFT

REGISTER

TRANSMITTER

SHIFT

REGISTERSELECT

INTERRUPT

CONTROL

LOGIC

SELECT

INT_UART

PA[0]

PA[1]

PA[2]]

PRESETn

PWDATA[7:0]

PSEL

PWRITE

PENABLE

U_CLK

SOUT

SIN

PRDATA[7:0]

의 내부 블럭도UART

- 95 -

바. SMI

와 는원래 외부메모리를 하기위한 으로 는SMI EBI access block address bus 26bit,

는 이다 하지만실제구현상에서는 칩내부의data bus 8bit . , Flash Memory Controller

와 그리고 를 인터페이스 하는 역할을 하도록 설계 되었다ATA Interface DMA .

이는 검증후에곧바로 화가가능하도록하기위한방안으로선택되었, FPGA ASIC

다 는 이며 또한 가능메모리는 또는 그리고. address bus 15bit , access ROM SRAM

등도 가능하도록 설계 되었다off-chip peripherals .

개의 가있고 각 의최대 가능 는 이다2 CS(chip select) bank , bank access size 128KB .

에는 개의 가있는데각 의 는 이다 이중첫번SMI 3 configure register register size 4bit .

째 와두번째 는 와 의 을 하며 최대register register CS[0] CS[1] wait time control , wait

은 이다 또한 번째 는 의 를위한cycle 16cycle . 3 register flash memory write protect

및 을 하도록 되어 있다LVD block signal enable .

는 의 을받아 에서는 을 으로 을EBI SMI control normal mode BD[31:0] D[7:0] , D[7:0]

으로 처리되는 구조를 갖는 이다BD[31:0] block .

BCLKBnRES

BWRITEDSELSMIDSELREG

BSIZE[1:0]BA[25:0]BD[31:0]

BTRAN[1:0]BWAIT

BERRORBLAST

WP_ENWP_Sel

AOut[25:0]nCS[1:0]nRDnWE

AMBA

LVD

PAD

MemByteSeq[1:0]

nSRAMInEn

nSRAMInLEn[3:0]

nSRAMOutEn

nSRAMOutLEn

BD[31:0]

nTicInEn

nTicOutEnnTicOutLEnTestMode

nOutEnTDataOut[31:0]TDataIn[31:0]DataOut[7:0]DataIn[7:0]

PAD

AMBA

TIC

DataOutMux

EBI

SMI

DataInMux

Output Signal

Wait State

Main State

Configure Register

BCLKBnRES

BWRITEDSELSMIDSELREG

BSIZE[1:0]BA[25:0]BD[31:0]

BTRAN[1:0]BWAIT

BERRORBLAST

WP_ENWP_Sel

AOut[25:0]nCS[1:0]nRDnWE

AMBA

LVD

PAD

MemByteSeq[1:0]

nSRAMInEn

nSRAMInLEn[3:0]

nSRAMOutEn

nSRAMOutLEn

BD[31:0]

nTicInEn

nTicOutEnnTicOutLEnTestMode

nOutEnTDataOut[31:0]TDataIn[31:0]DataOut[7:0]DataIn[7:0]

PAD

AMBA

TIC

DataOutMux

EBI

SMI

DataInMux

Output Signal

Wait State

Main State

Configure Register

- 96 -

사 컨트롤러. ATA

컨트롤러는 다음 그림과 같은 구조로 되어 있다ATA .

인터페이스 를 통해 와 연결되며 를 통해 인터페이스 되도록 설계 되IDE Host , SMI

었다.

컨트롤러 블럭ATA

레지스터명레지스터명레지스터명레지스터명.I/O

OffsetDir. 설설설설 명명명명 초기값초기값초기값초기값

ALTSTATUS 0x0000 R 얼터테이트스테이터스레지스터 0x80

DEVCTRL 0x0001 R 디바이스컨트롤레지스터 0x02

ERROR 0x0004 R/W 에러레지스터 0x01

FEATURE 0x0005 R 피처레지스터 0x00

SECCNT 0x0006 R/W 섹터카운트레지스터 0x01

LBALOW 0x0007 R/W LBA LOW레지스터 0x01

LBAMID 0x0008 R/W LBA MID레지스터 0x00

LBAHIGH 0x0009 R/W LBA HIGH레지스터 0x00

DEVICE 0x000A R/W 디바이스 LBA TOP레지스터 0x00

STATUS 0x000B R/W 스테이터스레지스터 0x80

COMMAND 0x000C R 커맨드레지스터 0x

IRQSTS 0x0010 R/W 인터럽트스테이터스레지스터 0x00

PINSTS 0x0011 R 핀스테이터스레지스터 0x

PINREQ 0x0012 R/W 핀출력레지스터 0x01

- 97 -

얼터네이트 스테이터스 레지스터얼터네이트 스테이터스 레지스터얼터네이트 스테이터스 레지스터얼터네이트 스테이터스 레지스터

얼터네이트스테이터스레지스터 는커맨드레지스터블록(alternate status register)

에 포함되어 있는 여분의 스테이터스 레지스터로서 그 내용도 스테이터스 레지스터

와동일하다 단 커맨드블록의스테이터스레지스터와는인터럽트의처리부분이달. ,

라진다 현재 드라이브로부터 인터럽트가 발생했을 떄 호스트가 스테이터스 레지스.

터를읽어내면이인터럽트는사라지게된다 하지만 얼터네이트스테이터스레지스. ,

터를읽는경우에는인터럽트가없어지지않고계속남아있게 된다 따라서(Pending) .

현재 인터럽트 상태를 계속 유지하면서 드라이브의 상태를 읽어낼 필요가 있을 때는

얼터네이트 스테이터스 레지스터를 사용해야 한다.

ALTSTATUS (0x0000 R)ALTSTATUS (0x0000 R)ALTSTATUS (0x0000 R)ALTSTATUS (0x0000 R)

BSYBSYBSYBSY 를Busy 나타내는 비트이다.

1 : 현재드라이브가명령수행중이거나기타다른이유로 상태임을나타낸Busy

다 이상태에서드라이브의 다른레지스터를액세스하는것은무의미하며동작을계.

속 수행하기 위해서는 비트가 으로복귀할 때까지기다려야 한다 마찬가지로BSY 0 . .

일 때에는 스테이터스 레지스터의 다른 비트값도 무시된다BSY=1 .

0 : 액세스 가능한 상태이다.

DRDYDRDYDRDYDRDY 를 나타내는 비트이다Drive Ready .

1 : Ready

BUFFSTS 0x0013 R/W 버퍼컨트롤레지스터 0x07

DMAMODE 0x0014 R/W DMA모드레지스터 0x

CMDSTS 0x0015 R 커맨드스테이터스레지스터 0x

BUFFADH 0x0016 R/W ATA_ADDRH (BUFFOWN) 0x00

IORDYDLY 0x0017 R/W IORDY딜레이레지스터 0x

BUFFADL 0x0018 R/W ATA_ADDRL 0x00

DDMARDY 0x0019 W DDMARDY Pause&Resume 0x

MONTH 0x001E R 버전관리레지스터 0x

DATE 0x001F R 버전관리레지스터 0x

Direction b7 b6 b5 b4 b3 b2 b1 b0

ALTSTATUS R BSY DRDY DRQ ERR

Reset 0x80 1 0 0 0 0 0 0 0

- 98 -

0 :

DRQDRQDRQDRQ 를 나타낸다Data Request .

1 : 드라이브가명령을수행하여호스트로데이터전송할준비가완료되면세트된

다.

0 :

ERRERRERRERR 비트로 명령수행중에 에러가 발생하였음나타낸다Error .

1 : 에러

0 : 정상

디바이스 컨트롤 레지스터디바이스 컨트롤 레지스터디바이스 컨트롤 레지스터디바이스 컨트롤 레지스터

디바이스컨트롤레지스터 는커맨드레지스터블록에있으(device control register)

며 호스트의쓰기전용레지스터로서소프트웨어리셋과인터럽트기능을제어한다, .

읽기 동작에서는 얼터네이트 스테이터스 레지스터로 동작한다.

DEVCTRL (0x0001 R)DEVCTRL (0x0001 R)DEVCTRL (0x0001 R)DEVCTRL (0x0001 R)

에러 레지스터에러 레지스터에러 레지스터에러 레지스터

에러레지스터 는커맨드레지스터블록에있으며 스테이터스레지스(error register) ,

터의 비트가 이 되었을때만 유효하다 각종 리셋 동작 직후 또는ERR 1 . Execute

동작명령종료후디바이스진단결과의코드를표시한다 일반명Device Diagnostic .

령 수행시 에러가 발생하여 이 되면 해당 에러 코드를표시한다 비트로 정의ERR=1 .

된내용은 뿐으로명령이코드나파라미터의오류로수행중단되었음을ABRT(abort)

나타낸다.

ERROR (0x0004 R/W)ERROR (0x0004 R/W)ERROR (0x0004 R/W)ERROR (0x0004 R/W)

Direction b7 b6 b5 b4 b3 b2 b1 b0

DEVCTRL R SRST nIEN

Reset 0x00 1 0 0 0 0 0 0 0

- 99 -

피처 레지스터피처 레지스터피처 레지스터피처 레지스터

피처레지스터 는커맨드레지스터블록에있으며 명령파라미터로(feature register) ,

주로 사용되는 레지스터인데 내용은 명령에 따라 달라진다, .

FEATURE (0x0005 R)FEATURE (0x0005 R)FEATURE (0x0005 R)FEATURE (0x0005 R)

섹터 카운트 레지스터섹터 카운트 레지스터섹터 카운트 레지스터섹터 카운트 레지스터

섹터카운트레지스터 는커맨드레지스터블록에있으며명령(sector count register) ,

파라미터로사용되는레지스터로 내용은명령에따라달라지며 주로데이터전송시, ,

섹터의 수를 나타낸다.

SECCNT (0x0006 R/W)SECCNT (0x0006 R/W)SECCNT (0x0006 R/W)SECCNT (0x0006 R/W)

레지스터레지스터레지스터레지스터LBA LOW / LBA MID / LBA HIGH / LBATOPLBA LOW / LBA MID / LBA HIGH / LBATOPLBA LOW / LBA MID / LBA HIGH / LBATOPLBA LOW / LBA MID / LBA HIGH / LBATOP

이 레지스터 들은 커맨드 레지스터 블록에 있으며명령 파라미터로 사용되는 레지스,

Direction b7 b6 b5 b4 b3 b2 b1 b0

ERROR R/WBRK/ICR

BUNC MC IDNF MCR ABRT TK0NF AMNF

Reset 0x01 0 0 0 0 0 0 0 1

Direction b7 b6 b5 b4 b3 b2 b1 b0

FEATURE R

Reset 0x00 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

SECCNT R/W

Reset 0x01 0 0 0 0 0 0 0 1

- 100 -

터로 내용은 명령에 따라 달라지며 데이터 전송시 어드레스의 실린더 번호와, , CHS

의 비트를 지정하는 파라미터로 사용된다LBA 0~23 .

.

LBALOW (0x0007 R/W)/ sector numberLBALOW (0x0007 R/W)/ sector numberLBALOW (0x0007 R/W)/ sector numberLBALOW (0x0007 R/W)/ sector number

LBAMID (0x0008 R/W) / cylinder lowLBAMID (0x0008 R/W) / cylinder lowLBAMID (0x0008 R/W) / cylinder lowLBAMID (0x0008 R/W) / cylinder low

LBAHIGH (0x0009 R/W) / cylinder highLBAHIGH (0x0009 R/W) / cylinder highLBAHIGH (0x0009 R/W) / cylinder highLBAHIGH (0x0009 R/W) / cylinder high

레지스터레지스터레지스터레지스터DEVICEHEAD/LBATOPDEVICEHEAD/LBATOPDEVICEHEAD/LBATOPDEVICEHEAD/LBATOP

디바이스 헤드 레지스터 는 커맨드 레지스터 블록에 있으며/ (device/head register) ,

비트를 통해 케이블에연결된 두개의디바이스 중 하나를선택하는 용도로DEV IDE

사용된다 여타비트값들은명령에따른파라미터로사용된다 하위 비트는 어. . 4 CHS

드레스의헤드선택부분 또는 의 비트를지정하는파라미터로주로사용, LBA 24~27

된다 와 의구분은비트 비트 로하는데 를사용할때는비트 을. LBA CHS 6(LBA ) , LBA 6

로 한다1 .

이로서기본적인 의최대어드레스는 로섹터당 를기준으로LBA 0x0F FF FF 512Byte

Direction b7 b6 b5 b4 b3 b2 b1 b0

LBALOW R/W LBA 7 LBA 6 LBA 5 LBA 4 LBA 3 LBA 2 LBA 1 LBA0

Reset 0x01 0 0 0 0 0 0 0 1

Direction b7 b6 b5 b4 b3 b2 b1 b0

LBAMID R/W LBA 15 LBA 14 LBA 13 LBA 12 LBA 11 LBA 10 LBA 9 LBA 8

Reset 0x00 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

LBAHIGH R/W LBA 23 LBA 22 LBA 21 LBA 20 LBA 19 LBA 18 LBA 17 LBA 16

Reset 0x00 0 0 0 0 0 0 0 0

- 101 -

하면 약 까지 어드레싱 할 수 있게 된다, 137Giga Byte .

LBATOP (0x000A R/W) / device headLBATOP (0x000A R/W) / device headLBATOP (0x000A R/W) / device headLBATOP (0x000A R/W) / device head

스테이터스 레지스터스테이터스 레지스터스테이터스 레지스터스테이터스 레지스터

스테이터스레지스터 는커맨드레지스터블록에있으며드라이브의(status register) ,

현재 동작 상태를 나타내는 레지스터로 하드디스크의 제어에서 중요한 위치를 차지

한다 스테이터스 레지스터의 각 비트값을 통해 현재의 디바이스 상태를 알 수 있는.

데 에서는잘쓰이지않는몇개의비트정의가삭제되고총 개의비트만정의, ATA-5 4

하고 있다.

STATUS (0x000B R)STATUS (0x000B R)STATUS (0x000B R)STATUS (0x000B R)

BSYBSYBSYBSY 를 나타내는 비트이다Busy .

1 : 현재드라이브가명령수행중이거나기타다른이유로 상태임을나타낸Busy

다 이상태에서드라이브의 다른레지스터를액세스하는것은무의미하며동작을계.

속 수행하기 위해서는 비트가 으로복귀할 때까지기다려야 한다 마찬가지로BSY 0 . .

일 때에는 스테이터스 레지스터의 다른 비트값도 무시된다BSY=1 .

0 : 액세스 가능한 상태이다.

DRDYDRDYDRDYDRDY 를 나타내는 비트이다Drive Ready .

1 : Ready

0 :

Direction b7 b6 b5 b4 b3 b2 b1 b0

LBATOP R/W LBA LBA27 LBA26 LBA 25 LBA 24

Reset 0x00 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

STATUS R/W BSY DRDY DWF DSC DRQ CORR IDX ERR

Reset 0x80 1 0 0 0 0 0 0 0

- 102 -

DRQDRQDRQDRQ 를 나타낸다Data Request .

1 : 드라이브가명령을수행하여호스트로데이터전송할준비가완료되면세트된

다.

0 :

ERRERRERRERR 비트로 명령수행중에 에러가 발생하였음나타낸다Error .

1 : 에러

0 : 정상

커맨드 레지스터커맨드 레지스터커맨드 레지스터커맨드 레지스터

커맨드레지스터 는커맨드레지스터블록에있으며 호스트에서(command register) ,

드라이브로명령을내릴때사용되는레지스터이다 명령은 비트의코드로되어있고. 8

호스트측에서는필요한명령코드를이레지스터에기입하게된다 명령에따라서는.

여러파라미터가함꼐필요한경우가있는데 이경우다른레지스터에파라미터가함,

께 전달 되어야 한다 커맨드 레지스터는 읽기 전용 레지스터 이다. .

COMMAND (0x000C R)COMMAND (0x000C R)COMMAND (0x000C R)COMMAND (0x000C R)

인터럽트 스테이터스 레지스터인터럽트 스테이터스 레지스터인터럽트 스테이터스 레지스터인터럽트 스테이터스 레지스터

인터럽트스테이터스레지스터 는내부레지스터이며 호스(interrupt status register) ,

트로 인터럽트를 요구할 때 사용하거나 펌웨어 인터럽트를 읽거나 클리어 할ATA ,

때 사용된다.

IRQSTS (0x0010 R/W)IRQSTS (0x0010 R/W)IRQSTS (0x0010 R/W)IRQSTS (0x0010 R/W)

Direction b7 b6 b5 b4 b3 b2 b1 b0

COMMAND R

Reset 0x 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

IRQSTS R/W ATIRQ - HWC STCMD STBF STBE STSR STAR

Reset 0x00 0 0 0 0 0 0 0 0

- 103 -

ATIRQATIRQATIRQATIRQ 인터럽트 요구를 나타내는 비트이다 펌웨어에서 세트 클리어ATA . /

하거나 커맨드 레지스터 블록의 스테이터스 를 읽을 때 하드웨어로 클리어 된다, .

1 : 인터럽트 요구

0 : 인터럽트 해제

HWCHWCHWCHWC 하드웨어 제어 여부를 설정하는 비트이다.

1 : 하드웨어 제어를 금지

0 : 하드웨어 제어를 허가

STCMDSTCMDSTCMDSTCMD 호스트에의한커맨드기록인터럽트의상태로이비트를 으로기록하0

는 것으로 클리어 된다.

0 : 클리어

커맨드 기록 인터럽트 발생1:

STBFSTBFSTBFSTBF 버퍼가가득찬상태를나타내는비트이다 이비트를 으로기록하는것으로. 0

클리어 된다.

0 : 클리어

버퍼 풀1:

STBESTBESTBESTBE 버퍼가비어있는상태를나타내는비트이다 이비트를 으로기록하는것으. 0

로 클리어 된다.

0 : 클리어

버퍼 빔1:

STSRSTSRSTSRSTSR 호스트에 의한 소프트웨어 리셋의 상태로 이 비트를 으로 기록하는 것으로0

클리어 된다.

0 : 클리어

소프트웨어리셋 발생1:

STARSTARSTARSTAR 호스트에 의한 리셋의 상태로 이 비트를 으로 기록하는 것으로 클리어ATA 0

된다.

0 : 클리어

리셋 발생1: ATA

- 104 -

핀 스테이터스 레지스터핀 스테이터스 레지스터핀 스테이터스 레지스터핀 스테이터스 레지스터

핀스테이터스레지스터 는내부레지스터이며 핀의상태를(pin status register) , ATA

읽을 수 있다.

PINSTS (0x0011 R)PINSTS (0x0011 R)PINSTS (0x0011 R)PINSTS (0x0011 R)

CRCECRCECRCECRCE 에러 스테이터스 이다UDMA CRC .

1 : 에러UDMA CRC

0 :

CSELCSELCSELCSEL 다CSEL .

1 : 디바이스 을 나타낸다1 .

0 : 디바이스 을 나타낸다0 .

PDIAGPDIAGPDIAGPDIAG 다PDIAG .

1 : 나타낸다.

0 : 나타낸다.

DASPDASPDASPDASP 다DASP .

1 : 나타낸다.

0 : 나타낸다.

DMACKDMACKDMACKDMACK 다DMACK .

1 : 나타낸다.

0 : 나타낸다.

핀 출력 레지스터핀 출력 레지스터핀 출력 레지스터핀 출력 레지스터

핀출력레지스터 는내부레지스터이며 핀에출력하기위(pin output register) , ATA

한 레지스터이다.

PINREQ (0x0012 R/W)PINREQ (0x0012 R/W)PINREQ (0x0012 R/W)PINREQ (0x0012 R/W)

Direction b7 b6 b5 b4 b3 b2 b1 b0

PINSTS R CRCE - - - CSEL PDIAG DASP DMACK

Reset 0x 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

- 105 -

CSELCSELCSELCSEL 펌웨어로 세트 클리어 가능하고 하드웨어 리셋때 을 초기한다/ CSEL .

을 나타낸다Device_num .

1 : 디바이스 슬레이브1( )

0 : 디바이스 마스터0( )

SLVPSLVPSLVPSLVP 슬레이브 존재여부 를 나타낸다Slave_present .

1 : 슬레이브 존재.

0 : 슬레이브 없음.

IORDYIORDYIORDYIORDY 에서는 이 비트가 로 세팅되어야 정상적으로 가 동작UDMA 1 UDMA

될 수 있다 전송 오류의 원인이 될수 있으므로 주의해야 한다. .

1 : IORDY Assert

0 : 나타낸다.

PDIAGPDIAGPDIAGPDIAG 펌웨어로 세트 클리어 가능하고 호스트 소프트웨어 리셋 커맨드 레/ ,

지스터기록 커맨드일때하드웨어적으로클리어된다, Execute Device Diagnostic .

1 : PDIAG Assert.

0 : 나타낸다.

DASPDASPDASPDASP 펌웨어로 세트 클리어 가능하다 호스트 소프트웨어 리셋으로 클리어 된다/ . .

1 : DASP Assert

0 : 나타낸다.

IOCS16IOCS16IOCS16IOCS16 다IOCS16 .

1 : IOCS16 Assert

0 : 나타낸다.

DMARQDMARQDMARQDMARQ 펌웨어로 세트 클리어 가능하다 모든 버퍼 데이터를 보냈을 때와 모/ .

든 버퍼 데이터를 수신했을 때 하드웨어 적으로 클리어 된다.

1 : DMARQ Assert.

0 : 나타낸다.

UDMAUDMAUDMAUDMA 입출력을 설정하는 비트이다UDMA .

PINREQ R/W CSEL SLVP IORDY PDIAG DASP IOCS16 DMARQ UDMA

Reset 0x03 0 0 1 0 0 0 0 0

- 106 -

1 : UDMA IN (Flash ATA-Host)

0 : UDMA OUT

버퍼 컨트롤 레지스터버퍼 컨트롤 레지스터버퍼 컨트롤 레지스터버퍼 컨트롤 레지스터

버퍼컨트롤레지스터 는내부레지스터이며 에있는(buffer control register) , Buffer

데이터를 로 출력하기 위한 중요한 레지스터이다ATA Data Bus .

읽기 쓰기 가능한 레지스터 이다 읽기 전용인 을 제외하고는 모/ . ATA_BUFF_OWN

두 읽기와 쓰기가 가능하다.

BUFFSTS (0x0013 R/W)BUFFSTS (0x0013 R/W)BUFFSTS (0x0013 R/W)BUFFSTS (0x0013 R/W)

TERMINTERMINTERMINTERMIN 전송후 종료 여부.

1: 전송후 종료

0 : NOP

PAUSEPAUSEPAUSEPAUSE 전송후 일시정지 여부 전송종료시에도 사용.( )

1: 전송후 종료 전송후 일시정지/

0 : NOP

BUFINTBUFINTBUFINTBUFINT 전송후 인터럽트 여부BUFFFULL/EMPTY .

1: 전송후 인터럽트인에이블BUFFFULL/EMPTY

0 : NOP

DMARDYDMARDYDMARDYDMARDY 전송중 강제 일시정지 아직 구현안함( )

1: 전송중 강제 일시정지

0 : 또는 재개NOP

모드 레지스터모드 레지스터모드 레지스터모드 레지스터DMADMADMADMA

모드 레지스터는 내부 레지스터로 의 종류와 속도를 설정하는 레지스터DMA DMA

Direction b7 b6 b5 b4 b3 b2 b1 b0

BUFFSTS R/W TERMIN PAUSE BUFINT DMARDY BUFF_NUM

Reset 0x03 0 0 0 0 0 0 0 0

- 107 -

이다.

MDMAMDMAMDMAMDMA 모드MDMA .

1 : 사용MDMA

0: 사용안함MDMA

UDMAUDMAUDMAUDMA 모드UDMA

1 : 사용UDMA

0 : 사용안함UDMA

UDMASPDUDMASPDUDMASPDUDMASPD 속도 컨트롤UDMA .

000 : UDMA mode 0 : 16.6MB/s

001: UDMA mode 1 : 25.0MB/s

010: UDMA mode 2 : 33.3MB/s

011: UDMA mode 3 : 44.4MB/s

100: UDMA mode 4 : 66.6MB/s

101: UDMA mode 5 : 100.0MB/s

110: UDMA mode 6 : 133.3MB/s

커맨드 스테이터스 레지스터커맨드 스테이터스 레지스터커맨드 스테이터스 레지스터커맨드 스테이터스 레지스터

커맨드스테이터스레지스터 는내부레지스터이며(command status register) , ATA

핀의 상태를 읽기 위한 레지스터 이다.

CMDSTS (0x0015 R)CMDSTS (0x0015 R)CMDSTS (0x0015 R)CMDSTS (0x0015 R)

Direction b7 b6 b5 b4 b3 b2 b1 b0

CMDSTS R - WMULTI WDMA WSEC RVSEC RMULTI RDMA RSEC

Reset 0x 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

DMAMODE R/W MDMA UDMA - - UDMASPD

Reset 0x03 0 0 0 0 0 0 0 0

- 108 -

버퍼 소유 레지스터버퍼 소유 레지스터버퍼 소유 레지스터버퍼 소유 레지스터

커맨드스테이터스레지스터 는내부레지스터이며(command status register) , ATA

핀의 상태를 읽기 위한 레지스터 이다.

BUFFADH(BUFFOWN) (0x0016 R/W)BUFFADH(BUFFOWN) (0x0016 R/W)BUFFADH(BUFFOWN) (0x0016 R/W)BUFFADH(BUFFOWN) (0x0016 R/W)

BUFFADL (0x0018 R/W)BUFFADL (0x0018 R/W)BUFFADL (0x0018 R/W)BUFFADL (0x0018 R/W)

딜레이 레지스터딜레이 레지스터딜레이 레지스터딜레이 레지스터IORDYIORDYIORDYIORDY

커맨드스테이터스레지스터 는내부레지스터이며(command status register) , ATA

핀의 상태를 읽기 위한 레지스터 이다.

IORDYDLY (0x0017 R/W)IORDYDLY (0x0017 R/W)IORDYDLY (0x0017 R/W)IORDYDLY (0x0017 R/W)

RDDLYRDDLYRDDLYRDDLY 리세트시 로 된다 읽기 쓰기 가능 하다. / .

00 : 딜레이 0

01 : 딜레이 1

10 : 딜레이 2

11 : 딜레이 3

WRDLYWRDLYWRDLYWRDLY 리세트시 로 된다 읽기 쓰기 가능 하다. / .

00 : 딜레이 0

01 : 딜레이 1

10 : 딜레이 2

Direction b7 b6 b5 b4 b3 b2 b1 b0

BUFFADD R/W ATA_ADDR

Reset 0x00 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

IORDYDLY R/W RDDLYWRDLY

Reset 0x03 0 0 0 0 1 0 1 1

- 109 -

11 : 딜레이 3

강제설정 레지스터강제설정 레지스터강제설정 레지스터강제설정 레지스터DDMARDYDDMARDYDDMARDYDDMARDY

단지 기록하는 것으로 리셋된다.

DDMARDY (0x0019 W)DDMARDY (0x0019 W)DDMARDY (0x0019 W)DDMARDY (0x0019 W)

RDYRDYRDYRDY

0 : Pause or Termination

1 : ReSume

버전 먼쓰 레지스터버전 먼쓰 레지스터버전 먼쓰 레지스터버전 먼쓰 레지스터

버전먼쓰레지스터는내부레지스터이며버전관리를위해사용하는레지스터이다.

MONTH (0x001E R)MONTH (0x001E R)MONTH (0x001E R)MONTH (0x001E R)

버전 데잇 레지스터버전 데잇 레지스터버전 데잇 레지스터버전 데잇 레지스터

버전데잇레지스터는내부레지스터이며버전관리를위해사용하는레지스터이다.

DATE (0x001E R)DATE (0x001E R)DATE (0x001E R)DATE (0x001E R)

Direction b7 b6 b5 b4 b3 b2 b1 b0

BUFFRST R/W RDY

Reset 0x03 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

MONTH R

Reset 0x 0 0 0 0 0 0 0 0

Direction b7 b6 b5 b4 b3 b2 b1 b0

DATE R

Reset 0x 0 0 0 0 0 0 0 0

- 110 -

아 멀티채널 컨트롤러. DMA MLC NAND Flash

플래시 컨트롤러는 고속 데이터 액세스를 위해 전용으로 설계되어 있으며NAND

레지스터 조작시 신중해야 한다.

동작의경우 를먼저수행한후 동작을수행시NAND Flash Read ECCRESET READ

키며 전송 종료후에는 즉시 신드롬 레지스터를 대피해야 한다, DMA .

에러의 여부를 파악할 수 있는 신드롬 스테이터스 레지스터는 계속 유효하다.

DMA

NAND Controller

512B

512B

NAND Controller

512B

512B

NAND

ECC

NAND

ECC

NAND

ECC

NAND

ECC

NAND

ECC

NAND

ECC

NAND

ECC

NAND

ECC

SMII/F

레지스터명레지스터명레지스터명레지스터명.I/O

OffsetDir. 설설설설 명명명명 초기값초기값초기값초기값

FDATA0 0x1E10 R/W 채널 데이터 입출력 레지스터0 0x

FDATA1 0x1E11 R/W 채널 데이터 입출력 레지스터1 0x

FDATA2 0x1E12 R/W 채널 데이터 입출력 레지스터2 0x

FDATA3 0x1E13 R/W 채널 데이터 입출력 레지스터3 0x

FSTDATAA 0x1E14 R 리드 스테이터스 레지스터

FSTDATAB 0x1E15 R 리드 스테이터스 레지스터

FCONFIG 0x1E18 R/W 컨피규 레지스터 0x01

FECCCRST 0x1E19 W 리셋 레지스터ECC 0x

FSYNDSTS 0x1E1A R 신드롬 스테이터스 레지스터 0x

FSYNDSTSA 0x1E1C R 신드롬 스테이터스 레지스터A 0x

FSYNDSTSB 0x1E1D R 신드롬 스테이터스 레지스터B 0x

FSYNDSTSC 0x1E1E R 신드롬 스테이터스 레지스터C 0x

FSYNDSTSD 0x1E1F R 신드롬 스테이터스 레지스터D 0x

FPARITYA0 0x1E20 R/W 채널 패리티 레지스터0 A 0x

FPARITYB0 0x1E21 R/W 채널 패리티 레지스터0 B 0x

FSYNDA0 0x1E22 R 채널 신드롬 레지스터0 A 0x

FSYNDB0 0x1E23 R 채널 신드롬 레지스터0 B 0x

FPARITYA1 0x1E24 R/W 채널 패리티 레지스터1 A 0x

FPARITYB1 0x1E25 R/W 채널 패리티 레지스터1 B 0x

FSYNDA1 0x1E26 R 채널 신드롬 레지스터1 A 0x

FSYNDB1 0x1E27 R 채널 신드롬 레지스터1 B 0x

FPARITYA2 0x1E28 R/W 채널 패리티 레지스터2 A 0x

- 111 -

데이터 입출력 레지스터데이터 입출력 레지스터데이터 입출력 레지스터데이터 입출력 레지스터

읽고 쓰기가 가능한 레지스터입니다.

FDATA0 (0x0200 R/W)FDATA0 (0x0200 R/W)FDATA0 (0x0200 R/W)FDATA0 (0x0200 R/W)

FDATA1 (0x0201 R/W)FDATA1 (0x0201 R/W)FDATA1 (0x0201 R/W)FDATA1 (0x0201 R/W)

FDATA2 (0x0202 R/W)FDATA2 (0x0202 R/W)FDATA2 (0x0202 R/W)FDATA2 (0x0202 R/W)

FDATA3 (0x0203 R/W)FDATA3 (0x0203 R/W)FDATA3 (0x0203 R/W)FDATA3 (0x0203 R/W)

DATADATADATADATA Flash Data Bus In/Out

데이터 입출력 레지스터데이터 입출력 레지스터데이터 입출력 레지스터데이터 입출력 레지스터

읽고 쓰기가 가능한 레지스터입니다.

FSTDATAA (0x0204 R/W)FSTDATAA (0x0204 R/W)FSTDATAA (0x0204 R/W)FSTDATAA (0x0204 R/W)

FSTDATAB (0x0205 R/W)FSTDATAB (0x0205 R/W)FSTDATAB (0x0205 R/W)FSTDATAB (0x0205 R/W)

FPARITYB2 0x1E29 R/W 채널 패리티 레지스터2 B 0x

FSYNDA2 0x1E2A R 채널 신드롬 레지스터2 A 0x

FSYNDB2 0x1E2B R 채널 신드롬 레지스터2 B 0x

FPARITYA3 0x1E2C R/W 채널 패리티 레지스터3 A 0x

FPARITYB3 0x1E2D R/W 채널 패리티 레지스터3 B 0x

FSYNDA3 0x1E2E R 채널 신드롬 레지스터3 A 0x

FSYNDB3 0x1E2F R 채널 신드롬 레지스터3 B 0x

Direction b7 b6 b5 b4 b3 b2 b1 b0

FDATA R/W DATA

Reset 0x

Direction b7 b6 b5 b4 b3 b2 b1 b0

FDATA R/W D25 D17 D9 D1 D24 D16 D8 D0

Reset 0x

Direction b7 b6 b5 b4 b3 b2 b1 b0

FDATA R/W D30 D22 D14 D6 D29 D21 D13 D5

Reset 0x

- 112 -

DATADATADATADATA Flash Data Bus In/Out

컨피규 레지스터컨피규 레지스터컨피규 레지스터컨피규 레지스터

플래시 메모리를 설정하기 위한 레지스터 이다NAND .

FCONFIG (0x1E18 R/W)FCONFIG (0x1E18 R/W)FCONFIG (0x1E18 R/W)FCONFIG (0x1E18 R/W)

TYPETYPETYPETYPE

0000: reset

CLE = 0

ALE = 0

0001: memsel:Flash Chip EnableFlash Chip EnableFlash Chip EnableFlash Chip Enable

DATA == 0000DATA == 0000DATA == 0000DATA == 0000 : nFCS0 Enable: nFCS0 Enable: nFCS0 Enable: nFCS0 Enable

DATA == 0001DATA == 0001DATA == 0001DATA == 0001 : nFCS1 Enable: nFCS1 Enable: nFCS1 Enable: nFCS1 Enable

DATA == 0010DATA == 0010DATA == 0010DATA == 0010 : nFCS2 Enable: nFCS2 Enable: nFCS2 Enable: nFCS2 Enable

DATA == 0011DATA == 0011DATA == 0011DATA == 0011 : nFCS3 Enable: nFCS3 Enable: nFCS3 Enable: nFCS3 Enable

DATA == 0100DATA == 0100DATA == 0100DATA == 0100 : nFCS4 Enable: nFCS4 Enable: nFCS4 Enable: nFCS4 Enable

DATA == 0101DATA == 0101DATA == 0101DATA == 0101 : nFCS5 Enable: nFCS5 Enable: nFCS5 Enable: nFCS5 Enable

DATA == 0110DATA == 0110DATA == 0110DATA == 0110 : nFCS6 Enable: nFCS6 Enable: nFCS6 Enable: nFCS6 Enable

DATA == 0111DATA == 0111DATA == 0111DATA == 0111 : nFCS7 Enable: nFCS7 Enable: nFCS7 Enable: nFCS7 Enable

0010: operation:Select Opeation mode

DATA == x001DATA == x001DATA == x001DATA == x001 : CLE :: CLE :: CLE :: CLE : Command write

DATA == x010DATA == x010DATA == x010DATA == x010 : ALE :: ALE :: ALE :: ALE : address write

DATA == 0011DATA == 0011DATA == 0011DATA == 0011 :::: data Write without DMA

DATA == 1011DATA == 1011DATA == 1011DATA == 1011 :::: data Write with DMA

DATA == 0100DATA == 0100DATA == 0100DATA == 0100 :::: data Read without DMA

DATA == 1100DATA == 1100DATA == 1100DATA == 1100 :::: data Read with DMA

Direction b7 b6 b5 b4 b3 b2 b1 b0

FCONFIG W TYPEDATA

R RnBIRQ3 RnBIRQ2 RnBIRQ1 RnBIRQ0 0 0 0 RnB

Reset 0x01 0 0 0 0 0 0 0 1

- 113 -

0011: irqena:enable RnBirq by Data[0] to high

0100: irqclr:clear RnBirq by Data[0] to high

0101: readset (4ch register read function)

0110: eccgrpset:Select ECC Register Access Group

DATA == 0000DATA == 0000DATA == 0000DATA == 0000 : A Channel: A Channel: A Channel: A Channel ECC value

DATA == 0001DATA == 0001DATA == 0001DATA == 0001 : B Channel: B Channel: B Channel: B Channel ECC Value

DATA == 0010DATA == 0010DATA == 0010DATA == 0010 : C Channel: C Channel: C Channel: C Channel ECC Value

DATA == 0011DATA == 0011DATA == 0011DATA == 0011 : D Channel: D Channel: D Channel: D Channel ECC Value

DATA == 0100DATA == 0100DATA == 0100DATA == 0100 : 0: 0: 0: 0 Lane ECC value

DATA == 0101DATA == 0101DATA == 0101DATA == 0101 : 1: 1: 1: 1 Lane ECC Value

DATA == 0110DATA == 0110DATA == 0110DATA == 0110 : 2: 2: 2: 2 Lane ECC Value

DATA == 0111DATA == 0111DATA == 0111DATA == 0111 : 3: 3: 3: 3 Lane ECC Value

RnBIRQ3RnBIRQ3RnBIRQ3RnBIRQ3 Channle 3 RnBIRQ

RnBIRQ2RnBIRQ2RnBIRQ2RnBIRQ2 Channle 2 RnBIRQ

RnBIRQ1RnBIRQ1RnBIRQ1RnBIRQ1 Channle 1 RnBIRQ

RnBIRQ0RnBIRQ0RnBIRQ0RnBIRQ0 Channle 0 RnBIRQ

RnBRnBRnBRnB Current Channle RnB Status

플래시 메모리를 설정하기 위한 레지스터 이다NAND .

리셋 레지스터리셋 레지스터리셋 레지스터리셋 레지스터ECCECCECCECC

기록 전용 레지스터입니다.

WHEN WRITE, CLEAR ECC REGISTER

FECCRST (0x0209 R)FECCRST (0x0209 R)FECCRST (0x0209 R)FECCRST (0x0209 R)

Direction b7 b6 b5 b4 b3 b2 b1 b0

FECCRST W

Reset 0x

- 114 -

전송전에 를수행 을기록 하여신드롬과패리티를클리어시DMA FECCRST (0x00 )

켜야 한다.

그렇지 않으면 전송 결과에 의한 신드롬 또는 패리티가 비정상적으로 씌여질 수 있

다.

신드롬 스테이터스 레지스터신드롬 스테이터스 레지스터신드롬 스테이터스 레지스터신드롬 스테이터스 레지스터

읽기전용레지스터입니다 개 와 개 전체의신드롬을읽기위한레지. 4 Group 4 Lane

스터로각각 는 는 는 는 의SA A Group, SB B Group, SC C Group, SD D Group ECC

에러 여부를 나타낸다.

펌웨어 에서는 이런 형식으로 표현하게 되면 된다if (SYNDST) ECC Routine; .

의 값이 이아니면 한결과에오류가있음을나타FSYNDSTS 0 , NAND Flash Read

낸다 해당 을 조사한 후에 해당되는 로 해당되는. Group , FCONFIG ECC Group /

을 선택하고 를 처리한다Lane FSYNDSTSA/B/C/D .

FSYNDSTS (0x1E1A R)FSYNDSTS (0x1E1A R)FSYNDSTS (0x1E1A R)FSYNDSTS (0x1E1A R)

S3S3S3S3 Syndrome Lane 3Syndrome Lane 3Syndrome Lane 3Syndrome Lane 3

1 : Error

0 : Pass

S2S2S2S2 Syndrome Lane 2Syndrome Lane 2Syndrome Lane 2Syndrome Lane 2

1 : Error

0 : Pass

S1S1S1S1 Syndrome Lane 1Syndrome Lane 1Syndrome Lane 1Syndrome Lane 1

1 : Error

0 : Pass

S0S0S0S0 Syndrome Lane 0Syndrome Lane 0Syndrome Lane 0Syndrome Lane 0

1 : Error

0 : Pass

Direction b7 b6 b5 b4 b3 b2 b1 b0

FSYNDST R S3 S2 S1 S0 SD SC SB SA

Reset 0x

- 115 -

SDSDSDSD Syndrome Channel DSyndrome Channel DSyndrome Channel DSyndrome Channel D

1 : Error

0 : Pass

SCSCSCSC Syndrome Channel CSyndrome Channel CSyndrome Channel CSyndrome Channel C

1 : Error

0 : Pass

SBSBSBSB Syndrome Channel BSyndrome Channel BSyndrome Channel BSyndrome Channel B

1 : Error

0 : Pass

SASASASA Syndrome Channel ASyndrome Channel ASyndrome Channel ASyndrome Channel A

1 : Error

0 : Pass

신드롬 스테이터스 레지스터신드롬 스테이터스 레지스터신드롬 스테이터스 레지스터신드롬 스테이터스 레지스터A/B/C/DA/B/C/DA/B/C/DA/B/C/D

읽기 전용 레지스터입니다

FSYNDSTSA (0x020C R)FSYNDSTSA (0x020C R)FSYNDSTSA (0x020C R)FSYNDSTSA (0x020C R)

FSYNDSTSB (0x020D R)FSYNDSTSB (0x020D R)FSYNDSTSB (0x020D R)FSYNDSTSB (0x020D R)

FSYNDSTSC (0x020E R)FSYNDSTSC (0x020E R)FSYNDSTSC (0x020E R)FSYNDSTSC (0x020E R)

FSYNDSTSD (0x020F R)FSYNDSTSD (0x020F R)FSYNDSTSD (0x020F R)FSYNDSTSD (0x020F R)

SxASxASxASxA

1 : Error

0 : Pass

SxBSxBSxBSxB

Direction b7 b6 b5 b4 b3 b2 b1 B0

FSYNDSTSA R S3A S2A S1A S0A S0D S0C S0B S0A

FSYNDSTSB R S3B S2B S1B S0B S1D S1C S1B S1A

FSYNDSTSC R S3C S2C S1C S0C S2D S2C S2B S2A

FSYNDSTSD R S3D S2D S1D S0D S3D S3C S3B S3A

Reset 0x

- 116 -

1 : Error

0 : Pass

SxCSxCSxCSxC

1 : Error

0 : Pass

SxDSxDSxDSxD

1 : Error

0 : Pass

패리티 레지스터패리티 레지스터패리티 레지스터패리티 레지스터AAAA

읽기와 쓰기 가능한 레지스터입니다.

읽기 패리티 를 계산함: A

쓰기 패리티 를 읽기 수행: A

FPARITYA0 (0x0210 R/W)FPARITYA0 (0x0210 R/W)FPARITYA0 (0x0210 R/W)FPARITYA0 (0x0210 R/W)

FPARITYA1 (0x0214 R/W)FPARITYA1 (0x0214 R/W)FPARITYA1 (0x0214 R/W)FPARITYA1 (0x0214 R/W)

FPARITYA2 (0x0218R/W)FPARITYA2 (0x0218R/W)FPARITYA2 (0x0218R/W)FPARITYA2 (0x0218R/W)

FPARITYA3 (0x021C R/W)FPARITYA3 (0x021C R/W)FPARITYA3 (0x021C R/W)FPARITYA3 (0x021C R/W)

패리티 레지스터패리티 레지스터패리티 레지스터패리티 레지스터BBBB

읽기와 쓰기 가능한 레지스터입니다.

읽기 패리티 를 계산함: B

쓰기 패리티 를 읽기 수행: B

FPARITYB0 (0x0211 R/W)FPARITYB0 (0x0211 R/W)FPARITYB0 (0x0211 R/W)FPARITYB0 (0x0211 R/W)

FPARITYB1 (0x0215 R/W)FPARITYB1 (0x0215 R/W)FPARITYB1 (0x0215 R/W)FPARITYB1 (0x0215 R/W)

FPARITYB2 (0x0219 R/W)FPARITYB2 (0x0219 R/W)FPARITYB2 (0x0219 R/W)FPARITYB2 (0x0219 R/W)

FPARITYB3 (0x021D R/W)FPARITYB3 (0x021D R/W)FPARITYB3 (0x021D R/W)FPARITYB3 (0x021D R/W)

Direction b7 b6 b5 b4 b3 b2 b1 b0

FPARITYA R/W

Reset 0x

Direction b7 b6 b5 b4 b3 b2 b1 b0

FPARITYB R/W

Reset 0x

- 117 -

신드롬 레지스터신드롬 레지스터신드롬 레지스터신드롬 레지스터AAAA

계산된신드롬 를읽어옴 의선택에따라 신드롬레지스터의내용이A . ECC Group

바뀐다 즉 는첫번째 의 그룹을나타내느경우와선택된그룹의. , ABCD Lane ABCD

의신드롬을선택할수있다 예를들어 일경우 이선Lane 0123 . ECC = 0000 A Group

택되기 때문에 는 의 신드롬FSYNDSTSA~D Lane 0~3

FSYNDA0 (0x0212 R)FSYNDA0 (0x0212 R)FSYNDA0 (0x0212 R)FSYNDA0 (0x0212 R)

FSYNDA1 (0x0216 R)FSYNDA1 (0x0216 R)FSYNDA1 (0x0216 R)FSYNDA1 (0x0216 R)

FSYNDA2 (0x021A R)FSYNDA2 (0x021A R)FSYNDA2 (0x021A R)FSYNDA2 (0x021A R)

FSYNDA3 (0x021E R)FSYNDA3 (0x021E R)FSYNDA3 (0x021E R)FSYNDA3 (0x021E R)

신드롬 레지스터는 전송 스테이터스 체크에 의해 전송DMA (DMA_INTSTS) DMA

종료후즉시레지스터를별도로보관시켜야한다 그렇지않으면올바른신드롬레지.

스터값이 전달되지 않을 수 있다.

신드롬 레지스터신드롬 레지스터신드롬 레지스터신드롬 레지스터BBBB

계산된 신드롬 를 읽어옴B

FSYNDB0 (0x0213 R)FSYNDB0 (0x0213 R)FSYNDB0 (0x0213 R)FSYNDB0 (0x0213 R)

FSYNDB1 (0x0217 R)FSYNDB1 (0x0217 R)FSYNDB1 (0x0217 R)FSYNDB1 (0x0217 R)

FSYNDB2 (0x021B R)FSYNDB2 (0x021B R)FSYNDB2 (0x021B R)FSYNDB2 (0x021B R)

FSYNDB3 (0x021F R)FSYNDB3 (0x021F R)FSYNDB3 (0x021F R)FSYNDB3 (0x021F R)

Direction b7 b6 b5 b4 b3 b2 b1 b0

FSYNDA R

Reset 0x

Direction b7 b6 b5 b4 b3 b2 b1 b0

FSYNDB R

Reset 0x

- 118 -

제 절 기술개발의 시뮬레이션 및 검증3 FPGA

보드 구성1. FPGA

가 보드의 제작. Altera FPGA

다음은 보드의 블록 다이어 그램이다Altera FPGA .

먼저 중 재 프로그램 가능한 인 를FPGA FPGA ALTERA APEX20K400EBC652

사용하여 기본 로직을 검증하였다.

그러나 속도가 느린 단점 때문에 전체 로직을 검증할 수 없었다, .

보드의 블록 다이어그램Altera FPGA

채널 인터페이스와 인터페이스를 위주로 검증을 수행하였다4 NAND ATA .

- 119 -

에서의 보드 검증Altera FPGA

- 120 -

나 보드의 제작. Actel FPGA

보드는 대규모 집적회로의 검증은 가능하지만 상대적으로 높은Altera FPGA ,

속도의 검증에는 불합리한 점이 나타났다IP .

이에 방식의 인 로 검증 방법을 변경하였다Fuse FPGA Actel FPGA .

는 급 게이트로 구성되어 있고 공정에 의해 제조Actel FPGA 250,000 , 0.15um

되어 속도 또한 상당히 빨라 시스템 성능이 최대 까지 낼 수 있는 고350MHz

속 이다 고속인 만큼 소켓에서의 전기적 저항을 줄이기 위해 직접 납땜FPGA .

을 할 수 있는 구조로 설계되었다 사실 소켓 버전의 를 제작하였지만 소. PCB ,

켓이 실제 스펙과 약간의 차이로 맞지 않아 그냥 개발을 진행하게 되었다.

의 차 검증보드Actel FPGA 1

- 121 -

다 차 보드의 제작. 2 Actel FPGA

전체 시스템 아키텍처가 확정되면서 개발 효율성을 위해 소켓에서의 전기적 저

항 문제를 포기하고 소켓방식으로 하나 더 제작하여 검증할 수 있도록 하였다.

에서 검증할 수 있는 핀을 별도로 준비하여 대응 할 수TLA714 Logic Analyser

있도록 하였다.

의 차 검증 보드Actel FPGA 2

- 122 -

라 에서의 성능. FPGA B/D

를 사용하여 측정한 결과 성능은 로 나왔다SLC NAND Read 40.16MByte/Sec .

- 123 -

시뮬레이션 환경의 구성2.

가 환경. Workstation

환경은 환경과 하에서 수행하DELL Workstation 380 1920x1200 Dual Monitor 

였다.

- 124 -

나 환경. ARM7TDMI Simulation

가장 큰 이슈는 의 시뮬레이션 환경을 구축하는 일이다 대부분ARM7TDMI PC .

의 모델은 에서만 동작 되기 때문이다ARM7TDMI SUN Workstation .

의 용 을 구하여 용으로 변경ARM7TDMI SUN Workstation VHDL Model PC

수정하여 환경하에서 시뮬레이션용 라이브러리를 모두 구축 완료하Model Tech

였다.

그러나 대단히 많은 모듈로 구성되어 있어서인지 시뮬레이션 속도가 상당히 늦,

었다 어쨌든 에서 의 시뮬레이션 환경을 구축한 것은 처음이. , PC ARM7TDMI

지 않나 생각된다 구축된 모델은 최신 모델이 아닌 초기의 모델이. ARM7TDMI

어서 를 기준으로 만들어 져 있어 시뮬레이션 단계에서 쉽지 않았다 추10MHz .

후에는 공정 파라미터를 반영하여 모델을 수정할 필요가 있다.

- 125 -

다 환경. AMBA Peripheral Simulation

의 모델이 구축된 후 의 표준ARM7TDMI , EASY_System_ASB(Micropack ASB)

개발 환경을 이용하여 개발 환경을 구축하였다 시간이 많이AMBA Simulation .

소요된 부분은 로 시행착오 끝에 아래와 같은 완전한 환ARM7TDMI wrapper

경을 구축할 수 있었다 비록 최신의 환경은 아니지만. AMBA 3.0 , ARM7TDMI

를 위주로한 시뮬레이션 환경은 이보다 더 좋을 수 없을 정도의 환경으로 사료

된다.

- 126 -

라 기타 환경. Simulation

코어만 환경하에서 을Model Tech Verilog + VHDL(ARM7TDMI ) Simulation

수행하였다 주로 개발에 중요한 만을 묶어서 빠른 시뮬레이션을 수. Peripheral

행하는 환경 또한 구축하여 개발의 효율성을 높였다.

블록에 대해서만 환경에서 검증하였다(ECC Synopsys simulation .)

- 127 -

마 환경. Synthesis

환경하에서 수행하였다Simplicity FPGA / ASIC .

와 을 쉽게 통합해서 관리할 수 있고Altera FPGA Actel FPGA Synopsys

를 직접 읽어올 수 있기 때문에 와Library MagnaChip 0.35um UMC 0.35um

공정을 대상으로 쉽게 평가할 수 있어 어떻게 보면 환경보다도 더 효, Synopsys

율성이 있었다.

다만 실제 에 문의한 사항은 환경을 선호하여 이에, Design House Synopsys ,

대해서는 가 만들어진 후 에서 진행하기로 하였다Verilog Code Design House .

- 128 -

바 검증 환경.

에서 수행하였다Tektronix TLA714 Logic Analyzer .

개발을 위해 중고로 구입한 제품이며 모듈이 포함되어 채널까지 볼, TLA7N3 102

수 있는 제품이다 제품 검증하는 과정에서 보다 스토리지 깊이가 큰 제품이 필.

요하였지만 나름대로 검증에서 많은 도움을 받은 장비이다, .

실제 개발중에는 스펙에서는 나오지 않는 처리 방법이 문제였, ATA/ATAPI-7

다 스펙에서는 그 처리 방법이 높은 수준으로 기술된 것이 아니어서 실제. PC

를 물려보면 예기치 못한 파형들이 나오곤 하였다.

는 이러한 스펙에 나와있지 않은 타이밍 특성등을 분석하는데 제격이었TLA714

다.

- 129 -

검증3. IP

가. Reed-Solomon ECC

RS(130,128) EncoderRS(130,128) EncoderRS(130,128) EncoderRS(130,128) Encoder

다음그림은 코드에대한인코더의입출력핀들을보여준다 데이터의입RS(130,128) .

출력은 바이트 심볼이 됨 단위로 이루어지며 불연속적인 입력을 가정하여 설계되(1 ) ,

었다 각 핀들의 기능은 표 에 설명되었으며 각 신호들의 타이밍 관계를 나타낸다. , .

RS(130,128) Encoder : Block Diagram

Pin Name I/OWidth

(Bit)Function

CLK IN동작 클럭 입력 데이터가 유효할때만 존재 그 외엔 값을1 : , ‘0‘

가짐 패리티 영역에선 클럭 존재( )

RST IN 인코더 초기화시에 사용 동기식1 ( )

FRAME_IN IN입력되는 프레임의 시작 의미 첫 번째 심볼 바이트 동안1 : (1 )

유지 그 외엔‘1’ , ‘0’.

VALID_IN IN 인코딩될 순수 데이터 영역 의미 패리티 영역에서는1 : ‘0’

DATA_IN[7..0] IN 인코더 입력 바이트 데이터8

CLK_OUTOU

T

과 동일 출력 데이터가 유효할 때만 존재 그 외엔1'CLK' : , ‘0’

값을 가짐

- 130 -

RS(130,128) Encoder : Timing Diagram

주 인코더 동작의 기준 클럭이 된다1) 'CLK' : .

또한 입력 데이터가 유효하지 않으면 값을 가지나 패리티 바이트, ‘0’ , (2 )

영역에서는 존재해야 한다.

주 출력데이터가유효 출력시엔패리티는유효한데이터 하지않으2) ‘CLK_OUT' : ( )

면 ’0‘

값을 가진다.

또한 출력 데이터 인식의 기준 클럭이 된다, .

RS(130,128) DecoderRS(130,128) DecoderRS(130,128) DecoderRS(130,128) Decoder

코드에대한디코더의입출력핀들을보자 데이터의입출력은인코더에RS(130,128) .

서와 마찬가지로 바이트 심볼 단위로 이루어지며 불연속적인 입력을 가정하여 설(1 ) ,

계되었다 각 핀들의 기능은 표 에 설명되었으며 그림은 각 신호들의 타이밍 관계를. ,

나타낸다.

RS(130,128) Decoder : Block Diagram

- 131 -

출력데이터를메모리에저장시에사용될어드레스데DATA_ADDRESS[7..0]OUT8

이터

Pin Name I/O

Widt

h

(Bit)

Function

CLK IN 1동작 클럭 입력 데이터가 유효할때만 존재 그 외엔 값을: , ‘0‘

가짐

RST IN 1 디코더 초기화시에 사용 동기식( )

FRAME_IN IN 1입력되는 프레임의 시작 의미 첫 번째 심볼 바이트 동안: (1 )

유지 그 외엔‘1’ , ‘0’.

DATA_IN[7..0] IN 8 디코더 입력 바이트 데이터

CLK_OUT IN 1과 동일 출력 데이터가 유효할때만 존재 그 외엔'CLK' : , ‘0’

값을 가짐

FRAME_OUTOU

T1 과 동일 출력 프레임 대상‘FRAME_IN' :

DATA_OUT[7..0]OU

T8 디코더 출력 바이트 데이터

- 132 -

나 기반. DMA Pipeline MLC NAND Flash Controller

를 기반으로 으로 를 만드는 것은DMA Pipeline MLC NAND Flash controller

일단 개의 를 만든 후 이를 개로 붙여 확장하, 1 MLC NAND Flash Controller , 4

였고 이의 처리를 순서적으로 처리할 수 있도록 만들어 보았다.

아래 그림은 의 를 보여주는 파형MLC NAND Flash Controller Read / Write

이다 보다시피 시에는 빠르게 데이터를 가져오지만 시에는 기록후. Read , Write

상당히 긴 시간이 필요하였다.

는 쉽게 설계 및 검증 수행이 되었다Pipeline MLC NAND Flash Controller .

- 133 -

다. Ultra ATA Controller

는 당초 설계시 까지로 확정하였지만Ultra ATA Controller Ultra ATA 133 ,

의 호환성 문제로 인해서 실제 으로 사용하는Ultra ATA 133 Ultra ATA 100

사례가 많았다 삼성 의 경우도 개발은 까지 대응하도록. HDD Ultra ATA 133

하였지만 실제 제품 출하시에는 으로 설정하여 출하하는 것을, Ultra ATA 100

볼 수 있었다.

이에 에 대한 호환성을 체크할 여유가 없다고 판단하여Ultra ATA 133 Ultra

에서 검증을 수행하도록 하였다ATA 100 .

실제 다양한 와 다양한 를 연결하여 테스트 해 본 결과 액세스 방법HDD PC

이 서로 달라 상당한 파형의 차이를 보였다.

게다가 규격에서 제시하는 것 보다 상당히 큰 편차를 보여 이에 대한 접근 방법

은 시행착오법을 통하여 다양한 와의 인터페이스를 맞추어 나갔다PC .

의 시뮬레이션 파형은 다음과 같다Ultra ATA 133 IP .

- 134 -

에 물린 상태에서 로 를 검증한 파형이PC Logic Analyser Ultra ATA 133 IP

다 에러 없이 모두 잘 전송됨을 확인할 수 있었다. .

- 135 -

제 절 기술개발의 소프트웨어4

알고리즘의 검증1.

가 알고리즘의 구현. RS-ECC

알고리즘은 에서 검증을 수행하였다RS-ECC Borland C .

unsigned char DataBuffer[128] =

{

0x9a,0xeb,0xe2,0x5b,0x2d,0xd1,0x8b,0xfd,

0x7e,0xd9,0x73,0xe2,0xe7,0xdf,0x40,0xf8,

0xf1,0xff,0xaf,0xfb,0xa9,0xff,0xef,0x7f,

0xf5,0x7e,0xe6,0xfb,0xde,0xf3,0xef,0xfe,

0x70,0xf7,0xfc,0x77,0xd3,0xdd,0xbf,0xde,

0xe7,0xe0,0xfc,0xf3,0xbd,0x7a,0x96,0xe0,

0x2d,0xfa,0xfe,0xd6,0xd7,0x19,0x37,0xdb,

0xef,0x49,0x9b,0xf7,0xeb,0x3e,0x7f,0xe4,

0x78,0xf1,0xa6,0xfa,0xfc,0xfd,0x7d,0x79,

0xef,0x90,0xfb,0x7a,0x3d,0xbf,0x9d,0xfb,

0x96,0x7e,0xee,0xde,0x21,0xde,0x20,0x7d,

0xfe,0x7f,0x08,0x3f,0x7d,0xf5,0xaf,0x76,

0xef,0xf7,0x69,0xfc,0xd7,0xfe,0xff,0x89,

0x79,0xe7,0xfe,0xfd,0xbe,0xbf,0xac,0xbb,

0xf9,0x6f,0xe6,0xae,0x75,0xfe,0xb7,0x63,

0x9a,0x9e,0xe1,0x6b,0xf5,0xfc,0xff,0xb7};

입력 데이터가 위와 같을 때 이에 대한 시에 패리티는, RS-ECC Encoder 12h, 13h

가 된다 디코딩시에는 연산값이 가 되어 이상이 없음을 확. Syndrome 00h, 00h

인할 수 있었다 용의 로서 확실한 오류 정정 성능을 보여주어 만족. MLC ECC

할 정도이다.

- 136 -

다음은 환경하에서 수행한 알고리즘 검증 화면이다DOS .

- 137 -

나 알고리즘의 구현. CRC

는 시리얼 전송에서 데이타의 신뢰성을 검증하기CRC(Cyclic Redundancy Check)

위한 에러 검출 방법의 일종이다.

간단한 에러 검출방법으로는 비트에 의한 방법과 에 의한 에러parity check-sum

검출 방법이 있지만 비트에 의한 방법은 데이타 중에 한꺼번에 비트나parity 2 4

비트가 변하게 되면 검출을 할 수 없고 에 의한 방법은 한 바이트에, check-sum

서 다른 바이트에서는 로 에러가 생기는 경우만 해도 에러는 검출 되지 않+1, -1

는다 즉 이들 방법으로는 에러를 검출해 낼 수 있는 확률이 대단히 낮다. , .

에 의한 방법은 높은 신뢰도를 확보하며 에러 검출을 위한 오버헤드가 적고CRC ,

랜덤 에러나 버스트 에러를 포함한 에러 검출에 매우 좋은 성능을 갖는 것을 특

징으로 한다.

기본 원리

비트의 주어진 정보가 있을때 이를 비트 만큼 자리를 올리고 미리 약속한n , k k

비트의 키 값으로 나누면 비트의 나머지가 남게 된다 송신측에서는 원래의 정r .

보 비트를 비트 자리 올린 것에 비트의 나머지를 더해서 비트의 데이타k r n+r

를 만들어 보낸다.

수신측에서는 수신된 비트의 데이타를 키 값으로 나누어 보고 나머지가 정확n+r

히 이 되는지를 검사하면 된다0 .

이 때 가 비트이면 가 되고 키 값으로는 수학자 들에 의해 정해진 값k 16 CRC-16

을 주로 사용한다.

에는 이 많이 사용된다 그리고 비트의 나머지를CRC-16 0x8005 . r Frame Check

라고 부른다 여기서 계산에 사용되는 연산의 세계Sequence(FCS) . CRC modulo-2

를 살펴보자.

계산시의 사칙연산은 를 고려하지 않는다CRC carry .

는 생각하지 않음1 + 1 = 0 (carry )

0 - 1 = 1

- 138 -

덧셈 연산은 뺄셈 연산과 결과가 같으며 연산과도 같다XOR .

다항식 표현 방법을 통해 계산 방법을 살펴보자CRC .

진 다항식으로 표시(1) 2

예 비트열 다항식) 101 --> x2 + 1

정보 다항식 데이터 비트열의 다항식으로: P(x) = pn xn-1 + ... + p3x2 + p2x1 +

p1

다항식 생성을 위한 다항식으로 미리 정해진 키 값CRC : CRC G(x) ( )

몫: Q(x)

나머지: R(x)

전송 데이타: T(x)

계산 방법(2) CRC

를 비트 만큼 자리를 올리고 에 를 곱하는 것과 동일 로 나누면P(x) k ( P(x) xk ) G(x)

이다xk P(x) = Q(x)*G(x) +/- R(x) .

는 다항식의 최고 차수(k CRC )

의 최고 차수는R(x) = dk xk-1 + .. + d2x1 + d1 ( R(x) k-1)

비트열 을 라 함dk ... d2 d1 FCS(Frame Check Sequence)

위 식에서 는 와 같다xk P(x) + R(x) Q(x)*G(x) .

즉 는 의 배수이므로 로 나누면 나머지가 임을 알 수, xk P(x) + R(x) G(x) G(x) 0

있다.

결과적으로 전송되는 데이터 비트열 : pn ... p3 p2 p1 dk ... d2 d1

즉 전송 이 된다, T(x) = xk P(x) + R(x) .

- 139 -

연산의 최적화

의 계산은 일반 나눗셈 명령을 이용해 구현할 수 없다 비씩 하면서CRC . 1 shift

연산을 통해 나머지를 구해야 한다XOR .

하지만 정보 비트에 대해 하나하나씩 연산을 하는 것에는 분명 속도 개선의 여지

가 있다.

실제 계산 시에는 모든 바이트에 대해 다항식에 대한 값을 계산해 표로CRC CRC

만들어 두고 들어오는 데이타를 인덱스로 삼아 계산값을 바로 얻는 방법을 사용

한다.

feedback[1] = ddd[0] ^ crc_out[15];

feedback[2] = ddd[1] ^ crc_out[14];

feedback[3] = ddd[2] ^ crc_out[13];

feedback[4] = ddd[3] ^ crc_out[12];

feedback[5] = ddd[4] ^ crc_out[11] ^ feedback[1];

feedback[6] = ddd[5] ^ crc_out[10] ^ feedback[2];

feedback[7] = ddd[6] ^ crc_out[9] ^ feedback[3];

feedback[8] = ddd[7] ^ crc_out[8] ^ feedback[4];

feedback[9] = ddd[8] ^ crc_out[7] ^ feedback[5];

feedback[10] = ddd[9] ^ crc_out[6] ^ feedback[6];

feedback[11] = ddd[10] ^ crc_out[5] ^ feedback[7];

feedback[12] = ddd[11] ^ crc_out[4] ^ feedback[8] ^ feedback[1];

feedback[13] = ddd[12] ^ crc_out[3] ^ feedback[9] ^ feedback[2];

feedback[14] = ddd[13] ^ crc_out[2] ^ feedback[10] ^ feedback[3];

feedback[15] = ddd[14] ^ crc_out[1] ^ feedback[11] ^ feedback[4];

feedback[16] = ddd[15] ^ crc_out[0] ^ feedback[12] ^ feedback[5];

crc_in[0] = feedback[16];

crc_in[1] = feedback[15];

crc_in[2] = feedback[14];

crc_in[3] = feedback[13];

crc_in[4] = feedback[12];

crc_in[5] = feedback[11] ^ feedback[16];

crc_in[6] = feedback[10] ^ feedback[15];

- 140 -

crc_in[7] = feedback[9] ^ feedback[14];

crc_in[8] = feedback[8] ^ feedback[13];

crc_in[9] = feedback[7] ^ feedback[12];

crc_in[10] = feedback[6] ^ feedback[11];

crc_in[11] = feedback[5] ^ feedback[10];

crc_in[12] = feedback[4] ^ feedback[9] ^ feedback[16];

crc_in[13] = feedback[3] ^ feedback[8] ^ feedback[15];

crc_in[14] = feedback[2] ^ feedback[7] ^ feedback[14];

crc_in[15] = feedback[1] ^ feedback[6] ^ feedback[13];

알고리즘은 역시 에서 검증이 수행되었고 연산 결과는 다래와CRC Borland C ,

같이 에 대한 값을 정확히 확인할 수 있었다CRC16 .

- 141 -

소프트웨어2.

가 논리 물리 테이블 작성 알고리즘. /

- 142 -

나 섹터 알고리즘. MLC NAND Write

- 143 -

다 섹터 알고리즘. MLC NAND Read

- 144 -

라 블록 관리 알고리즘. MLC NAND BAD

데이터 블록이 까지 있다고 가정할 때 섹터 까지 데이터를 기록하는0 ~ 15 , 7~9

경우 먼저 비어있는 블록인 을 할당하여 기존 데이터 블록에서, Blank Block 1

섹터 까지를 복사한다 다음으로 섹터 를 에 복사를0~6 . (A) 7~9 Blank Block1

하는데 섹터 은 정상적으로 복사되었고 섹터 은 오류가 발생하였다 섹터 는7 , 8 . 9

아직 복사가 안되었다 이때 를 새로이 할당하여 이전에 복사.(B) , Blank Block 2

했던 의 섹터 까지를 에 복사한다Blank Block 1 0~7 Blank Block 2 . (C)

그리고 에서 섹터 과 를 에 복사한다Write Data 8 9 Blank Block 2 . (D)

마지막으로 데이터 블록의 까지 복사한다10~15 . (E)

이것이 기본적인 블록 관리 알고리즘이다BAD .

- 145 -

마 알고리즘. MLC NAND Wear Leveling

고정된 블록에 항상 같은 데이터를 기록하면 는 셀의 신뢰성이 저MLC NAND

하된다 그러므로 셀의 신뢰성을 높여주기 위해 소위 뺑뺑이 를 돌리는 알고. “ ”

리즘을 사용하고 있다 기능에 의한 자동 수명 관리 기능을 사용. Wear Leveling

하고 있다.

논리 블록 어드레스 가 물리 블록 로 맵핑된다고 할 때 논리- (LBA) X (PBA) A ,

블록 어드레스 는 물리 블록 로 맵핑된다Y B .

호스트가 에 기록할 때 여유블록중 를 선택한다 복사가 완료되면- LBA X , C . ,

블록 는 모두 지우고 여유블록으로 보내진다 현재 는 블록 에 매A . LBA X C

핑되어 있다.

호스트가 에 기록하면 여유블록중 선택되고 복사후 블록 는 지워지- LBA Y , B

고 여유 블록으로 보내어 진다.

이 때 블록 와 블록 는 이후에 다시 사용될 것이다- , A B .

- 146 -

바 수명관리 알고리즘. MLC NAND

플래시 메모리는 그 사이클이 만회로 제한되어 있는 점이 가장MLC NAND 1

큰 문제점이다 이의 수명 연장을 위해서 를 도입하고. 32bit ECC Bad Block

을 도입하고 거기에 나이테 관리기법 을 도Management (BBM) Wear Leveling

입하여 전체 수명을 만회에 머무는 것을 만회에서 만회까지 사용할 수 있1 10 100

게 된다 이 수명의 이슈는 신뢰성에 치명적인 영향이 가기 때문에 우리는 개.

발 중에 하이닉스와 많은 회의를 가졌다 문제는 수명은 얼마든지 늘릴 수 있으.

나 그렇게 되면 단가가 높아진다는 것이다 이에 대해서는 좀더 논의를 거쳐야, .

하고 보다 많은 연구가 뒤따라야 하겠다 어쨌든 와 그리고. , ECC BBM Wear

은 동작중에 자동적으로 감지하도록 되어 있어 수명을 늘리는 효과를Leveling

얻을 수 있게 된다.

Erase CycleErase CycleErase CycleErase Cycle

Pro

babili

ty o

f Er

ror

Pro

babili

ty o

f Er

ror

Pro

babili

ty o

f Er

ror

Pro

babili

ty o

f Er

ror

MLC NANDMLC NANDMLC NANDMLC NAND

32bit ECC32bit ECC32bit ECC32bit ECC

BBMBBMBBMBBMWearWearWearWearLevelingLevelingLevelingLeveling

10K – 100K 100K – 1M

Life cycleLife cycleLife cycleLife cycle

- 147 -

사. MLC NAND Low Level Driver

크게 가지로 하드웨어 의존함수와 하드웨어 독립함수 그리고 유틸리티로 나뉘3

어 진다.

/****************************************************************************

Hardware dependent function

****************************************************************************/

void NAND_Open(void);

void NAND_CommandInput(ubyte ubCommand); /* Put a command on

bus*/

void NAND_AddressInput(ubyte ubAddress); /* Put an address on bus*/

void NAND_DataInput(dataWidth ubData); /* Write a data to flash*/

dataWidth NAND_DataOutput(void); /* Read a data from the flash*/

void NAND_Close(void);

void NAND_SetWriteProtect(void); /* Set WP pint to Low*/

void NAND_UnsetWriteProtect(void); /* Set WP pint to High*/

void NAND_WaitTime(ubyte nanoseconds); /* Wait time */

/************** Hardware dependent function ****************/

/****************************************************************************

Hardware independent function

****************************************************************************/

NAND_Ret NAND_BlockErase(udword udAddress);

NAND_Ret NAND_CacheProgram(udword udPageAddresses[],ubyte

piecesNumber, dataWidth **Buffers, uword udlength[],ubyte* errorPage);

NAND_Ret NAND_CopyBack(udword udSourceAddr, udword

udDestinationAddr,uword *offsetInPage,uword *chunkSizes,uword

numOfChunks, dataWidth **Buffers);

NAND_Ret NAND_PageRead(udword *udAddress, dataWidth *Buffer,uword

- 148 -

numOfChunks, uword *udlength);

NAND_Ret NAND_PageProgram(udword *udAddress, dataWidth

**Buffer,ubyte numOfChunks, uword *udlength);

void NAND_ReadElectronicSignature(dataWidth *ubBuffer);

void NAND_Reset(void);

NAND_Ret NAND_SpareProgram(udword udAddress, dataWidth

*Buffer,udword udlength);

NAND_Ret NAND_SpareRead(udword udAddress, dataWidth *Buffer, udword

udlength);

NAND_Ret NAND_CacheRead(udword udAddress, dataWidth *Buffer,

udword length);

void NAND_Terminate_CacheRead(void);

NAND_Ret NAND_CacheReadDataOutput(dataWidth* Buffer,udword length);

void NAND_Lock(void);

void NAND_LockDown(void);

NAND_Ret NAND_UnLock(udword startBlock,udword endBlock);

void NAND_UnlockDown(void);

NAND_Ret NAND_ReadBlockLockStatus(udword address);

ubyte NAND_ReadStatusRegister(void);

/************** Hardware independent function ***************/

/****************************************************************************

Utility

****************************************************************************/

#define ADDRESS_2_BLOCK(Address) (Address>>16 + SHIFT_A8)

#define BLOCK_SIZE

(PAGE_DATA_SIZE*NUM_PAGE_BLOCK)

#define BLOCK_2_ADDRESS(Num_block) ((udword) (Num_block<<(16 +

SHIFT_A8)))

/************** Utility ****************************************************/

- 149 -

아. ATA Command Processing

아래는 의 일부 이다 레지스터로부터 값을 입ATA Command Processing . ATA

력 받아 을 참조하여 각 명령을 수행하는 구조로 되어ATA Command Table

있다.

VOID ATA_CommandProcessing(VOID)

{

CRCErrFlag = FALSE;

if ( MediaCtrl.CopyTailMinimum == TRUE )

{

if (MediaCtrl.NeedRelease)

{

if ( (ata_regs.command != 0x30) && (ata_regs.command

!= 0xc5) && (ata_regs.command != 0xca) )

{

MediaCtrl.OnWriteCmd = FALSE;

MediaCtrl.FindBlockFlag = FALSE;

}

}

}

ATA_CMD_table();

}

- 150 -

자. Host Communication Protocol

- 151 -

제 장 결론3

제 절 기술 개발 결과 정리1 .

반도체 스토리지 의 개발 흐름1. SoC

전체 시스템 개발 흐름은 아래 그림과 같다.

- 152 -

반도체 의2. ASIC Floor Plan

된 는 으로 예상되었다Estimation Die Size 4500 x 5000 .

당사는 만 중심으로 진행하였기 때문에 은Front-End Design Back-End Design

에 일임하여 진행하였다Design House .

- 153 -

반도체 시제품의3. ASIC Die

개발이 진행되는 동안 에서는 파트가 다시 분사되어 어수선MagnaChip MCU

한 분위기가 되어 있었고 공정 또한 여타의 이슈로 예전과 다르게 만족스러운,

상황이 아니었다 측과 협의하여 으로 공정을 최종. Design House UMC 0.35um

결정하였다 이슈는 를 사용하는 문제였는데 이전에 진행하였던. ARM7TDMI IP ,

국내 반도체 회사의 도움으로 를 사용할 수 있게 되었다 이 자리를 빌어 감IP .

사의 뜻을 전한다.

는 구조를 사용하였고 추후의 업그레이드 등을 대PAD Power Doble Bonding ,

비하여 는 대응 는 대응할 수 있도록 하였다PAD 144pin , Package 128TQFP .

- 154 -

사양4. Package : 128TQFP

- 155 -

주요 회로도5. Evaluation B/D

- 156 -

- 157 -

6. Evaluation B/D

는 샘플칩 도착시 바로 테스트 할 수 있도록 개발 되었다Evaluation B/D .

채널의 를 인터페이스 할 수 있도록 되었고 칩 셀렉트 확장시4 MLC NAND , 8

개까지의 를 구동시킬 수 있도록 하였다MLC NAND .

용 소킷과 용 소킷 그리고 체크할 신호들에128TQFP Package 48TSOP Package

대해서는 에 연결하는 단자를 설치하였다Logic Analyser .

- 158 -

7. Target B/D

는 인치 를 대체하기 위한 것으로 의 인터Target B/D 1.0 HDD CE Type IDE

페이스를 사용하였다 만 해 놓고 최종 이 끝난후. PCB Design Chip Evaluation

에 제작할 예정이다.

- 159 -

성능8. Evaluation B/D

시스템 소프트웨어의 튜닝 절차가 아직 남아 있지만 현재 수준에서 성능은 다,

음과 같다.

예상되는 최대속도는 이나Read :40MByte/Sec, Write 6MByte/Sec ,

실제칩에서는 튜닝의 과제가 남아 있다.

Read Speed : 20MByte/Sec

Random Access : 0.9ms

CPU uilization : 1%

현재 하이닉스 는 가 지원되지 않기 때문에 예상되는 속도MLC NAND Cache

보다 덜 나오고 있다 내년 초에 나올 개선품에서는 대폭 빨라질 것으로 기대된.

다.

의 목표 속도에 도달하기 위해서는 파이프라인 처리 부분에서 보다 파이Read

프라인 효율화를 꽤하여야 한다 하지만 인치 에 비해 배 이상 빠른. , 1.0 HDD 5

속도를 보이고 있다.

- 160 -

소비전력은 에서 측정되었으며 아래와 같은 파형을 얻을 수 있었Current Probe ,

다 시 낸드 플래시 메모리 내부에서 변환기에서 소비되는 전류. Access DC-DC

가 많기 때문에 시스템에서 라는 수치는 정상적임을 알 수 있다120mA .

- 161 -

제 절 활용에 대한 건의 및 기대효과2

활용에 대한 건의1.

개발의 목적은 를 사용하는 휴대정보통신 기기용 스토리지MLC NAND SoC

이다 주요하게는 데이터 저장장치 용도로 사용하는 데 주안점을 가지고 있다. .

최근 시장에서 를 사용하는 들이 등장하였다 그러나MLC NAND Flash Card . ,

신뢰성이 보장되지 않는 상태의 값싼 컨트롤러들이 범람하면서 시장 질서를 해

치고 있다 이 때문에 소비자들의 요구가 빈번해져 많은 문제가 되고 있는. A/S

것이 현실이다.

하이닉스 반도체와 협의한 결과 제품의 신뢰성은 경제성 때문에MLC NAND

어쩔 수 없는 트랜드로 받아 들여지고 있다고 한다.

특히 휴대폰 디지털 카메라 등의 응용분야에서는 신제품 출시 사이클이, , MP3,

짧아 사실상 오랜 시간 사용한 다는 점은 큰 문제가 없어 보인다.

본 제품은 나름대로 기존 제품에 비해 를 사용하는 것을 전제로, MLC NAND

신뢰성 향상에 주안점을 두어 개발하였으나 이에 대한 충분한 테스트가 필요하,

다.

플래시 메모리는 데이터 저장 용도로 적합하며 등을 저장하MLC NAND Code

고 부팅 용도로 활용하는 용도로는 적합하지 않다OS .

플래시 메모리 사업은 한국이 주도로 하는 사업으로 여기에는 치열한 가격 경쟁

이 뒤따른다.

본 개발에서는 공정을 사용하였으나 가격 경쟁력을 확보하고 보다 더0.35um ,

높은 성능을 기대하기 위해서는 공정으로 진화해 가야 한다0.18um .

대만의 관련 업체들은 이미 공정 사용이 일반화 되었고 을 중0.18um , 0.13um

심으로 개발하고 있는 것으로 분석된다.

대만의 업체들은 보기에는 작아보이지만 실제로는 국내 대기업 연구소 못지 않,

는 연구인력과 대규모 재원을 확보하고 있는 것으로 보인다.

현재 다양한 시장을 분석해본 결과 마케팅이 가능한 시장은 이 급격Navigation

히 성장하고 있으며 와 결합된 분야로 성장이 유망한 분야로 사료된다, DMB .

- 162 -

와 와 결합된 자동차용 스토리지 분야는 향후 휴대폰을DMB Wibro, HSDPA

이을 차세대 기술로 각광받을 것으로 전망된다.

- 163 -

- 164 -

특수한 분야이긴 하지만 현재 인공위성 센터로부터 과학위성, KAIST SaTReC

에 대한 스토리지 개발에 대해 협의를 진행하고 있다.

현재 개발된 기술은 우주 공간에 존재하는 방사선에 대해 어느정32bit RS-ECC

도 대처할 수 있는 성능을 가지고 있어서 현재 개발된 성과를 보강 발전하면 충

분히 대응 가능하다고 사료된다 다만 방사선에 견디는 기술들은 다양한 측면. ,

에서의 접근이 필요하기 때문에 관련 업체들과 협의하여 진행할 예정이다.

- 165 -

기대효과2.

형 플래시 메모리는 년 공급과잉의 상태로 예측된다 그리고NAND 2007 . 2007

년 에 육박하는 가격 하락이 예상된다 이는 플래시 메모리의 보급60% . NAND

이 급격히 증가될 것임을 증명해 주는 예측이다.

- 166 -

년 이후의 시장은 이 때문에 대단히 중요한 시장이 될 것으로 전망된다2007 .

특히 도시바는 인치 사업을 정리하였다 마찬가지로 삼성도 인치, 0.85 HDD . 0.85

사업을 정리하였다 이는 오로지 의 가격이 급격히 하락하였HDD . NAND Flash

기 때문에 가능한 일로 해석된다.

- 167 -

상용화 계획3.

내수 경기의 침체에 따라 년 이후의 시장은 이 때문에 대단히 중요한 시장, 2007

이 될 것으로 전망된다.

특히 도시바는 인치 사업을 정리하였다 마찬가지로 삼성도 인치, 0.85 HDD . 0.85

사업을 정리하였다 이는 오로지 의 가격이 급격히 하락하였HDD . NAND Flash

기 때문에 가능한 일로 플래시 메모리로 대체될 수 있는 시장 이다NAND .

먼저 년초에 나올 새로운 개선된 구조에 튜닝하여 전체 성능의 최대2007 MLC

로 나오도록 개선 작업을 하고 상용화를 위한 가격 경쟁력을 갖기 위해서는,

수준에서의 공정으로 가야 할것으로 예상 된다0.13um .

현재 를 사용하고 있으나 에서는 을 넘기가 어려운ARM7TDMI , 0.35um 50MHz

상황이며 좀 더 복잡한 알고리즘을 구현을 위해서는 급의, MLC 200MHz CPU

의 사용이 필요시 된다Core .

현재 하이닉스의 유통관련 한국 일본 관련 회사들로부터 에 대한 새로운/ MLC

제품을 제시해줄 것을 요구받고 있다 보다 많은 용량과 보다 저렴한 가격 그리.

고 합리적인 수명에 대한 요구이다.

또한 국내 대기업으로부터도 제품에 대한 논의와 일본 상사를 통한 일본, OEM

대기업들과의 제품 논의가 있었다 국내 대기업의 제품은 실제 인건비 조. OEM

차 계산할 수 없는 박한 수준이었다 반면 일본 대기업에서 요청한 사항은. ,

조건도 아니고 어느정도의 마진을 합리적으로 보장하고 있었고 그 물량OEM , ,

또한 국내 대기업과는 비교가 안될 정도 였다.

우선 시장은 일본 시장을 주로 하여 상용화 과정으로 들어갈 예정이다. 32GByte

제품이 상용화의 목표가 될 예정이다MLC .

- 168 -

참고문헌

1. PC CARD STANDARD 8.0 [1999, PCMCIA/JEIDA] 

2. The Art of Error Correction Coding, [2002, John Wiley & Sons, Robert H.]

3. SSFDC Specification, [2003, TOSHIBA]

4. Flash Application Design Guidelines [2000, Hitachi]

5. ATA-ATAPI-7 Draft Specification [www.t13.org]

디바이스 로우레벨제어 월간 마이크로소프트웨어6. ATA/ATAPI 1,2,3,4 [2003, ]

7. Hard Disk Drive Specifications Travelstar [2004, Hitachi]

8. MSM5500 Device Spefication [2001, Qualcomm]

9. Samsung NAND Flash Data Sheet

10. Hynix NAND Flash Data Sheet

- 169 -

부록

전시회 참가 사진1.

가 년 대한민국 기술대전 참가 년 월. 2005 (2005 10 )

- 170 -

나 년 참가 년 월. 2006 SEK2006/IT Techno-Mart (2006 6 )

- 171 -

다 참가 년 월 하이닉스와 공동. iSEDEX 2006 (2006 10 : )

- 172 -

반도체 네트워크 년 월호 논문 기고2. 2006 11

- 173 -

개발 환경3.

- 174 -

- 175 -

시뮬레이션 소스4. CRC 16 C

/////////////////////////////////////////////////////////////////////

//// CRC16 Modules ////

//// copyright(c)All Right Reserved by Firstor ////

/////////////////////////////////////////////////////////////////////

#include <stdio.h>

static unsigned short DataBuffer[3844] = {

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x3b19,0x043b,0xad82,0x0ca5,0xdb54,0x4c30,0xceee,0xd881,

중략

0x19c3,0xf2ec,0x1ad0,0x0833,0x3b13,0x3319,0x173b

};

unsigned short crc16(unsigned short *dd)

{

unsigned short i,j;

unsigned char ddd[16];

unsigned short dd_All;

unsigned char crc_out[16];

unsigned short crc_out_All;

unsigned char crc_in[16];

unsigned short crc_in_All;

unsigned char feedback[17];

unsigned short feedback_All;

crc_out_All = 0xbaba;

- 176 -

feedback_All = 0;

crc_in_All = 0;

dd_All = 0;

for(i=0; i< 3841; i++) {

dd_All = dd[i];

for(j=0; j<16; j++) {

feedback[j+1] = (feedback_All >> j) & 0x01;

crc_out[j] = (crc_out_All >>j) & 0x01;

crc_in[j] = (crc_in_All>>j) & 0x01;

ddd[j] = (dd_All >> j) & 0x01;

}

feedback[1] = ddd[0] ^ crc_out[15];

feedback[2] = ddd[1] ^ crc_out[14];

feedback[3] = ddd[2] ^ crc_out[13];

feedback[4] = ddd[3] ^ crc_out[12];

feedback[5] = ddd[4] ^ crc_out[11] ^ feedback[1];

feedback[6] = ddd[5] ^ crc_out[10] ^ feedback[2];

feedback[7] = ddd[6] ^ crc_out[9] ^ feedback[3];

feedback[8] = ddd[7] ^ crc_out[8] ^ feedback[4];

feedback[9] = ddd[8] ^ crc_out[7] ^ feedback[5];

feedback[10] = ddd[9] ^ crc_out[6] ^ feedback[6];

feedback[11] = ddd[10] ^ crc_out[5] ^ feedback[7];

feedback[12] = ddd[11] ^ crc_out[4] ^ feedback[8] ^ feedback[1];

feedback[13] = ddd[12] ^ crc_out[3] ^ feedback[9] ^ feedback[2];

feedback[14] = ddd[13] ^ crc_out[2] ^ feedback[10] ^ feedback[3];

feedback[15] = ddd[14] ^ crc_out[1] ^ feedback[11] ^ feedback[4];

feedback[16] = ddd[15] ^ crc_out[0] ^ feedback[12] ^ feedback[5];

crc_in[0] = feedback[16];

crc_in[1] = feedback[15];

crc_in[2] = feedback[14];

crc_in[3] = feedback[13];

crc_in[4] = feedback[12];

crc_in[5] = feedback[11] ^ feedback[16];

crc_in[6] = feedback[10] ^ feedback[15];

crc_in[7] = feedback[9] ^ feedback[14];

crc_in[8] = feedback[8] ^ feedback[13];

crc_in[9] = feedback[7] ^ feedback[12];

crc_in[10] = feedback[6] ^ feedback[11];

crc_in[11] = feedback[5] ^ feedback[10];

crc_in[12] = feedback[4] ^ feedback[9] ^ feedback[16];

- 177 -

crc_in[13] = feedback[3] ^ feedback[8] ^ feedback[15];

crc_in[14] = feedback[2] ^ feedback[7] ^ feedback[14];

crc_in[15] = feedback[1] ^ feedback[6] ^ feedback[13];

feedback_All = 0;

crc_in_All = 0;

dd_All = 0;

for(j=0; j<16; j++) {

feedback_All |=(feedback[j+1]&0x01) << j;

// crc_out_All |= ( crc_out[j] & 0x01) << j;

crc_in_All |= (crc_in[j] & 0x01) <<j;

}

crc_out_All = crc_in_All;

if ((i%8)==0) printf("\n%02X:",i);

printf("%04X,",crc_out_All);

}

return crc_out_All;

}

int main(void)

{

FILE *stream;

unsigned short datain;

unsigned short crcresult;

unsigned int i;

if ((stream = fopen("data.txt","r")) == NULL) {

printf("Cannot Open Input File.\n");

return 1;

}

for(i=0;;i++) {

if (fscanf(stream,"%04x", &datain) != EOF) {

if( (i%8)==0 ) printf("\n");

printf("0x%04x,", datain);

}

else {

printf("EOL %d\n",i);

- 178 -

break;

}

}

printf("CRC Encode Start\n");

crcresult = crc16(DataBuffer);

printf("CRC16=%04X\n",crcresult);

return 0;

}

- 179 -

시뮬레이션 소스5. CRC 16 Verilog

/////////////////////////////////////////////////////////////////////

//// CRC16 Modules ////

//// copyright(c)All Right Reserved by Firstor ////

/////////////////////////////////////////////////////////////////////

`timescale 1 ns / 1 ps

module crc16(

resetb,

crc16_valid,

crc16_clr,

crc16_clk,

dd_valid,

dd,

crc_out

);

input resetb;

input crc16_valid;

input crc16_clr;

input crc16_clk;

input dd_valid;

input [15:0] dd;

output [15:0] crc_out;

reg [15:0] crc_out;

wire [15:0] crc_in;

wire [16:1] feedback;

assign feedback[1] = dd[0] ^ crc_out[15];

assign feedback[2] = dd[1] ^ crc_out[14];

assign feedback[3] = dd[2] ^ crc_out[13];

assign feedback[4] = dd[3] ^ crc_out[12];

assign feedback[5] = dd[4] ^ crc_out[11] ^ feedback[1];

assign feedback[6] = dd[5] ^ crc_out[10] ^ feedback[2];

assign feedback[7] = dd[6] ^ crc_out[9] ^ feedback[3];

assign feedback[8] = dd[7] ^ crc_out[8] ^ feedback[4];

assign feedback[9] = dd[8] ^ crc_out[7] ^ feedback[5];

- 180 -

assign feedback[10] = dd[9] ^ crc_out[6] ^ feedback[6];

assign feedback[11] = dd[10] ^ crc_out[5] ^ feedback[7];

assign feedback[12] = dd[11] ^ crc_out[4] ^ feedback[8] ^ feedback[1];

assign feedback[13] = dd[12] ^ crc_out[3] ^ feedback[9] ^ feedback[2];

assign feedback[14] = dd[13] ^ crc_out[2] ^ feedback[10] ^ feedback[3];

assign feedback[15] = dd[14] ^ crc_out[1] ^ feedback[11] ^ feedback[4];

assign feedback[16] = dd[15] ^ crc_out[0] ^ feedback[12] ^ feedback[5];

assign crc_in[0] = feedback[16];

assign crc_in[1] = feedback[15];

assign crc_in[2] = feedback[14];

assign crc_in[3] = feedback[13];

assign crc_in[4] = feedback[12];

assign crc_in[5] = feedback[11] ^ feedback[16];

assign crc_in[6] = feedback[10] ^ feedback[15];

assign crc_in[7] = feedback[9] ^ feedback[14];

assign crc_in[8] = feedback[8] ^ feedback[13];

assign crc_in[9] = feedback[7] ^ feedback[12];

assign crc_in[10] = feedback[6] ^ feedback[11];

assign crc_in[11] = feedback[5] ^ feedback[10];

assign crc_in[12] = feedback[4] ^ feedback[9] ^ feedback[16];

assign crc_in[13] = feedback[3] ^ feedback[8] ^ feedback[15];

assign crc_in[14] = feedback[2] ^ feedback[7] ^ feedback[14];

assign crc_in[15] = feedback[1] ^ feedback[6] ^ feedback[13];

always @(negedge resetb or posedge crc16_clk)

if (~resetb)

crc_out <= 16'BABA;

else if (crc16_clr)

crc_out <= 16'hBABA;

else if (crc16_valid & dd_valid)

crc_out <= crc_in;

endmodule

- 181 -

소스6. ATA Command Processing C

/////////////////////////////////////////////////////////////////////

//// ATA_CommandProcessing Modules ////

//// copyright(c)All Right Reserved by Firstor ////

/////////////////////////////////////////////////////////////////////

VOID ATA_CommandProcessing(VOID)

{

ErrFlag = FALSE;

if ( MediaCtrl.CopyTailMinimum == TRUE )

{

if (MediaCtrl.NeedRelease)

{

if ( (ata_regs.command != 0x30) && (ata_regs.command != 0xc5) &&

(ata_regs.command != 0xca) )

{

CPUTCHAR('b');

MEDIA_CopyTail_B();

MediaCtrl.OnWriteCmd = FALSE;

MediaCtrl.FindBlockFlag = FALSE;

}

}

}

switch(ata_com_key)

{

case ATA_COM_KEY_DMA:

{

ata_com_key &= (~ATA_COM_KEY_DMA);

switch(ata_regs.command)

{

case ATA_COM_READDMA:

{

MEDIA_ReadSector_6(TRUE);

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_WRITEDMA:

- 182 -

{

MEDIA_WriteSector_6(TRUE);

if(MediaCtrl.WriteFailFlag == TRUE)

ata_com_result = ATA_COM_ERROR;

else

ata_com_result = ATA_COM_OK;

break;

}

default:

{

break;

}

}

if (MediaCtrl.SetFeatureUDMA == TRUE)

{

if (SFR_ATA_PINSTS & 0x80)

{

ata_com_result = ATA_COM_ERROR;

}

}

if(ata_com_result == ATA_COM_OK)

{

//SFR_ATA_ERROR &= 0xFE;

SFR_ATA_ERROR = 0;

SFR_ATA_STATUS |= (DRDY | DSC);

}

else if(ata_com_result == ATA_COM_ERROR)

{

if (CRCErrFlag == TRUE)

SFR_ATA_ERROR = (ABRT | ICRC);

else

SFR_ATA_ERROR = ABRT;

SFR_ATA_STATUS |= (DRDY | DSC | ERR);

}

//SFR_ATA_INTRQST |= 0x80;

SFR_ATA_STATUS &= ~BSY;

SFR_ATA_STATUS &= ~DRQ;

- 183 -

//SFR_ATA_STATUS |= ( DRDY | DSC );

SFR_ATA_INTRQST |= 0x80; //assert INTRQ

break; //kjc-9

}

case ATA_COM_KEY_PIOOUT:

{

ata_com_key &= (~ATA_COM_KEY_PIOOUT);

switch(ata_regs.command)

{

case ATA_COM_WRITESECT:

case ATA_COM_WRITELONG:

case ATA_COM_WRITEMULTI:

{

MEDIA_WriteSector_6(FALSE);

if(MediaCtrl.WriteFailFlag == TRUE)

ata_com_result = ATA_COM_ERROR;

else

ata_com_result = ATA_COM_OK;

break;

}

default:

{

break;

}

}

if(ata_com_result == ATA_COM_OK)

{

SFR_ATA_ERROR = 0;

SFR_ATA_STATUS |= (DRDY | DSC);

}

else if(ata_com_result == ATA_COM_ERROR)

{

SFR_ATA_ERROR = 0x04;

SFR_ATA_STATUS |= (DRDY | DSC | ERR);

}

SFR_ATA_STATUS &= ~BSY;

- 184 -

SFR_ATA_STATUS &= ~DRQ;

SFR_ATA_STATUS |= ( DRDY | DSC );

SFR_ATA_INTRQST |= 0x80;

break;

}

case ATA_COM_KEY_PIOIN:

{

ata_com_key &= (~ATA_COM_KEY_PIOIN);

switch(ata_regs.command)

{

case ATA_COM_IDENTIFYDEV:

{

ATA_IdentifyDrive();

break;

}

case ATA_COM_READSECT:

case ATA_COM_READLONG:

case ATA_COM_READMULTI:

{

MEDIA_ReadSector_6(FALSE);

break;

}

default:

{

break;

}

}

SFR_ATA_STATUS &= ~BSY;

SFR_ATA_STATUS &= ~DRQ;

SFR_ATA_STATUS |= ( DRDY | DSC );

SFR_ATA_INTRQST |= 0x80;

break;

}

case ATA_COM_KEY_ND:

{

UART_Printf("[%02x] ", ata_regs.command);

- 185 -

ata_com_key &= (~ATA_COM_KEY_ND);

PUTCHAR('n');

switch(ata_regs.command)

{

case ATA_COM_EXEDEVDIAG:

{

ATA_DriveDiag(FALSE);

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_IDLE:

{

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_INITDRIVEPARAM:

{

if(1)

{

ATA_InitDriveParam();

ata_com_result = ATA_COM_OK;

}

else

{

//ATA_InitDriveParam();

ata_com_result = ATA_COM_ERROR;

}

break;

}

case ATA_COM_VERIFY_SECTOR_RETRY:

case ATA_COM_VERIFY_SECTOR:

{

ATA_VerifyCommand();

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_RECALIBRATE: //0x10

- 186 -

{

SFR_ATA_INTRQST &= ~0x80;

ATA_SeekSector(0);

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_SEEK:

{

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_SETFEATURE:

{

ATA_SetFeatures();

break;

}

case ATA_COM_SETMULTIMODE:

{

MediaCtrl.SetMultipleNumber = SFR_ATA_SECTCNT;

if (MediaCtrl.SetMultipleNumber > 1)

{

PUTCHAR('e');

MediaCtrl.SetMultipleNumber = 0;

ata_com_result = ATA_COM_ERROR;

}

else

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_STANDBY:

{

PUTCHAR('8');

ata_com_result = ATA_COM_OK;

break;

}

case ATA_COM_FLUSHCACHE:

{

ata_com_result = ATA_COM_OK;

break;

- 187 -

}

default:

{

PUTCHAR('a');

ata_com_result = ATA_COM_OK;

break;

}

}

if(ata_com_result == ATA_COM_OK)

{

//SFR_ATA_ERROR &= 0xFE;

if (ata_regs.command != ATA_COM_EXEDEVDIAG)

SFR_ATA_ERROR = 0;

SFR_ATA_STATUS |= (DRDY | DSC);

}

else if(ata_com_result == ATA_COM_ERROR)

{

SFR_ATA_ERROR = 0x04;

SFR_ATA_STATUS |= (DRDY | DSC | ERR);

}

SFR_ATA_STATUS &= 0x7F;

SFR_ATA_STATUS |= (DRDY | DSC);

SFR_ATA_INTRQST |= 0x80;

break;

}

default:

{

PUTCHAR('d');

ata_com_key &= (~ATA_COM_KEY_ANY);

SFR_ATA_STATUS &= 0x7F;

SFR_ATA_ERROR = 0x04;

SFR_ATA_STATUS |= (DRDY | DSC | ERR);

SFR_ATA_INTRQST |= 0x80;

break;

}

}

}

- 188 -

테스트 프로그램 소스7. Pipelined MLC C

/////////////////////////////////////////////////////////////////////

//// ATA_CommandProcessing Modules ////

//// copyright(c)All Right Reserved by Firstor ////

/////////////////////////////////////////////////////////////////////

int FLASH_ReadSector_3_C(unsigned int PhysSectorAddr, UCHAR Number, UCHAR buf_sel)

{

UCHAR S_Cnt, S_Cnt_1;

UCHAR SecCnt[4], SecCnt_1, OrgSectorCount, Cnt, buf_sel_1[4];

UCHAR ECC_Err_Status, nCE;

int TmpAddr[4];

OrgSectorCount = (UCHAR)MediaCtrl.Sector & 0x03;

TmpAddr[0] = PhysSectorAddr>>2;

TmpAddr[1] = (PhysSectorAddr+1)>>2;

TmpAddr[2] = (PhysSectorAddr+2)>>2;

TmpAddr[3] = (PhysSectorAddr+3)>>2;

nCE = FLASH_CE_A(PhysSectorAddr);

SecCnt_1 = OrgSectorCount;

SecCnt[0] = SecCnt_1 & 0x03;

SecCnt[1] = (SecCnt_1+1) & 0x03;

SecCnt[2] = (SecCnt_1+2) & 0x03;

SecCnt[3] = (SecCnt_1+3) & 0x03;

buf_sel_1[0] = buf_sel & 0x03;

buf_sel_1[1] = (buf_sel+1) & 0x03;

buf_sel_1[2] = (buf_sel+2) & 0x03;

buf_sel_1[3] = (buf_sel+3) & 0x03;

FLASH_CheckBusy_A(SecCnt[0]);

FLASH_CheckBusy_A(SecCnt[1]);

FLASH_CheckBusy_A(SecCnt[2]);

FLASH_CheckBusy_A(SecCnt[3]);

GPIO4_HIGH();

SFR_FLASH_CFG_4(SecCnt[0]) = FLASH_CTRL_CLEAR;

FLASH_CE_B(nCE, SecCnt[0], TRUE);

SFR_FLASH_CFG_4(SecCnt[1]) = FLASH_CTRL_CLEAR;

FLASH_CE_B(nCE, SecCnt[1], TRUE);

SFR_FLASH_CFG_4(SecCnt[2]) = FLASH_CTRL_CLEAR;

- 189 -

FLASH_CE_B(nCE, SecCnt[2], TRUE);

SFR_FLASH_CFG_4(SecCnt[3]) = FLASH_CTRL_CLEAR;

FLASH_CE_B(nCE, SecCnt[3], TRUE);

SFR_FLASH_CFG_4(SecCnt[0]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[0]) = FLASH_CMD_READ;

SFR_FLASH_CFG_4(SecCnt[1]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[1]) = FLASH_CMD_READ;

SFR_FLASH_CFG_4(SecCnt[2]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[2]) = FLASH_CMD_READ;

SFR_FLASH_CFG_4(SecCnt[3]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[3]) = FLASH_CMD_READ;

SFR_FLASH_CFG_4(SecCnt[0]) = FLASH_CTRL_ALE;

FmcAddr_Adv_A_4(TmpAddr[0], SecCnt[0]);

SFR_FLASH_CFG_4(SecCnt[1]) = FLASH_CTRL_ALE;

FmcAddr_Adv_A_4(TmpAddr[1], SecCnt[1]);

SFR_FLASH_CFG_4(SecCnt[2]) = FLASH_CTRL_ALE;

FmcAddr_Adv_A_4(TmpAddr[2], SecCnt[2]);

SFR_FLASH_CFG_4(SecCnt[3]) = FLASH_CTRL_ALE;

FmcAddr_Adv_A_4(TmpAddr[3], SecCnt[3]);

SFR_FLASH_CFG_4(SecCnt[0]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[0]) = 0x30;

SFR_FLASH_CFG_4(SecCnt[1]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[1]) = 0x30;

SFR_FLASH_CFG_4(SecCnt[2]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[2]) = 0x30;

SFR_FLASH_CFG_4(SecCnt[3]) = FLASH_CTRL_CLE; // CLE

SFR_FLASH_DATA_4(SecCnt[3]) = 0x30;

FLASH_CheckBusy_A(SecCnt[0]);

FLASH_CheckBusy_A(SecCnt[1]);

FLASH_CheckBusy_A(SecCnt[2]);

FLASH_CheckBusy_A(SecCnt[3]);

SFR_FLASH_CFG_4(SecCnt[0]) = FLASH_CTRL_READ_DMA;

SFR_DMA_CTRL_CH(SecCnt[0]) = ( (0x80|FLASH_DMA_DELAY) + buf_sel_1[0] );

SFR_FLASH_CFG_4(SecCnt[1]) = FLASH_CTRL_READ_DMA;

SFR_DMA_CTRL_CH(SecCnt[1]) = ( (0x80|FLASH_DMA_DELAY) + buf_sel_1[1] );

SFR_FLASH_CFG_4(SecCnt[2]) = FLASH_CTRL_READ_DMA;

SFR_DMA_CTRL_CH(SecCnt[2]) = ( (0x80|FLASH_DMA_DELAY) + buf_sel_1[2] );

SFR_FLASH_CFG_4(SecCnt[3]) = FLASH_CTRL_READ_DMA;

SFR_DMA_CTRL_CH(SecCnt[3]) = ( (0x80|FLASH_DMA_DELAY) + buf_sel_1[3] );

- 190 -

MediaCtrl.FlashDMAEndFlag = FALSE;

SFR_DMA_START |= 0x0f; // trigger 4 ch at the same time

while(MediaCtrl.FlashDMAEndFlag == FALSE); // wait until 4 sector read end

if ( MediaCtrl.UseECC == TRUE )

{

if ( (SFR_FLASH_SYNDSTS_4(SecCnt[0])&0x0f) | (SFR_FLASH_SYNDSTS_4(SecCnt[1])&0x0f) |

(SFR_FLASH_SYNDSTS_4(SecCnt[2])&0x0f) | (SFR_FLASH_SYNDSTS_4(SecCnt[3])&0x0f)

)

{

NOP();

}

else

{

goto SKIP_ECC;

}

for ( S_Cnt_1 = OrgSectorCount, Cnt = 0 ; Cnt < Number ; S_Cnt_1++, Cnt++ )

{

S_Cnt = S_Cnt_1 & 0x03;

PUTCHAR(S_Cnt+0x36);

ECC_Err_Status = SFR_FLASH_SYNDSTS_4(S_Cnt) & 0x0f;

if ( ECC_Err_Status )

{

if ( ECC_Err_Status & 0x01 )

{

SFR_FLASH_CFG_4(S_Cnt) = 0x60;

MediaCtrl.Syndrome1 = SFR_FLASH_SYND1_4(S_Cnt);

MediaCtrl.Syndrome2 = SFR_FLASH_SYND2_4(S_Cnt);

if ( (MediaCtrl.Syndrome1 == 0x00) && (MediaCtrl.Syndrome2 ==

0x56) ) { NOP();}

else correct(buf_sel, 0x00);

}

if ( ECC_Err_Status & 0x02 )

{

SFR_FLASH_CFG_4(S_Cnt) = 0x61;

//EDPRINTF(("<%02x %02x>", SFR_FLASH_SYND1_4(S_Cnt),

SFR_FLASH_SYND2_4(S_Cnt)));

MediaCtrl.Syndrome1 = SFR_FLASH_SYND1_4(S_Cnt);

MediaCtrl.Syndrome2 = SFR_FLASH_SYND2_4(S_Cnt);

if ( (MediaCtrl.Syndrome1 == 0x00) && (MediaCtrl.Syndrome2 ==

0x56) ) { NOP();}

- 191 -

else correct(buf_sel, 0x01);

}

if ( ECC_Err_Status & 0x04 )

{

SFR_FLASH_CFG_4(S_Cnt) = 0x62;

MediaCtrl.Syndrome1 = SFR_FLASH_SYND1_4(S_Cnt);

MediaCtrl.Syndrome2 = SFR_FLASH_SYND2_4(S_Cnt);

if ( (MediaCtrl.Syndrome1 == 0x00) && (MediaCtrl.Syndrome2 ==

0x56) ) { NOP();}

else correct(buf_sel, 0x02);

}

if ( ECC_Err_Status & 0x08 )

{

SFR_FLASH_CFG_4(S_Cnt) = 0x63;

//EDPRINTF(("<%02x %02x>", SFR_FLASH_SYND1_4(S_Cnt),

SFR_FLASH_SYND2_4(S_Cnt)));

MediaCtrl.Syndrome1 = SFR_FLASH_SYND1_4(S_Cnt);

MediaCtrl.Syndrome2 = SFR_FLASH_SYND2_4(S_Cnt);

if ( (MediaCtrl.Syndrome1 == 0x00) && (MediaCtrl.Syndrome2 ==

0x56) ) { NOP();}

else correct(buf_sel, 0x03);

}

}

}

}

SKIP_ECC :

for ( S_Cnt_1 = OrgSectorCount, Cnt = 0 ; Cnt < Number ; S_Cnt_1++, Cnt++ )

{

S_Cnt = S_Cnt_1 & 0x03;

FLASH_CheckBusy_A(S_Cnt);

SFR_FLASH_CFG_4(S_Cnt) = FLASH_CTRL_CLEAR;

FLASH_CE_B(nCE, S_Cnt, FALSE);

}

return 0;

}

void FLASH_WriteSector_8(unsigned int PhysSectorAddr, UCHAR buf_sel)

{

- 192 -

UCHAR SectorCount;

int TmpAddr;

SectorCount = (UCHAR)MediaCtrl.Sector & 0x03;

TmpAddr = PhysSectorAddr>>2;

FLASH_CheckBusy_A(SectorCount);

//FLASH_Reset();

SFR_FLASH_CFG_4(SectorCount) = FLASH_CTRL_CLEAR;

//Select Flash

//SFR_FLASH_CFG_4(SectorCount) = 0x10; //Flash #0

FLASH_CE_B(FLASH_CE_A(PhysSectorAddr), SectorCount, TRUE);

//Command Write

SFR_FLASH_CFG_4(SectorCount) = FLASH_CTRL_CLE;

SFR_FLASH_DATA_4(SectorCount) = FLASH_CMD_WRITE;

SFR_FLASH_CFG_4(SectorCount) = 0x30;

//Address Write

SFR_FLASH_CFG_4(SectorCount) = FLASH_CTRL_ALE;

FmcAddr_Adv_A_4(TmpAddr, SectorCount);

//Data Write

SFR_FLASH_CFG_4(SectorCount) = FLASH_CTRL_WRITE_DMA;

irq_dma0 = (0x01 << SectorCount);

SFR_DMA_CTRL_CH(SectorCount) = 0x30 + buf_sel;

SFR_DMA_START |= (0x01 << SectorCount);

while(irq_dma0);

// Do Write

SFR_FLASH_CFG_4(SectorCount) = FLASH_CTRL_CLE;

SFR_FLASH_DATA_4(SectorCount) = FLASH_CMD_DOWRITE;

if (ata_addr_info.lba.Long < CheckBusyLimit)

{

FLASH_CheckBusy_A(SectorCount);

if ( FLASH_ReadStatus(SectorCount) & 0x01 )

EDPRINTF(("\n\nPartial Program Fail : %08x %02x \n\n", TmpAddr,

SectorCount));

- 193 -

}

SFR_FLASH_CFG_4(SectorCount) = FLASH_CTRL_CLEAR;

FLASH_CE_B(FLASH_CE_A(PhysSectorAddr), SectorCount, FALSE);

}

- 194 -

알 림

이 보고서는 정보통신부에서 시1. 행한 우수신기술 지정지원‘ ·

사업의 연구보고서이다.

본 연구개발결과 대외적으로 발표할 때에는 정보2. 통신부의

우수신기술 지원지정사업의 연구결과임을 밝· 혀야 한다.