6. FLASH memory Controller

 

6.1    기본사항

 

MSP430 Flash memory 는 bit, byte, word 단위 프로그램이 가능합니다. Flash memory 모듈은 프로그램/소거 와 같은 조작을 할 수 있는 제어장치를 가집니다. 제어장치(controller)는 3개의 관련 레지스터와 timing 발생기(generator), 프로그램/소거 전압 발생기(generator)를 가지고 있습니다. 동작에 필요한 파워는 매우 작습니다. 또한 세그먼트(segment)단위의 삭제와 전체(mass)단위 소거가 가능 합니다. 주의 해야 할 사항은 Flash 쓰기 및 삭제와 같은 동작을 하기 위해 2.7V 이상의 VCC 가 필요하며 2.7V 이하의 쓰기 및 소거 작업은 그 결과를 예측할 수 없습니다.

 

그림 6 - 1

 

6.2    Flash memory segment

 

MSP430의 Flash memory는 세그먼트 단위로 분할되어 있습니다. 쓸 때는 bit, byte, word 단위로 Flash memory를 사용할 수 있으나 소거 작업 시에는 세그먼트 단위로 이루어 저야 합니다. 소거 작업에는 3가지 모드가 존재 합니다. 그것은 한 개의 세그먼트 단위로 삭제, main Flash 에 위치한 세그먼트 삭제, main및 information Flash 영역을 포함한 전제 세그먼트 삭제 입니다. Flash memory는 main과 information 영역으로 나누어 집니다. Main과 information 영역의 조작방법에는 차이가 없습니다. 두 개의 영역은 코드영역 또는 data영역으로 사용될 수 있습니다. Main과 information 영역의 차이는 세그먼트 사이즈와 물리적 주소 밖에 없습니다. Information 세그먼트에는 2개의 128byte의 세그먼트 영역이 있으며, main에는 적어도 2개의 512byte의 세그먼트 영역이 있습니다.

 

그림 6 - 2

 

6.3     Flash memory 동작

 

기본적으로 Flash memory는 read mode이며 read mode에서는 삭제 또는 쓰기 가 불가능 합니다. 또한 Flash timing 발생기(generator), 프로그램/소거 전압 발생기(generator)는 정지 됩니다. 이때 Flash 는 ROM처럼 동작 합니다.

 

MSP430은 In system program(ISP) 기능을 가지며 CPU는 자신의 Flash를 프로그램 가능합니다. Flash memory는 BLKWRT, WRT, MERAS, ERASE bit를 사용하여 프로그램/소거 모드 선택이 가능합니다. 모드는 총 5개가 존재 합니다. Flash 는 프로그램/소거 될 때 읽거나 기록하는 것은 금지 됩니다.

 

5가지 모드를 살펴보면 byte/word 쓰기, block 쓰기, segment 지우기, mass 지우기(모든 main memory), 모든 Flash 영역 지우기 입니다. 모든 Flash 의 업데이트는 Flash 의 code 영역 및 RAM에 있는 code 영역에서 전부 가능 합니다.

 

 

6.4    Flash timing 발생기(generator)

 

쓰고 지우는 작업을 위해 timing 발생기(generator)는 그림 6-3과 같이 동작 되어 집니다. timing 발생기(generator)의 동작주파수 f(FTG)의 범위는 257Khz – 476Khz 입니다. timing 발생기(generator)는 ACLK, SMCLK, MCLK의 클럭을 이용하여 FNx bit에 의해 나누어져 f(FTG) 출력으로 공급됩니다. f(FTG) 주파수가 프로그램/소거 동작 동안에 오동작을 하면 프로그램/소거 동작은 신뢰 할 수 없어 집니다.

 

그림 6 - 3

 

 

6.5    Erasing Flash Memory

Flash memory는 삭제되었을 때 각각의 bit는 1이 됩니다. 그림 6-4 와 같이 ERASE, MERAS bit 설정으로 삭제 모드가 선택 가능해 집니다.

그림 6 - 4

삭제의 시작은 삭제 번지 범위 내에서 dummy 값을 쓰면 시작됩니다. Dummy 쓰기 후 Flash timing 발생기(generator)와 삭제 동작을 시작 합니다. 그림 6-5는 삭제 타이밍 입니다.

그림 6 - 5

busy bit는 dummy 쓰기 직후에 자동으로 설정되며 삭제 주기 동안 유지됩니다. BUSY, MERAS, ERASE는 삭제 주기가 완료되면 자동으로 삭제 됩니다. 이런 삭제 시간은 모든 MSP430에서 동일합니다.

 

삭제되는 번지 범위 내에서 dummy 쓰기는 Flash memory에 영향이 없기 때문에 어떠한 표시도 남지 않습니다. 이때 잘못된 dummy 쓰기는 무시됩니다.

모든 인터럽트는 Flash 삭제 작업 전에 중지되어야 합니다. 삭제 작업 후 인터럽트를 다시 동작시키면 Flash 삭제 작업 중에 발생한 인터럽트가 해당 flag를 설정해 둔 사태이기 때문에 flag에 따른 인터럽트 처리 루틴이 동작 됩니다.

 

6.6     Flash memory에서 삭제 동작

어떤 삭제 동작도 RAM 또는 Flash 에서 시작 가능합니다. Flash 부분 삭제가 Flash memory에서 시작되어 질 때 Flash controller에 의해 타이밍 제어가 됩니다. 이때 CPU는 삭제가 완료될 때까지 정지하고 있습니다.

삭제완료 후 CPU는 코드 실행을 재개 합니다. 주의할 사항은 현재 실행되고 code가 있는 Flash memory 도 삭제가 가능하기 때문에 code가 지워져 CPU가 소거 후 어떻게 동작하는지 알 수 없을 수도 있다는 것입니다.

그림 6-6 은 Flash memory에서 삭제 동작을 나타냅니다.

그림 6 - 6

 

6.7    RAM 에서 삭제 동작

어떤 삭제 동작도 RAM 에서 시작 될 수 있습니다. 이때 CPU는 정지하지 않고 RAM에 있는 code는 계속 실행 합니다. CPU는 다른 Flash에 접근하기 전에 BUSY bit를 조사해야 합니다. BUSY가 설정되어 있을 때 Flash 에 접근하면 접근위반이 되어 ACCVIFG가 설정됩니다. 이때 삭제 동작의 결과를 예측할 수 없습니다.

 

그림 6 - 7

  1. Flash memory 쓰기

 

Write 모드는 WRT, BLKWRT bit를 이용합니다. 두 가지의 쓰기 모드가 존재하며 두 가지의 쓰기 모드는 각각의 쓰기 과정이 존재 합니다. Byte/word 쓰기 동작과 Block 쓰기가 존재 하며 Block 쓰기가 대략 2배 정도 빠릅니다. 쓰기 동작 동안 BUSY bit 는 설정 되어 있으며, 쓰기 동작이 RAM 에서 시작 되었으면 BUSY가 설정되어 있는 동안 Flash 에 접근하면 안됩니다. 접근한다면 접근 위반이 되어 ACCVIFG가 설정됩니다. 이때 쓰기 동작의 결과를 예측할 수 없습니다.

 

그림 6 - 8

 

  1. byte/word 쓰기 동작

 

byte/word 쓰기 동작은 Flash 나 RAM 영역에서 시작 가능 합니다. Flash memory에서 동작 될 때 Flash controller 에서 타이밍을 제어하며 완료 될 때까지 CPU는 정지 됩니다. 쓰기 완료 후 CPU는 다음 명령을 실해 합니다.

 

그림 6 - 9

 

byte/word 쓰기가 RAM에서 시작 되면 CPU는 계속 동작하며 CPU가 BUSY 가 0 이 되기 전에 Flash 에 접근하면 접근위반으로 ACCVIFG가 설정 됩니다. 그리고 쓰기 완료는 예측 할 수 없습니다.

 

6.10    Flash memory에서 byte/word쓰기 동작

그림 6 - 10

 

6.11    RAM 에서 byte/word 쓰기 동작

그림 6 - 11

  1. block 쓰기

 

많은 양의 순차적 byte나 word를 쓸 때 좀더 속도를 빠르게 하기 위해 block write를 사용합니다. 하나의 block은 64byte이며 각각 0xXX00, 0xXX40, 0xXX80, 0xXXC0 번지에서 시작 됩니다. 또한 0xXX3F, 0xXX7F, 0xXXBF, 0xXXFF에서 끝납니다. 그림 6-12에서 예를 확인 할 수 있습니다.

 

그림 6 - 12

 

블록쓰기는 Flash 에서 시작 될 수 없습니다. 블록쓰기는 ROM 또는 RAM 영역에서 시작되어야 합니다. BUSY 는 블록쓰기 동안 설정 되어 있으며, 하나의 byte/word를 쓰기 전에 WAIT bit를 점검해서 WAIT bit가 설정되어 있으면 다음 쓰기가 가능하다는 것을 나타냅니다. 연속 블록쓰기를 할 때 현재 블록이 완전히 쓰여진 후 BLKWRT를 0으로 설정해야 하고 BUSY가 0 이 되면 다음 블록을 쓰는 것이 가능합니다. 그림6-13은 블록 쓰기 타이밍을 표시하고 그림 6-14는 flow를 보여줍니다.

 

그림 6 - 13

 

 

그림 6 - 14

 

6.13     쓰기나 지우기 작업 후에 Flash memory access

 

어떤 쓰기나 지우기 동작이 RAM에서 시작되고 BUSY=1 이면 CPU는 어떠한 Flash 영역도 읽거나 쓰면 안 되고, 만약 그렇지 않았다면 접근위반이 발생하여 ACCVIFG가 설정됩니다. 물론 결과는 예측 불가능해집니다.

만약 Flash 에 쓸 때 WRT이 0 으로 설정되어 있으면 ACCVIFG 가 설정되고 Flash memory에는 아무런 영향을 미치지 않습니다.

 

Byte/word 쓰기 또는 지우는 동작이 Flash memory에서 시작될 때 Flash 컨트롤러는 CPU의 다음처리 명령을 0x3FFF로 설정 합니다. 0x3FFF는 jmp PC 명령으로 Flash 조작 중에 멈추어 있는 CPU를 다시 살립니다. 컨트롤러가 Flash 에 대한 조작이 끝나거나 BUSY가 0 이면 CPU는 다음 명령을 처리 합니다.

 

주의할 사항은 Flash 조작적에 모든 인터럽트는 사용이 금지되어야 합니다. 만일 인터럽트를 사용하게 둔 상태에서 Flash 조작 중에 인터럽트가 발생되면 jmp PC 명령을 CPU가 호출되게 됩니다. 그래서 Flash 조작이 완료되면 CPU는 인터럽트 처리루틴이 실행되지 않고 임의에 위치에서 프로그램이 실행됩니다.

 

그림 6-15 은 Flash access 동안에 BUSY=1일 조건 입니다.

 

그림 6 - 15

 

6.14    쓰기나 지우기 동작 중에 정지

 

Flash 조작 중에 EMEX bit를 조작 하여 Flash 조작을 중지 할 수 있습니다. EMEX bit를 설정하여 Flash 조작을 멈추고 Flash 컨트롤러를 멈춥니다. 모든 Flash 조작이 중지되고 Flash는 read 모드가 됩니다. 모든 FCTL1레지스터는 reset 됩니다. 이때 Flash 조작에 대한 결과는 예측할 수 없습니다.

 

6.15    Flash memory controller의 동작

 

FCTLx register 는 16bit 입니다. Password 가 걸려있고, read와 write가 가능합니다. 레지스터를 읽거나 쓸 때는 워드 명령이 사용되며 쓰기 접근을 위해서는 상위 byte에 0xA5를 포함해야 합니다. 0xA5가 FCTLx 레지스터의 쓰기 패스워드가 됩니다. 0xA5 이외의 값은 KEYV flag를 동작시켜 PUC가 발생되어 system reset 이 됩니다. FCTLx 레지스터는 읽을 때는 0x96이 상위 byte에서 읽어집니다.

FCTL1의 기록은 block write mode에서 WAIT가 1 일 때만 가능합니다. 소거 또는 byte/word 쓰기 동작 중에 FCTL1에 어떠한 쓰기 동작 을 해도 접근위반이 됩니다. 그래서 ACCVIFG가 설정됩니다.

블록 쓰기 모드에서 WAIT가 0 일때 FCRL1을 쓰면 접근위반이 되어 ACCVIFG가 설정됩니다.

BUSY가 1일 때 FCTLx 레지스터에 쓰기 동작은 접근 위반이 되고 읽기동작은 접근위반이 되지 않습니다.

 

6.16    Flash memory컨트롤러 인터럽트

 

Flash memory 컨트롤러는 2개의 인터럽트 원인이 있습니다. 그것은 KEYV와 ACCVIFG 입니다. 접근위반이 발생될 때 ACCVIFG가 설정되며 이 때문에 인터럽트가 발생됩니다. ACCVIFG 인터럽트는 NMI 인터럽트로 GIE와 관계없이 동작 됩니다. 접근위반이 어디서 발생되었는지 알기 위해서 프로그램적인 점검이 필요합니다. ACCVIFG는 소프트웨어에 의해 reset이 가능합니다. Flash 컨트롤러 레지스터에 부정확한 암호로 쓰기작업을 하면 위반 flag인 KEYV가 설정됩니다. 이때는 PUC가 바로 발생됩니다.

 

6.17 프로그램 가능한 Flash 디바이스

 

MSP430은 여러 가지 방식으로 프로그램 가능 합니다.

먼저 JTAG을 통하여 프로그램 가능한데 JTAG은 4개의 시그널 PIN을 이용합니다. JTAG 은 FUSE로 보호되며 FUSE 사용으로 JTAG 사용이 금지 될 수 있습니다.

또 하나는 MSP430은 bootstrap loader(BSL)울 가지고 있습니다. BSL은 UART을 이용하여 RAM을 읽거나 프로그램이 가능합니다. BSL을 이용한 Flash 접근은 256bit의 사용자 암호에 의해 보호 됩니다.

마지막으로 사용자가 여러 가지 프로그램적인 방법을 사용하여 UART, SPI, 일반I/O 등등을 사용하여 프로그램 할 수 있습니다.

 

그림 6 - 16

 

FCTL1 (Flash memory Control Register 1)

BIT 

15 

14

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

BLKWRT 

WRT 

x 

x 

x 

MERAS 

ERASE 

X

초기값

0 

0 

0 

0 

0 

0 

0 

0 

읽고쓰기

R/W 

R/W 

R 

R 

R 

R/W 

R/W 

R 

 

BLKWRT : block 쓰기 모드 설정, WRT와 함께 block 모드를 설정 합니다.

EMEX 가 설정되면 BLKWRT는 자동으로 reset 됩니다.

(0 : block 쓰기 모드 off , 1: block 쓰기 모드 on)

 

WRT : 쓰기동작, 기록중임을 나타냅니다. EMEX 가 설정되면 자동으로 reset 됩니다.

( 0 : 쓰기 동작 off , 1: 쓰기 동작 on)

 

MERAS : mass 삭제 동작 설정

ERASE : MERAS 와 ERASE 두 개의 설정으로 삭제모드를 설정합니다.

Emex 설정으로 자동 reset 됩니다.

 

MERAS 

ERASE 

동작

0 

0 

삭제 안함

0 

1 

한 개 세그먼트 단위 삭제

1 

0 

모든 main 세그먼트 삭제

1 

1 

모든 세그먼트 삭제

 

FCTL2 (Flash memoey Control Register 2)

BIT 

15 

14 

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

FSSELx 

FNx 

초기값

0 

1 

0 

0 

0 

0 

1 

0 

읽고쓰기

R/W 

R/W 

R/W

R/W 

R/W 

R/W 

R/W 

R/W 

 

FSSELx : Flash timing 발생기(generator)의 소스를 설정 합니다.

( 00: ACLK , 01: MCLK , 10(11): SMCLK )

 

FNx : Flash timing 발생기(generator)의 소스를 얼마나 나누어 사용 할 것인지를 설정합니다.

나누어지는 값은 FNx +1 이다.

 

FCTL3 (Flash memoey Control Register 3)

BIT 

15 

14 

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

x 

x 

EMEX 

LOCK 

WAIT 

ACCVIFG 

KEYV 

BUSY 

초기값

0 

0 

0 

1 

1 

0 

0 

0 

읽고쓰기

R 

R 

R/W 

R/W 

R 

R/W 

R/W 

R/W 

 

EMEX : Flash 조작 중지 (0 : 조작 중지 안함 , 1: 조작 중지)

 

LOCK : Flash 를 쓰거나 지우는 작업 후에 memory를 unlock 합니다.

Lock bit는 byte/word 쓰기 동안 언제든지 1이 설정 될 수 있습니다.

또한 정상으로 완료되면 설정 될 수 있습니다. Lock bit가 BLKWRT = WAIT =1 일 때 설정되면

BLKWRT 와 WAIT 는 reset 되고 block 쓰기는 끝납니다.

( 0: unlock ,1:lock)

WAIT : Flash memory가 기록 되는 것을 나타냄

( 0: 다음 쓰기나 지우기 작업 준비 안됨, 1: 다음 쓰기나 지우기 작업 준비 됨)

ACCVIFG : 접근위반 발생

( 0: 접근위반 발생 안됨 , 1; 접근 위반 발생)

 

KEYV : Flash 보안 위반

( 0: 패스워드 정확 , 1: 패스워드 오류)

 

BUSY : Flash timing 발생기(generator)의 동작 표시

( 0 : Flash timing 발생기(generator) 동작 안함 , 1: Flash timing 발생기(generator) 동작 중)

 

IE1 (Interrupt Enable Register 1)

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

   

ACCIVIE 

         

초기값

   

0 

         

읽고쓰기

   

R/W 

         

 

ACCVIE : Flash 접근 위반 flag 발생을 가능하게 한다.

( 0: ACCVIFG 발생 불가 , 1: ACCVIFG 발생 가능)

 

 

 

 

'공부 > MSP430' 카테고리의 다른 글

[MSP430] MSP430 자료 7  (0) 2012.11.15
[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15
[MSP430] MSP430 자료 3  (0) 2012.11.15
[MSP430] MSP430 자료 2  (0) 2012.11.15

+ Recent posts