Section 17. Master Synchronous Serial Port (MSSP) HIGHLIGHTS This section of the following topics: 17.1 Introduction 17-2 17.2 Control Register 17-4 17.3 SPI Mode 17-9 17.4 SSP I2C Operation 17-18 17.5 Connection Considerations for I2C Bus 17-56 17.6 Initialization 17-57 17.7 Design Tips 17-58 17.8 Related Application Notes 17-59 17.9 Revision History 17-60 Note: 현재어떤 Mid-Range MCU 장치도이모듈에유효하지않다. 장치는설계되었으나이용가능성에대한계획은없다. 제품요약의방출을위한 BBS 또는마이크로칩의웹사이트참고하십시오. 새로운장치를위한세부사항그리고특징을알아낼수있을것이다. 이모듈은 Microchip s High End family (PIC17CXXX) 에서이용가능하다. 마이크로칩의웹사이트, BBS, 지역판매소를참조하시오. 2007 Microchip Technology Inc. Advance Information DS31017A-page 1
PICmicro MID-RANGE MCU FAMILY 17.1 Introduction 마스터동기식시리얼포트 <Master Synchronous Serial Port (MSSP)> 모듈은다른주변장치또는마이크로컨트롤러장치와통신하기위한유용한직렬인터페이스이다. 이러한주변장치들은시리얼 EEPROMs, 시프트레지스터, 디스플레이드라이버, A/D 변환기, 기타일수도있다. MSSP 모듈은 2 개의모드에서하나로동작가능하다 : Serial Peripheral Interface (SPI ) Inter-Integrated Circuit (I 2 C ) - Full Master Mode - Slave mode ( 일반적인주소호출과같이 ) 표 17-1 는 SPI 모드를위한블록다이어그램을보여준다. 반면에표 17-2 와표 17-3 는동작에관한 2 개의다른모드를위한블록다이어그램을보여준다. Figure 17-1: SPI Mode Block Diagram
Figure 17-2: I 2 C Slave Mode Block Diagram Figure 17-3: I 2 C Master Mode Block Diagram 2007 Microchip Technology Inc. Advance Information DS31017A-page 3
PICmicro MID-RANGE MCU FAMILY 17.2 Control Register Register 17-1: SSPSTAT: SSP Status Register bit 7 SMP: Sample bit SPI Master Mode 1 = 데이터출력시간의끝에서추출된입력데이터 0 = 데이터출력시간의중간에서추출된입력데이터 SPI Slave Mode SPI가슬레이브모드에서사용될때 SMP는반드시클리어되어야한다. In I 2 C master or slave mode: 1= 표준속도모드동안 (100 khz 와 1 MHz) 슬루레이트 (Slew rate) 제어는불능 0= 고속속도모드동안 (400 khz) 슬루레이트제어는인에이블 bit 6 CKE: SPI Clock Edge Select CKP = 0 1 = SCK의상승하는에지에서데이터전송된다. 0 = SCK의떨어지는에지에서데이터전송된다. CKP = 1 1 = SCK의떨어지는에지에서데이터전송된다 0 = SCK의상승하는에지에서데이터전송된다. bit 5 D/A: Data/Address bit ( mode only) 1 = 전송되거나수신된마지막바이트가데이터라는것을지시한다. 0 = 전송되거나수신된마지막바이트가주소라는것을지시한다. bit 4 P: Stop bit (I 2 C모드에서만. SSP 모듈이불능되고, SSPEN이클리어될때이비트는클리어된다 ) 1 = 정지비트가마지막에검출되었다는것을가리킨다 ( 이비트는 RESET에서 '0' 이다 ) 0 = 정지비트는마지막에검출되지않는다. bit 3 S: Start bit (I 2 C모드에서만. SSP 모듈이불능되고, SSPEN이클리어될때이비트는클리어된다 ) 1 = 시작비트가마지막에검출되었다는것을가리킨다 ( 이비트는 RESET에서 '0' 이다 ) 0 = 시작비트는마지막에검출되지않는다. bit 2 R/W: Read/Write bit information (I 2 C모드에서만 ) 이비트는마지막매치 (match) 를뒤따르는 R/W 비트정보를가지고있다. 이비트는오직주소매치에서다음시작비트, 정지비트, ACK 비트가아닌곳에서유효하다. In slave mode: 1 = 읽기 0 = 쓰기 In master mode: 1 = 전송진행중 0 = 전송진행중이지않음. SEN, RSEN, PEN, RCEN, 또는 ACKEN와이비트를 OR 연산하는 SSP가아이들모드인지를가리킨다. bit 1 UA: Update Address (10-bit I 2 C모드에서만 ) 1 = 사용자가 SSPADD 레지스터에서주소를업데이트시키기를원하는지지시한다. 0 = 주소는업데이트되기를원하지않음.
Register 17-1: SSPSTAT: SSP Status Register (Cont d) bit 0 BF: Buffer Full Status bit Receive (SPI and I 2 C modes) 1 = 수신완료, SSPBUF 는 full 이다. 0 = 수신완료되지않음, SSPBUF 는비어있다. Transmit (I 2 C 모드에서만 ) 1 = 데이터전송진행중 (ACK 와정지비트를포함하지않는다 ), SSPBUF 는 full 이다. 0 = 데이터전송완료 (ACK 와정지비트를포함하지않는다 ), SSPBUF 는비어있다. 2007 Microchip Technology Inc. Advance Information DS31017A-page 5
PICmicro MID-RANGE MCU FAMILY Register 17-2: SSPCON1: SSP Control Register1 bit 7 bit 6 bit 5 bit 4 WCOL: Write Collision Detect bit Master Mode: 1 = 상태가시작된전송동안유효하지않는 SSPBUF 레지스터에쓰기가시도. 0 = 충돌없음 Slave Mode: 1 = 이것이이전워드에전송중인동안 SSPBUF 레지스터에쓰여진다 ( 반드시소프트웨어에서클리어되어야한다 ) 0 = 충돌업음 SSPOV: Receive Overflow Indicator bit In SPI mode: 1 = SSPBUF 레지스터가여전히이전의데이터를가지고있는동안새로운바이트는수신된다. 오버플로우인경우, SSPSR의데이터는손실된다. 슬레이브모드에서오버플로우는유일하게발생된다. 슬레이브모드에서, 전송중인데이터일지라도사용자는오버플로우설정을피하기위해반드시 SSPBUF를읽어야한다. 마스터모드에서, 각새로운수신 ( 전송 ) 이 SSPBUF 레지스터에쓰기하여초기화되기때문에오버플로우비트는 set 되지말아야한다. 0 = 오버플로우없다 In mode: 1 = SSPBUF 레지스터가여전히이전의바이트를가지고있는동안바이트는수신한다. SSPOV는전송모드에서염려되지않는다. SSPOV는양모드에서그리고소프트웨어에서반드시클리어되어야한다. 0 = 오버플로우없음 SSPEN: Synchronous Serial Port Enable bit 양모드에서, 인에이블될때, 이러한핀들은적절하게입력또는출력으로구성되어야한다 In SPI mode: 1 = 시리얼포트를인에이블하고 SCK, SDO, SDI, 와 SS를시리얼포트핀의소스로서구성해야한다. 0 = 시리얼포트를불능하고이러한핀들을 I/O 포트핀으로구성해야한다. In mode: 1 = 시리얼포트를인에이블하고 SDA 와 SCL 핀을시리얼포트핀의소스로구성해야한다. 0 = 시리얼포트를불능하고이러한핀들을 I/O 포트핀으로구성해야한다. CKP: Clock Polarity Select bit In SPI mode: 1 = 클럭동안아이들상태는 high 레벨이다 0 = 클럭동안아이들상태는 low 레벨이다 In slave mode: SCK release control 1 = 인에이블클럭 0 = 클럭을 low로유지 (clock stretch) ( 데이터설치시간을위해사용됨 ) In master mode 이모드에서는사용되지않음
Register 17-2: SSPCON1: SSP Control Register1 (Cont d) bit 3 0 SSPM3:SSPM0: Synchronous Serial Port Mode Select bits 0000= SPI master mode, clock = FOSC/4 0001= SPI master mode, clock = FOSC/16 0010= SPI master mode, clock = FOSC/64 0011= SPI master mode, clock = TMR2 output/2 0100= SPI slave mode, clock = SCK pin. SS pin control enabled. 0101= SPI slave mode, clock=sck pin.ss pin control disabled. SS can be used as I/O pin 0110= slave mode, 7-bit address 0111= slave mode, 10-bit address 1000= master mode, clock = FOSC/ (4 * (SSPADD+1)) 1xx1= Reserved 1x1x= Reserved 설명 : R = 읽기가능한비트 W = 쓰기가능한비트 U = 실행되지않는비트, 0 으로읽기 -n: POR 리셋에서값 2007 Microchip Technology Inc. Advance Information DS31017A-page 7
PICmicro MID-RANGE MCU FAMILY Register 17-3: SSPCON2: SSP Control Register2 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 GCEN: General Call Enable bit (In slave mode only) 1 = 일반호출주소 (0000h) 가 SSPSR에서수신될때인에이블인터럽트발생 0 = 일반호출주소불능 ACKSTAT: Acknowledge Status bit (In master mode only) In master transmit mode: 1 = Acknowledge는슬레이브에서수신되지않음 0 = Acknowledge는슬레이브에서수신 ACKDT: Acknowledge Data bit (In master mode only) In master receive mode: 수신의끝에서사용자가 Acknowledge를초기화시킬때값은전송될것이다. 1 = Not Acknowledge 0 = Acknowledge ACKEN: Acknowledge Sequence Enable bit (In master mode only) In master receive mode: 1 = SDA와 SCL 핀의 Acknowledge 순서를초기화하고 AKDT 데이터비트를전송함. 하드웨어에의해자동적으로클리어됨 0 = Acknowledge sequence idle Note: 모듈이아이들모드가아닐경우, 이비트는 set 되지않을것이며 (no spooling) SSPBUF는쓰여지지않을것이다 ( 또는 SSPBUF에쓰기는불능된다 ) RCEN: Receive Enable bit (In master mode only) 1 = 동안수신모드를인에이블 0 = 수신아이들 Note: 모듈이아이들모드가아닐경우, 이비트는 set 되지않을것이며 (no spooling) SSPBUF는쓰여지지않을것이다 ( 또는 SSPBUF에쓰기는불능된다 ) PEN: Stop Condition Enable bit (In master mode only) SCK release control 1 = SDA와 SCL 핀에정지조건을초기화시킨다. 하드웨어에의해자동적으로클리어 0 = 정지조건아이들 Note: 모듈이아이들모드가아닐경우, 이비트는 set 되지않을것이며 (no spooling) SSPBUF는쓰여지지않을것이다 ( 또는 SSPBUF에쓰기는불능된다 ) RSEN: Repeated Start Condition Enabled bit (In master mode only) 1 = SDA와 SCL 핀의반복된시작조건을초기화한다. 하드웨어에의해자동적으로클리어된다. 0 = 반복된시작조건아이들 Note: 모듈이아이들모드가아닐경우, 이비트는 set 되지않을것이며 (no spooling) SSPBUF는쓰여지지않을것이다 ( 또는 SSPBUF에쓰기는불능된다 ) SEN: Start Condition Enabled bit (In master mode only) 1 = SDA와 SCL 핀의시작조건을초기화한다. 하드웨어에의해자동적으로클리어됨. 0 = 시작조건아이들 Note: 모듈이아이들모드가아닐경우, 이비트는 set 되지않을것이며 (no spooling) SSPBUF는쓰여지지않을것이다 ( 또는 SSPBUF에쓰기는불능된다 )
17.3 SPI Mode SPI 모드는데이터의 8 비트가동시에전송되고유산하게수신되는것을허용한다. SPI 의모든 4 가지모드는지원된다. 통신을수행하기위해전형적으로 3 핀들이사용된다. Serial Data Out (SDO) Serial Data In (SDI) Serial Clock (SCK) 추가적으로 4 번째핀은슬레이브동작에서사용될것이다 : Slave Select (SS) 17.3.1 Operation SPI 를초기화할때, 몇몇옵션은지정될필요가있다. 이것은 SSPCON1 레지스터 (SSPCON1<5:0>) 와 SSPSTAT<7:6> 에서적당한제어비트를프로그래밍하여행해진다. 이러한제어비트는다음의나열들이지정되는것을허용한다 : Master Mode (SCK is the clock output) Slave Mode (SCK is the clock input) Clock Polarity (Idle state of SCK) Data input sample phase (middle or end of data output time) Clock edge (output data on rising/falling edge of SCK) Clock Rate (Master mode only) Slave Select Mode (Slave mode only) 표 17-4 는 SPI 모드일때 SSP 모듈의블록다이어그램을보여준다. Figure 17-4: SSP Block Diagram (SPI Mode) 2007 Microchip Technology Inc. Advance Information DS31017A-page 9
PICmicro MID-RANGE MCU FAMILY SSP 는송신 / 수신시프트레지스터 (SSPSR) 와버퍼레지스터 (SSPBUF) 로이루어져있다. MSB 를첫째로 SSPSR 는데이터를장치안밖으로이동시킨다. 수신된데이터가준비될때까지 SSPBUF 는 SSPSR 에쓰여진데이터를가지고있는다. 데이터의 8 비트가수신되자마자, 바이트는 SSPBUF 레지스터로이동된다. 그후버퍼풀검출비트, BF (SSPSTAT<0>), 그리고인터럽트플래그비트, SSPIF 는 set 이다. 수신된데이터 (SSPBUF) 의더블버퍼링은막수신된데이터를읽기전에다음바이트가수신을시작하는것을허용한다. 데이터의전송과수신동안 SSPBUF 레지스터에쓰기는무시되고쓰기충돌검출비트, WCOL (SSPCON1<7>) 는 set 할것이다. 사용자소프트웨어는 SSPBUF 레지스터에다음의쓰기 (s) 가성공적으로완료된지를결정하기위해 WCOL 비트를반드시클리어해야한다. 응용소프트웨어가유효한데이터를받을것을예상할때, SSPBUF 는전송기로향하는데이터의다음바이트가 SSPBUF 에쓰여지기전에읽혀야한다. 버퍼풀비트 [BF (SSPSTAT<0>)] 는 SSPBUF 가수신된데이터로적재될때를지시한다 ( 전송은완료 ). SSPBUF 가읽힐때, BF 비트는클리어된다. 이데이터는 SPI 가오직전송기라는것에관련없다. 일반적으로 SSP 인터럽트는전송 / 수신이완료될때를결정하는데사용된다. SSPBUF 는반드시읽기 / 또는쓰기이다. 만약인터럽트방법이사용되지않는다면그후소프트웨어폴링 (polling) 은쓰기충돌이발생하지않는다는것을보장하기위해사용된다. 표 17-1 는데이터전송을위한 SSPBUF (SSPSR) 의적재를보여준다. Example 17-1: Loading the SSPBUF (SSPSR) Register SSPSR 는바로읽거나쓸수없다. 그리고 SSPBUF 레지스터를어드레싱함으로서오직엑세스될수있다. 게다가, SSP 상태레지스터 (SSPSTAT) 는다양한상태조건을나타낸다. 17.3.2 Enabling SPI I/O 직렬포트를인에이블하기위하여는, SSP 인에이블비트 [SSPEN (SSPCON1<5>)] 를 set 해야한다. SPI 모드를리셋또는재구성하기위해 SSPEN 비트를클리어하고 SSPCON 레지스터를재초기화해야하며그후 SSPEN 비트를 set 해야한다. 이것은직렬포트핀으로서 SDI, SDO, SCK 및 SS 핀을구성한다. 직렬포트기능으로서수행하기위한이핀들을위해몇몇은적절하게프로그램된데이터방향비트를가지고있어야한다 (TRIS 레지스터에서 ). 그것은 : SDI is automatically controlled by the SPI module SDO must have TRIS bit cleared SCK (Master mode) must have TRIS bit cleared SCK (Slave mode) must have TRIS bit set SS must have TRIS bit set 요구되지않은직렬포트기능은반대의값에대한대응하는데이터방향 (TRIS) 레지스터를프로그래밍하여무시된다.
17.3.3 Typical Connection 표 17-5 는 2 개의마이크로제어기사이에전형적인연결을보여준다. 주제어기 ( 프로세서 1) 는 SCK 신호를보내서데이터전송을초기화시킨다. 데이터는프로그램된클럭에지 (edge) 의시프트레지스터와클럭의반대에지에래치 (latch) 된시프트레지스터밖으로이동한다. 2 개의프로세서는같은 Clock Polarity (CKP) 에프로그램되어야하고양제어기는같은시각에데이터를수신하고송신해야한다. 데이터가중요하든 ( 또는더미 <dummy> 데이터 ) 어플리케이션소프트웨어에의존한다. 이것은데이터전송을위한 3 가지의시나리오를이끌어낸다 : Master sends data Slave sends dummy data Master sends data Slave sends data Master sends dummy data Slave sends data Figure 17-5: SPI Master/Slave Connection 2007 Microchip Technology Inc. Advance Information DS31017A-page 11
PICmicro MID-RANGE MCU FAMILY 17.3.4 Master Mode 마스터가 SCK 을통제하기때문에이것은데이터전송기를초기화할수있다. 슬레이브 ( 프로세서 2, 표 17-5) 가소프트웨어프로토콜에의해데이터를다수에게전송하는순간을마스터가결정한다. 마스터모드에서 SSPBUF 레지스터에쓰여지자마자데이트는전송 / 수신된다. SPI 가오직수신만할경우에, SDO 출력은불능될수있다 ( 입력으로프로그램된 ). SSPSR 레지스터는프로그램된클록레이트 (rate) 에서의 SDI 핀의신호에서시프트하는것을계속할것이다. 각바이트가수신되지때문에, 보통의수신된바이트 ( 인터럽트와적절한상태비트 set) 처럼그것은 SSPBUF 레지스터로적재될것이다. 이것은 " 라인액티브모니터 " 와같이수신기어플리케이션에서유용할수있다. 클럭극성은적절하게 CKP 비트 (SSPCON1<4>) 를프로그래밍하여선택된다. 그후이것은 Msb 가첫번째로전송되는표 17-6, 표 17-8, 그리고표 17-9 에서보이는것처럼 SPI 통신을위한웨이브폼 (waveforms) 을줄것이다. 마스터모드에서 SPI 클럭레이트 ( 비트레이트 ) 는다음에서하나를프로그램할수있는사용자이다 : FOSC/4 (or TCY) FOSC/16 (or 4 TCY) FOSC/64 (or 16 TCY) Timer2 output/2 이것은 of 8.25 Mbps 의최소데이터레이트 (20 MHz 에서 ) 를허용한다. 표 17-6 은마스터모드동안웨이브폼 (waveforms) 을보여준다. CKE 가 set 일때, SCK 의클럭에지가있기전에 SDO 데이터는유효하다. 입력샘플의변화는 SMP 비트의상태에서나타나있다. SSPBUF 가수신데이터로적재될때시간은나타난다.
Figure 17-6: SPI Mode Waveform (Master Mode) 2007 Microchip Technology Inc. Advance Information DS31017A-page 13
PICmicro MID-RANGE MCU FAMILY 17.3.5 Slave Mode 슬레이브모드에서데이터는외부클럭펄스가 SCK 에서나타났기때문에수신되고전송된다. 마지막비트가래취 (latch) 되었을때 SSPIF 인터럽트플래그비트는 set 이다. 슬레이브모드동안외부클럭은 SCK 핀의외부소스에의해공급된다. 전기스펙에명기된것처럼이외부클럭은반드시최소 high 와 low 시간을만족시켜야한다. 슬립 (sleep) 모드동안, 슬레이브는데이터를전송또는수신할수있다. 바이트가수신일때장치는슬립으로부터깨어난다. 17.3.6 Slave Select Synchronization SS 핀은동기식슬레이브모드를허용한다. SPI 는반드시인에이블된 SS 핀제어와같이슬레이브모드에있어야한다 (SSPCON1<3:0> = 04h). 핀은 SS 핀이입력으로하기위해서 low 로떨어지지않아야한다. 데이터래치 (Latch) 는반드시 high 여야한다. SS 핀이 low 일때, 전송과수신은가능하게되고 SDO 핀도가능하게된다. SS 핀이 high 일때, 전송된바이트의중간에위치해도그리고플로팅출력이라도 SDO 핀은더이상변하지않는다. 어플리케이션에의존하는외부 pullup/ pull- down 레지스터는적절하다 Note 1: SPI 가인에이블된 SS 핀제어를가진슬레이브모드일때, (SSPCON<3:0> = 0100), SS 핀이 VDD 에대해 set 된다면 SPI 모듈은 reset 할것이다 Note 2: CKE 를가진슬레이브모드에서사용되는 SPI 가 set 이라면, 그후 SS 핀제어는반드시인에이블되어야한다 SPI 모듈이 reset 할때, 비트카운터는 0 으로강제된다. 이것은 SS 핀을 high 레벨로강제하거나 SSPEN 비트를클리어하여행해진다. 2-wire 커뮤니케이션을대리실행할때, SDO 핀은 SDI 핀에연결될수있다. SPI 가수신기로서동작하길원할때 SDO 핀은입력으로구성된다. 이것은 SDO 로부터전송을불능으로한다. SDI 는버스충돌을만들지않기때문에항상입력 (SDI 기능 ) 으로유지될수있다.
Figure 17-7: Slave Synchronization Waveform Figure 17-8: SPI Mode Waveform (Slave Mode with CKE = 0) 2007 Microchip Technology Inc. Advance Information DS31017A-page 15
PICmicro MID-RANGE MCU FAMILY Figure 17-9: SPI Mode Waveform (Slave Mode with CKE = 1)
17.3.7 Sleep Operation 마스터모드에서모든모듈클럭은정지되고, 장치가슬립으로부터깨어날때까지상태를유지한다. 장치가정상모드로돌아올때, 모듈은데이터를송신 / 수신하는것을계속할것이다. 슬레이브모드에서, SPI 송신 / 수신시프트레지스터는장치를비동기성으로작동시킨다. 이것은장치가슬립모드로놓이는것을허용하고데이터가 SPI 수신 / 송신시프트레지스터로이동되는것을허용한다. 모든 8 비트가수신될때, 인에이블된다면 MSSP 인터럽트플래그비트는 set 될것이며슬립으로부터장치를깨울것이다. 17.3.8 Effects of a Reset 리셋은 MSSP 모듈을불능으로만들고현재의전송을종결시킨다. Table 17-1: Registers Associated with SPI Operation 해설 : x = 알수없음, u = 변하지않음, - = 실행되지않으며 0 으로읽음. 색칠된상자는 SPI 모듈에서 SSP 에의해사용되지않는다. Note 1: 이비트의위치는장치에의존한다. 2: 이비트들은또한 GPIE 와 GPIF 로불리운다. 2007 Microchip Technology Inc. Advance Information DS31017A-page 17
PICmicro MID-RANGE MCU FAMILY 17.4 SSP I 2 C TM Operation 모드에있는 MSSP 모듈은완전히모든장치와슬레이브기능을실행시키고 ( 일반적인호출지원 ) free bus( 멀티 - 마스터기능 ) 을결정하기위하여하드웨어에있는시작과정지비트에대한인터럽트를제공한다. SSP 모듈은 7 비트와 10 비트어드레싱뿐만아니라표준모드규격도실행한다. 부록 A 는버스규격의개요를제공한다. 핀이입력일때 " 고장 (glitch)" 필터는 SCL 와 SDA 핀에위치한다. 이필터는 100 KHz 및 400 KHz 모드에서동작한다. 100 KHz 모드에서이러한핀이출력일때, 이핀의슬루우 (slew) 레이트제어는장치주파수로부터독립적이지않다. Figure 17-10: I 2 C Slave Mode Block Diagram Figure 17-11: I 2 C Master Mode Block Diagram 2 개핀은데이터전송을위해사용된다. 이것들은클럭, SDA 핀, 데이터, 그리고 SCL 핀이다.
포트에있는핀들은자동적으로모드가인에이블될때구성된다. SSP 모듈기능은 SSP 인에이블비트 (SSPEN) 를설정하여인에이블된다. SSP 모듈은동작을위한 6 개의레지스터를가지고있다. 이것들은 : SSP Control Register1 (SSPCON1) SSP Control Register2 (SSPCON2) SSP Status Register (SSPSTAT) Serial Receive/Transmit Buffer (SSPBUF) SSP Shift Register (SSPSR) - Not directly accessible SSP Address Register (SSPADD) SSPCON1 레지스터는작동의제어를허용한다. 4 모드선택비트 (SSPCON1<3:0>) 는다음의모드의 1 개가선택되는것을허용한다 : Slave mode (7-bit address) Slave mode (10-bit address) Master mode, clock = OSC/4 (SSPADD +1) 어떤모드를선정하기전에, SCL 와 SDA 핀은적당한 TRIS 비트를설정하여반드시입력으로프로그램되어야한다. SSPEN 비트를설정하여모드를선정하는것은모드에서클럭과데이터라인으로사용되는 SCL 와 SDA 핀을인에이블한다. SSPSTAT 레지스터는데이터전송기의상태를나타낸다. 이정보는수신한바이트가데이터인지주소인지, 다음바이트가 10- 비트주소의완료인지, 그리고데이터의수신인지송신인지를규정하는 START 나 STOP 비트의검출을포함한다. SSPBUF 는전송데이터가쓰여질또는읽을레지스터이다 SSPSR 레지스터는장치의안밖에서데이터를이동한다. 수신동작에서, SSPBUF 와 SSPSR 는두배수신된수신기를만든다. 이것은다음바이트가수신된데이터의마지막바이트를읽기전에시작하는것을허용한다. 완전한바이트는수신될때, 이것은 SSPBUF 레지스터로옮겨지고플래그비트 SSPIF 는 set 된다. SSPBUF 레지스터가읽히기전에다른완전한바이트가수신되는경우, 수신기오버플로우 (overflow) 는발생하고 SSPOV 비트 (SSPCON1<6>) 은 set 되며 SSPSR 에있는바이트는손실된다. SSPADD 레지스터는슬레이브주소를보전된다. 10 비트모드에서, 사용자는주소 (1111 0 A9 A8 0) 의상위바이트를쓸필요가있다. 다음의상위바이트주소매치 (match), 주소의낮은바이트는적재될필요가있다 (A7: A0). 2007 Microchip Technology Inc. Advance Information DS31017A-page 19
PICmicro MID-RANGE MCU FAMILY 17.4.1 Slave Mode 슬레이브모드에서, SCL 와 SDA 핀은반드시입력으로구성되어야한다. SSP 모듈은요구될때 (slave-transmitter) 출력데이터를가진입력상태를무시할것이다. 주소가대등하게되거나주소매치 (match) 후에데이터전송기가수신될때하드웨어는자동적으로 acknowledge (ACK) 펄스를발생한다. 그후 SSPSR 레지스터에서현재의수신된값과함께 SSPBUF 레지스터로적재한다. SSP 모듈이이 ACK 펄스를주지않게하는특정한조건이있다. 이러한것들은 2 개중하나또는 2 개모두이다 : a) 버퍼풀비트 [BF (SSPSTAT<0>)] 는전송이수신되기전에 set 된다. b) 오버플로우비트 [SSPOV (SSPCON1<6>)] 는전송이수신되기전에 set 된다. BF 가 set 이라면 SSPSR 레지스터값은 SSPBUF 으로적재되지않는다. 그러나 SSPIF 와 SSPOV 비트는 set 이다. 표 17-2 는데이터전송바이트가수신될때와 BF 와 SSPOV 비트의상태가주어질때일어나는것을보여준다. BF 플래그비트는소프트웨어를통해 SSPOV 가클리어되는동안 SSPBUF 레지스터를읽어서클리어된다. SCL 클럭입력은적절한동작을위한최소 high 와 low 시간을가져야한다. SSP 모듈의 high 와 low 시간은규격뿐만아니라 전기적규격 섹션의타이밍파라미터 100 과 101 에서보여진다.
17.4.1.1 Addressing 일단 SSP 모듈이인에이블되면, 이것은시작조건이발생하기위해대기한다. 다음의시작조건과, 8- 비트는 SSPSR 레지스터로이동된다. 모든들어오는비트는클럭 (SCL) 라인의상승가장자리로추출된다. 레지스터 SSPSR<7:1> 의값은 SSPADD 레지스터의값과비교된다. 주소는 8 번째클럭 (SCL) 펄스의떨어지는가장자리에비교된다. 주소가일치하면, BF 와 SSPOV 비트는클리어되고다음의사건이일어난다 : a) SSPSR 레지스터값은 8 번째 SCL 펄스의떨어지는가장자리에서 SSPBUF 레지스터로적재된다. b) 버퍼풀비트 (BF) 는 8 번째 SCL 클럭의떨어지는가장자리에서 set 된다. c) ACK 펄스는발생된다. d) SSP 인터럽트플래그비트 (SSPIF) 는 9 번째 SCL 클럭의떨어지는가장자리에서 set 이다. ( 인에이블되면인터럽트는발생된다 ). 10- 비트주소모드에서, 2 주소바이트는슬레이브에의해수신될필요가있다. 첫번째주소바이트의가장최상의비트 (MSbs) 는이것이 10 비트주소인지를지정한다. R/W 비트 (SSPSTAT<2>) 는쓰기를지정해야한다. 그래서슬레이브장치는 2 번째주소바이트를받을것이다. 주소의 2 MSbs 가 A9 와 A8 인반면에 10- 비트주소를위해첫번째바이트는 1111 0 A9 A8 0 와같을것이다. 10 비트주소를위한사건의연속은슬레이브전송기를위한단계 7 9 와같이뒤이어일어난다 ; 1. 주소의 1 번째 (high) 바이트를수신하시오 (SSPIF, BF 및 UA (SSPSTAT<1>) 은 set 이다 ). 2. 주소 (UA 비트를클리어하고 SCL 라인을방출한다 ) 의 2 번째 (low) 바이트와같이 SSPADD 레지스터를업데이트하시오. 3. SSPBUF 레지스터 (BF 비트를클리어 ) 를읽고플래그비트 SSPIF 을클리어하시오. 4. 주소의 2 번째 (low) 바이트를수신하시오 (SSPIF, BF 및 UA 비트는 set 이다 ). 5. 주소의 1 번째 (high) 바이트와같이 SSPADD 레지스터를업데이트하시오. 이것은 UA 비트를클리어하고 SCL 라인을방출한다. 6. SSPBUF 레지스터 (BF 비트를클리어 ) 를읽고 SSPIF 플래그비트를클리어하시오. 7. 반복된시작조건을수신하시오. 8. 주소의 1 번째 (high) 바이트를수신하시오 (SSPIF 와 BF 비트는 set 이다 ). 9. SSPBUF 레지스터 (BF 비트클리어 ) 를읽고 SSPIF 플래그비트를클리어하시오. Note: 10 비트모드에서반복된시작조건 (step 7) 의다음은, 사용자는오직 1 번째 7- 비트주소를일치시키기위한필요가있다. 사용자는주소의 2 번째절반을위한 SSPADD 를업데이트하지않는다 Table 17-2: Data Transfer Received Byte Actions Note: 색칠된상자는사용자소프트웨어가오버플로우상태를적절히클리어하지않았다는것을보여준다. 2007 Microchip Technology Inc. Advance Information DS31017A-page 21
PICmicro MID-RANGE MCU FAMILY 17.4.1.2 Slave Reception 주소바이트의 R/W 비트가클리어하고주소매치 (match) 가발생할때, SSPSTAT 레지스터의 R/W 비트는클리어된다. 수신된주소는 SSPBUF 레지스터로적재된다. 주소바이트오버플로우 (overflow) 상태가존재할때, 그후어떤 acknowledge (ACK) 도주어지지않는다. 오버플로우상태가 BF 비트 (SSPSTAT<0>) 가 set 또는 SSPOV 비트 (SSPCON1<6>) 가 set 으로정의된다. SSP 인터럽트는각데이터전송바이트를위해생성된다. SSPIF 플래그비트는반드시소프트웨어에서클리어되어야한다. SSPSTAT 레지스터는수신된바이트의상태를결정하기위해사용된다. Note: SSPOV 비트가클리어되고 BF 플래그비트가클리어되는경우 SSPBUF 는적재된다. SSPBUF 의읽기가수행되는경우, 그러나사용자는다음수신이발생하기전에 SSPOV 비트의상태를클리어한다. ACK 는송신되지않으며 SSPBUF 는업데이트되지않는다.
17.4.1.3 Slave Transmission 들어오는주소바이트의 R/W 비트가 set 이고주소매치가발생할때, SSPSTAT 레지스터의 R/W 비트는 set 이다. 수신된주소는 SSPBUF 레지스터로적재된다. ACK 펄스는 9 비트에보내지고 SCL 핀은 low 로유지된다. 전달데이터는또한 SSPSR 레지스터로적재하는 SSPBUF 레지스터로적재되어야한다. 그후 SCL 핀은 CKP 비트 (SSPCON1<4>) 를설정하여인에이블된다. 마스터는다른클럭펄스를주장하기이전에 SCL 핀을감시해야한다. 슬레이브장치는클럭을늘력서마스터를지연시킬수있다. 8 개의데이터비트는 SCL 입력의떨어지는가장자리에밖으로이동된다. 이것은 SDA 신호가 SCL high time 동안유효하다는것을확인시켜준다 ( 표 17-13). SSP 인터럽트는각데이터전송바이트를위해생성된다. SSPIF 플래그비트는소프트웨어에서클리어되어야하고, SSPSTAT 레지스터는바이트전송의상태를결정하기위하여사용된다. SSPIF 플래그비트는 9 클럭펄스의떨어지는가장자리에서 set 이다. 슬레이브전송기로서, 마스터 - 수신기로부터 ACK 펄스는 9 SCL 입력펄스의상승가장자리에래치 (latch) 된다. SDA 라인이 high 인경우 (not ACK), 그후데이터전송은완료된다. 슬레이브에의해 ACK 가래치 (latch) 되지않을때슬레이브로직은리셋되고그후슬레이브는다른시작비트의발생을감시한다. SDA 라인이 low 인경우 (ACK), 전송데이터는또한 SSPSR 로적재되는 SSPBUF 레지스터로적재된다. 그후다음 SCL 핀은 CKP 비트를설정하여인에이블되어야한다. Figure 17-12: Slave Mode Waveforms for Reception (7-bit Address) Figure 17-13: Slave Mode Waveforms for Transmission (7-bit Address) 2007 Microchip Technology Inc. Advance Information DS31017A-page 23
PICmicro MID-RANGE MCU FAMILY
2007 Microchip Technology Inc. Advance Information DS31017A-page 25
PICmicro MID-RANGE MCU FAMILY 17.4.2 General Call Address Support 시작상태후에 1 번째바이트와같은버스를위한어드레싱절차는대개장치가마스터에의해어드레스된슬레이브를결정한다. 예외는모든장치를어드레스할수있는일반적인호출주소이다. 이주소가사용될때, 모든장치는이론적으로 acknowledge 에응답해야한다. 일반적인호출주소는프로토콜에의한구체적인목적을위해지정된 8 주소중에하나다. 그것은 R/W = 0 을가진모든 0 s 로이루어져있다. 일반적인호출주소는일반적인호출인에이블비트 (GCEN) 가인에이블될때 (SSPCON2<7> set) 인식된다. 다음의시작 - 비트검출, 8- 비트는 SSPSR 로이동되고주소는 SSPADD 에대해비교되고그리고또한하드웨어에고정된일반적인호출주소에비교된다. 일반적인주소호출가일치하면 SSPSR 는 SSPBUF 로전송되고 BF 플래그비트는 set 이다 (8 비트 ). 그리고 9 비트 (ACK bit) 떨어지는가장자리에서 SSPIF 인터럽트플래그비트는 set 이다. 인터럽트가서비스될때. 인터럽트를위한소스는주소가구체적인장치인지또는일반적인호출주소인지를결정하기위해 SSPBUF 의내용을읽어서체크될수있다. 10 비트모드에서, SSPADD 는일치하기위해주소의 2 번째절반을위해업데이트될필요가있다. 그리고 UA 비트는 set 이다 (SSPSTAT<1>). 10 비트에서슬레이브가구성되는동안 GCEN 비트가 set 될때일반적인주소호출이추출되고그후주소의 2 번째절반은불필요하다. UA 비트는 set 되지않으며그리고슬레이브는 acknowledge 후에데이터를수신하여시작한다. Figure 17-16: Slave Mode General Call Address Sequence (7 or 10-bit Address Mode)
17.4.3 Sleep Operation 슬립모드동안, 모듈은데이터를수신할수있고, 슬립모드동안, 주소가일치하거나완료될때바이트전송이발생한다 (MSSP 인터럽트가인에이블되는경우 ) 17.4.4 Effect of a Reset 리셋은 MSSP 모듈을불능으로하고현재전송을종결한다. Table 17-3: Registers Associated with Operation 해설 : x = 알수없음, u = 변하지않음, - = 실행되지않으며 0 으로읽음. 색칠된상자는 SPI 모듈에서 SSP 에의해사용되지않는다. Note 1: 이비트의위치는장치에의존한다. 2: 이비트들은또한 GPIE 와 GPIF 로불리운다. 2007 Microchip Technology Inc. Advance Information DS31017A-page 27
PICmicro MID-RANGE MCU FAMILY 17.4.5 Master Mode 동작의마스터모드는시작과정지상태의검출에서인터럽트발생에의해지원된다. 정지 (p) 와시작 (S) 비트는리셋으로클리어되거나 SSP 모듈이불능일때클리어된다. P 비트가 set 일때또는 S 와 P 비트클리어를가진버스가아이들 (idle) 일때버스의제어가장악될지도모른다. 마스터모드에서 SCL 와 SDA 라인은 SSP 하드웨어에조작된다. 뒤에오는이벤트는 SSP 인터럽트플래그비트, SSPIF 가 set 되는것을야기한다. ( 인에이블되면 SSP 인터럽트 ): START condition STOP condition Data transfer byte transmitted/received Acknowledge Transmit Repeated Start Figure 17-17: SSP Block Diagram (I2C Master Mode)
17.4.6 Multi-Master Mode 멀티 - 마스터모드에서, 시작과정지조건의검출에서인터럽트발생은버스가 free 일때결정을허용한다. 정지 (p) 와시작 (S) 비트는리셋으로클리어되거나 SSP 모듈이불능일때클리어된다. P 비트 (SSPSTAT<4>) 가 set 일때또는 S 와 P 비트클리어를가진버스가아이들 (idle) 일때버스의제어가장악될지도모른다. 멀티 - 마스터모드에서 SDA 라인은신호레벨이예상된출력레벨인지확인하기위해반드시모니터되어야한다. 이러한검사는 BCLIF 비트에위치한하드웨어에서수행된다. 중재가손실될수있는이러한상태는다음과같다 : Address Transfer Data Transfer A Start Condition A Repeated Start Condition An Acknowledge Condition 17.4.7 Master Mode Support SSPCON1 에위치한적절한 SSPM 비트를설정하거나클리어하여그리고 SSPEN 비트를설정하여마스터모드는인에이블된다. 일단마스터모드가인에이블되자마자, 사용자는 6 개의옵션이있다. 1. SDA 와 SCL 에시작조건을단언하십시오. 2. SDA 와 SCL 의반복된시작조건를주장하십시오. 3. 데이터 / 주소의전송을시작하는 SSPBUF 레지스터에쓰십시오. 4. SDA 와 SCL 의정지조건을생성하십시오. 5. 데이터를받기위하여포트를구성하십시오. 6. 데이터의수신된바이트의끝에 acknowledge 환경를생성하십시오. Note: 마스터모드에서구성될때 SSP 모듈은이벤트의열 (queue) 을허용하지않는다. 예를들면 : 사용자는시작상태를시작하는것이허용되지않으며, 시작조건이완료되기전에전송을모방하기위해즉시 SSPBUF 레지스터에쓰기하시오. 이런경우 SSPBUF 는쓰여지지않으며 SSPBUF 에쓰기가발생하지않는다는것을지시하는 WCOL 비트는 set 될것이다. 2007 Microchip Technology Inc. Advance Information DS31017A-page 29
PICmicro MID-RANGE MCU FAMILY 17.4.7.1 Master Mode Operation 마스터장치는시리얼클럭펄스와시작과정지조건전부를생성한다. 전송은정지조건또는반복된시작상태로끝난다. 반복된시작상태는또한다음시리얼전송의시작이기때문에버스는방출되지않는다. SCL 이시리얼클럭을출력하는반면마스터전송기모드시리얼데이터는 SDA 을통한출력이다. 전송된 1 번째바이트는수신하는장치의슬레이브주소 (7 비트 ) 와읽기 / 쓰기 (R/W) 비트를포함한다. 이런경우 R/W 비트는논리 0 이다. 시리얼데이터에한번에 8 개비트가전달된다. 각바이트가전달된후, acknowledge 비트는수신된다. 시작과정지조건은시리얼전송의시작과끝을지시하기위하여출력이다. 마스터모드에서전달된 1 번째바이트는전송장치 (7 비트 ) 의슬레이브주소와 R/W 비트를포함한다. 이런경우에 R/W 비트는논리 `1 ` 일것이다. 그러므로전달된 1 번째바이트는수신비트를지시하기위해 1 에뒤이은 7- 비트슬레이브주소를포함한다. SCL 가시리얼클럭을출력하는동안시리얼데이터는 SDA 를통해수신된다. 시리얼데이터는한번에 8 비트로수신된다. 각바이트가수신된후, acknowledge 비트는수신된다. 시작과정지조건은전송의시작과끝을지시한다. SPI 모드동작을위해사용되는보레이트발생기는 100 khz, 400 khz, 또는 1 MHz 동작동안 SCL 클럭주파수를설정하기위해사용된다. 보레이트발생기재적재 (reload) 값은 SSPADD 레지스터의낮은 7 비트에포함된다. 보레이트발생기가자동적으로 SSPBUF 에쓰는것에대한카운트 (count) 하는것을시작한다. 일단주어진동작이완료되면 ( 즉, 마지막데이터비트의전송이 ACK 에선행된다 ) 내부클럭이자동적으로카운팅하는것을중단하고이것의마지막상태는유지될것이다. 전형적인시컨스 (sequence) 는다음과같이동작한다 : a) 사용자는시작인에이블비트 SEN(SSPCON2<0>) 를설정하여시작상태를발생시킨다. b) SSPIF 는 set 이다. SSP 모듈은어떤다른동작이발생하기전에요구된시작시간을기다릴것이다. c) 사용자는전달하기위해주소를가진 SSPBUF 를적재한다. d) 8 비트가전송될때까지주소는 SDA 핀밖으로이동된다. e) SSP 모듈은슬레이브장치로부터 ACK 비트로이동하고 SSPCON2 레지스터 (SSPCON2<6>) 안에그것의값을쓴다. f) SSP 모듈은 SSPIF 비트를설정하여 9 클럭사이클의끝에서인터럽트를생성한다. g) 사용자는자료의 8 비트를 SSPBUF 로적재한다. h) 8 비트가전송될때까지자료는 SDA 핀이라고밖으로이동한다. i) SSP 모듈은슬레이브장치로부터 ACK 비트로이동하고, SSPCON2 레지스터 (SSPCON2<6>) 안으로그것의값을쓴다. j) SSP 모듈은 SSPIF 비트를설정하여 9 클럭사이클의끝에서인터럽트를생성한다. k) 사용자는정지인에이블비트와 PEN (SSPCON2<2>) 을설정하여정지조건을생성한다. l) 정지조건이완료되자마자인터럽트가생성된다.
17.4.8 Baud Rate Generator 마스터모드에서는, BRG 를위한재적재 (reload) 값은 SSPADD 레지스터 ( 표 17-18) 의더낮은 7 비트에위치한다. BRG 가이값으로적재될때, BRG 는 0 을향해서아래로세고다른재적재가일어날때까지정지한다. 마스터모드에서는, BRG 는자동적으로재적재된다. 예를들어클럭중재가일어나는경우, SCL 핀이 high 로추출될때 ( 표 17-19) BRG 는재적재될것이다. Figure 17-18: Baud Rate Generator Block Diagram Figure 17-19: Baud Rate Generator Timing With Clock Arbitration 2007 Microchip Technology Inc. Advance Information DS31017A-page 31
PICmicro MID-RANGE MCU FAMILY 17.4.9 Master Mode Start Condition Timing 시작조건을시작하기위해사용자는시작조건인에이블비트 SEN (SSPCON2<0>) 을 set 해야한다. SDA 와 SCL 핀이 high 로추출되는경우에, 보레이트발생기는 SSPADD<6:0> 의내용과함께재적재되며그것의카운트 (count) 를시작한다. SCL 와 SDA 가둘다 high 로추출되는경우보레이트발생기가타임아웃 (TBRG) 될때 SDA 핀은 low 로간다. SCL 이 high 인동안 low 로가는 SDA 의동작은시작상태이며 S 비트 (SSPSTAT<3>) 이 set 되는것을야기한다. 보레이트발생기는 SSPADD<6:0> 의내용으로재적재되며이것의카운트를재개한다. 보레이트발생기가타임아웃 (TBRG) 일때 SEN 비트 (SSPCON2<0>) 은자동적으로하드웨어에의해클리어되며보레이트발생기는 SDA 라인을 low 로유지한채중지되며시작조건은완료된다. Note: 시작상태의시작시점에서 SDA 와 SCL 핀이이미 low 로추출된경우또는시작상태동안 SDA 라인이 low 로가기전에 SCL 라인이 low 로추출된경우버스충돌이발생하고버스충돌인터럽트플래그 (BCLIF) 는 set 되며, 시작조건은취소된다. 그리고모듈은그것의아이들 (idle) 상태에서 reset 된다 17.4.9.1 WCOL Status Flag 시작시컨스 (sequence) 가진행하는중일때사용자가 SSPBUF 에쓰기할경우그후 WCOL 는 set 되고그리고버퍼의내용은변하지않는다 ( 쓰기가발생하지않는다 ). Note: 사건의열 (queue) 가허용되지않기때문에, SSPCON2 의더낮은 5 비트에쓰는것은시작조건이완료되기까지불능된다 Figure 17-20: First Start Bit Timing
2007 Microchip Technology Inc. Advance Information DS31017A-page 33
PICmicro MID-RANGE MCU FAMILY 17.4.10 Master Mode Repeated Start Condition Timing RSEN 비트 (SSPCON2<1>) 가 high 로프로그램되고로직모듈이아이들 (idle) 상태에있을때반복된시작조건이발생한다. RSEN 비트가 set 될때, SCL 핀은 low 로주장된다. SCL 핀이 low 로추출될때보레이트발생기는 SSPADD<5:0> 의내용으로적재되고카운팅 (counting) 이시작한다. SDA 핀은 1 보레이트발생기카운트 (TBRG) 을위해방출된다. 보레이트발생기가타임아웃될때 SDA 가 high 로추출되는경우, SCL 핀은주장되지않는다 (high 가져옴 ). SCL 가 high 로추출될때보레이트발생기는 SSPADD<6:0> 의내용으로재적재되고카운팅을시작한다. SDA 와 1 TBRG 를위해반드시 high 로추출되어야한다. 그후이동작은 SCL 이 high 인동안 1 TBRG 를위해 SDA 핀의주장 (SDA = 0) 에의해뒤따라온다. 이것의다음에, RSEN 비트 (SSPCON2<1>) 은자동적으로클리어되고그리고 SDA 핀을 low 로고정하는보레이트발생기는재적재되지않는다. 시작상태가 SDA 와 SCL 핀에서검출되자마자, S 비트 (SSPSTAT<3>) 은 set 될것이다. SSPIF 비트는보레이트발생기가타임아웃될때까지 set 되지않을것이다. Note 1: 다른어떤사건이진행중인동안 RSEN 가프로그램되는경우, 영향을미치지않는다. Note 2: 반복된시작상태동안버스충돌은다음과같다면생긴다. SDA 는 SCL 이 low 에서 high 로갈때 low 로추출된다 SCL 는 SDA 가 low 로주장되지전에 low 로간다이것은또다른마스터가데이터 1 의전송을시도한다는것을나타낸다 즉각적으로다음의 SSPIF 비트가 set 되면, 사용자는 SSPBUF 에 7- 비트모드에서의또는 10- 비트모드에서초기 1 번째주소에서 7- 비트주소를쓰기할것이다. 1 번째 8 비트가전송된후그리고 ACK 가수신된후, 사용자는그후주소 (10- 비트모드 ) 의추가적인 8 비트또는데이터 (7 비트모드 ) 의 8 비트를전송할것이다.
17.4.10.1 WCOL Status Flag 반복된시작시컨스 (sequence) 가진행중일때사용자가 SSPBUF 에쓰는경우, WCOL 는 set 되며버퍼의내용은변하지않는다 ( 쓰기는발생하지않음 ). Note: 사건의열 (queue) 은허용되지않기때문에, SSPCON2 의더낮은 5 비트의쓰기는반복된시작상태가완료될때까지불능이다. Figure 17-22: Repeat Start Condition Waveform 2007 Microchip Technology Inc. Advance Information DS31017A-page 35
PICmicro MID-RANGE MCU FAMILY
2007 Microchip Technology Inc. Advance Information DS31017A-page 37
PICmicro MID-RANGE MCU FAMILY 17.4.11 Master Mode Transmission 10 비트주소의절반또는 7 비트주소, 데이터바이트의전송은간단하게 SSPBUF 레지스터에값을쓰기하여달성된다. 이실행은버퍼풀플래그비트 (BF) 를 set 할것이며보레이트발생기가카운팅을시작하고다음전송을시작하는것을허용한다. SCL 의떨어지는에지 (edge) 가주장된후 ( 데이터유지시간규격파라미터 106 을보시오 ) 각주소 / 데이터의비트는 SDA 핀밖으로이동될것이다. SCL 는 1 보레이트발생기롤오버 (rollover) 카운트 (TBRG) 동안 low 로유지된다. SCL 이 high 로방출될때 SDA 핀의데이터는반드시 SCL 의다음떨어지는에지후에일부유지시간과기간을안정한채로유지한다. 8 번째비트가밖으로이동한후 (8 번째클럭의떨어지는에지 ) 만약주소매치 (match) 가일어나는경우또는데이터가적절하게수신되는경우 BF 플래그는클리어되고마스터는슬레이브장치가 9 번째비트타임동안 ACK 비트에응답하는것을허용하는허용하는 SDA 핀을방출한다. ACK 의상태는 9 번째클럭의떨어지는가장자리에서 ACKDT 비트로쓰여진다. 마스터가 acknowledge 을수신하는경우에, acknowledge 상태비트 (ACKSTA) 는클리어된다. 만약아니라면, 비트는 set 이다. 9 클럭후에 SSPIF 비트는 set 이며그리고마스터클럭 ( 보레이트발생기 ) 는 SCL 을 low 로유지하고 SDA 가변하지않게남겨준 SSPBUF 로다음데이터바이트가적재될때까지지연된다 ( 표 17-26). SSPBUF 에쓰기후에주소의각비트는모든 7 주소비트와 R/W 비트가완료될때까지 SCL 의떨어지는부분에서밖으로이동될것이다. 8 번째클럭의떨어지는지점에서마스터는슬리에브가 acknowledge 에대해응답하는것을허용하는 SDA 핀을주장하지않을것이다. 9 클럭의떨어지는가장자리에서마스터는주소가슬레이브에의해인식되었는지를확인하기위해 SDA 핀을추출할것이다. ACK 비트의상태는 ACKSTAT 상태비트 (SSPCON2<6>) 로적재된다. 주소의 9 번째클럭전송의떨어지는가장자리다음으로 SSPIF 는 set 되고, BF 플래그는클리어되며, 보레이트발생기는 SCL 을 low 로유지하고 SDA 가플로트 (float) 로되는것을허용하느 SSPBUF 에쓰기가발생할때까지꺼진다. 17.4.11.1 BF Status Flag 전송모드에서, CPU 가 SSPBUF 에쓰기할때 BF 비트 (SSPSTAT<0>) 은 set 되고모든 8 비트가밖으로이동할때클리어된다. 17.4.11.2 WCOL Status Flag 전달이이미진행중일때 ( 즉, SSPSR 이여전히데이터바이트를밖으로이동시키는중 ), 그후 WCOL 는 set 되고버퍼의내용은변하지않는다 ( 쓰기는발생하지않는다 ). WCOL 는소프트웨어에서클리어되어야한다. 17.4.11.3 ACKSTAT Status Flag 전송모드에서, ACKSTAT 비트 (SSPCON2<6>) 은슬레이브가 acknowledge (ACK = 0) 을보낼때클리어되고슬레이브가 acknowledge (ACK = 0) 을보내지않을때 set 된다. 슬레이브는그것의주소를 ( 일반적인호출포함 ) 인식할때또는슬레이브가적합하게그것의데이터를수신하였을때, acknowledge 을보낸다.
2007 Microchip Technology Inc. Advance Information DS31017A-page 39
PICmicro MID-RANGE MCU FAMILY
17.4.12 Master Mode Reception 마스터모드수신은수신인에이블비트 [RCEN (SSPCON2<3>)] 을프로그래밍하여인에이블된다. Note: SSP 모듈은 RCEN 비트가 set 되기전에반드시아이들 (idle) 상태에있어야한다. 그렇지않으면 RCEN 비트는무시될것이다 보레이트발생기는카운팅 (counting) 을시작하고각롤오버 (rollover) 에서 SCL 핀의상태는 (high to low/low to high) 로변하시키고데이터는 SSPSR 로이동된다. 8 번째클럭의떨어지는가장자리후, 수신인에이블플래그는자동적으로클리어되고 SSPSR 의내용은 SSPBUF 로적재되고, BF 플래그비트는 set 되고 SSPIF 플래그비트는 set 되고, 그리고보레이트발생기는 SCL 을 low 로유지하는카운팅으로부터중단된다. SSP 는다음명령을기다리는아이들상태에있게된다. 버퍼가 CPU 에의해읽힐때, BF 플래그비트는자동적으로클리어된다. 그후사용자는 acknowledge 시컨스인에이블비트 ACKEN (SSPCON2<4>) 를설정하여수신의마지막에서 acknowledge 을보낼수있다. 17.4.12.1 BF Status Flag 수신동작에서, 주소또는바이트데이터가 SSPSR 에서 SSPBUF 로적재될때 BF 비트는 set 된다. SSPBUF 레지스터가읽힐때클리어된다. 17.4.12.2 SSPOV Status Flag 수신동작에서, 8 비트가 SSPSR 로수신될때 SSPOV 비트는 set 이며 BF 플래그비트는이미이전의수신으로부터 set 이다. 17.4.12.3 WCOL Status Flag 사용자가 SSPBUF 에쓰기하는경우수신이이미진행중일때 ( 즉, SSPSR 이여전히데이터바이트에서이동할때 ), 그후 WCOL 비트는 set 되고, 버퍼의내용은변하지않는다 ( 쓰기는발생하지않음 ). 2007 Microchip Technology Inc. Advance Information DS31017A-page 41
PICmicro MID-RANGE MCU FAMILY
2007 Microchip Technology Inc. Advance Information DS31017A-page 43
PICmicro MID-RANGE MCU FAMILY 17.4.13 Acknowledge Sequence Timing acknowledge 순서는 acknowledge 시컨스인에이블비트 [ACKEN (SSPCON2<4>)] 를설정하여인에이블된다. 이비트가 set 될때, SCL 핀은 low 로떨어지고 acknowledge 데이터비트는 SDA 핀에주어진다. 사용자가 acknowledge 을발생시키기원한다면그다음으로 ACKDT 비트는클리어되어야한다. 만약그렇지않다면 acknowledge 순서를시작하기전에사용자는 ACKDT 비트를설정해야한다. 그후보레이트발생기는 1 롤오버주기 (TBRG) 동안카운트하고그리고 SCL 핀은주장되지않는다 (high 로가는 ). SCL 핀이 high 로추출될때 ( 클럭중재 ), 보레이트발생시는 TBRG 를카운트한다. 그후 SCL 핀이 low 로간다. 이것다음으로, ACKEN 비트는자동적으로클리어되고, 보레이트발생기는꺼지며 SSP 모듈은아이들모드로들어간다 ( 표 17-29). 17.4.13.1 WCOL Status Flag acknowledge 순서가진행중일때사용자가 SSPBUF 에쓰는경우, WCOL 는 set 되고버퍼의내용은변하지않는다 ( 쓰기는발생하지않는다 ). Figure 17-29: Acknowledge Sequence Waveform
2007 Microchip Technology Inc. Advance Information DS31017A-page 45
PICmicro MID-RANGE MCU FAMILY 17.4.14 Stop Condition Timing 정지시컨스인에이블비트 [PEN (SSPCON2<2>)] 를설정하여수신 / 전송의끝에서정지비트는 SDA 핀에주장된다. 수신 / 전송의끝에서 9 번째클럭의떨어지는에지 (edge) 후에 low 로고정된다. PEN 비트가 set 일때, 마스터는 SDA 라인을 low 로단정한다. SDA 라인이 low 로추출되면보레이트발생기는재적재되고 0 으로카운트할것이다. 보레이트발생기가타임아웃일때, SCL 핀은 high 로가져오고나중에 1 TBRG ( 보레이트발생기롤오버 (rollover) 를가져오고 SDA 핀은주장되지않는다. SCL 이 high 인동안 SDA 핀이 high 로추출될때 P 비트 (SSPSTAT<4>) 는 set 이다. TBRG 후에 PEN 비트가클리어되고 SSPIF 비트는 set 이다 ( 표 17-31). 펌웨어가버스의제어를가지는것을결정할때마다 SSPSTAT 레지스터에있는 S 와 P 비트를체크하여버스가사용중인지를첫째로결정한다. 그후정지비트가검출되면 ( 즉, 버스는 free) CPU 는인터럽트 ( 알려진 ) 된다. 17.4.14.1 WCOL Status Flag 정지순서가진행중일때사용자가 SSPBUF 에쓰는경우에, 그후 WCOL 비트는 set 되고버퍼의내용은변하지않는다 ( 쓰기는발생하지않는다 ). Figure 17-31: Stop Condition Receive or Transmit Mode
2007 Microchip Technology Inc. Advance Information DS31017A-page 47
PICmicro MID-RANGE MCU FAMILY 17.4.15 Clock Arbitration 클럭중재는어떤수신, 전송, 반복된시작 / 정지상태동안마스터가 SCL 핀을주장하지않을때 (high 로되는것이허용된 SCL) 발생한다. SCL 핀이 high 로허용될때, 보레이트발생기 (BRG) 는 SCL 핀이실제로 high 로추출될때까지카운팅으로부터중단된다. SCL 핀이 high 로추출될때, 보레이트발생기는 SSPADD<6:0> 의내용으로재적재되고카운팅을시작한다. 이것은 SCL high time 이항상외부장치 ( 표 17-33) 에의해 low 로유지되는클럭인이벤트에위치한적어도 1 BRG 롤오버 (rollover) 카운트이다. Figure 17-33: Clock Arbitration Timing in Master Transmit Mode 17.4.16 Sleep Operation (MSSP 개입중단이가능하게되는경우에 ) 슬립모드동안, 모듈은주소와데이터를수신하고그리고주소매치 (match) 또는완전한바이트전송이발생할때프로세서를슬립 (sleep) 으로부터탈출시킨다 (MSSP 인터럽트가인에이블되는경우 ). 17.4.17 Effect of a Reset 리셋은 MSSP 모듈을불능으로만들고현재의전송을종결한다.
17.4.18 Multi -Master Communication, Bus Collision, and Bus Arbitration 멀티 - 마스터모드지원은버스중재에의해달성된다. 마스터가주소 / 데이터비트를 SDA 핀으로출력할때중재가발생하고마스터가 1 을 SDA 플롯 (float) 을 high 로놓아서 SDA 에출력하고또다른마스터는 0 을주장한다. SCL 핀이 high 로뜰때, 데이터는안정해야한다. SDA 에예상한데이터가 1 인경우에데이터는 SDA 핀 = 0 으로추출한다. 그리고버스충돌이발생한다. 마스터는버스충돌인터럽트플래그 (BCLIF) 을 set 하고이것의아이들상태로향한포트를리셋한다 ( 표 17-34). 버스충돌이발생할때전송이진행중인경우에전송은중지되고 BF 플래그는클리어되며 SDA 와 SCL 라인은주장되지않고 SSPBUF 는쓰여질수있다. 사용자는버스충돌인터럽트서비스루틴을서비스할때버스 free 인경우, 사용자는시작조건을주장하여커뮤니케이션을재개한다. 시작, 반복된시작, 정지또는 Acknowledge 조건이진행중인경우버스충돌이발생하면그조건은취소되고 SDA 와 SCL 라인은주장되지않으며 SSPCON2 레지스터에개별적인제어비트는클리어된다. 사용자가버스충돌인터럽트서비스루틴을서비스할때그리고버스가 free 인경우사용자는시작조건을주장하여커뮤니케이션을재개할수있다. 마스터는 SDA 와 SCL 핀을감시하는것을계속할것이다. 그리고정지조건이발생하면 SSPIF 비트는 set 될것이다. 버스충돌이발생할때전송기가버려진장소에상관없이 SSPBUF 에쓰기는 1 번째데이터비트에서데이터의전송을시작할것이다. 멀티 - 마스터모드에서, 시작과정지조겆의검출에서인터럽트발생은버스가 free 하는시각을결정하는것을허락한다. P 비트가 SSPSTAT 레지스터에서 set 일때또는버스가아이들이고 S 와 P 비트가클리어될때버스의제어는취해진다. Figure 17-34: Bus Collision Timing for Transmit and Acknowledge 2007 Microchip Technology Inc. Advance Information DS31017A-page 49
PICmicro MID-RANGE MCU FAMILY 17.4.18.1 Bus Collision During a START Condition 시작상태동안만약버스충돌은생긴다면 : a) SDA 또는 SCL 은시작상태의시작에서 low 로추출된다 ( 표 17-35). b) SCL 는 SDA 가 low 로주장되기전에 low 로추출된다 ( 표 17-36). 시작상태동안 SDA 와 SCL 핀은둘다감시된다. 만약 : SDA 핀이이미 low 로추출되거나또는 SCL 핀이 low 로추출되면, 그후 : 시작상태는취소되고, BCLIF 플래그는 set 되고 SSP 모듈은아이들상태 ( 표 17-35) 에서리셋된다. 시작상태는주장되지않은 SDA 와 SCL 핀으로시작된다. SDA 핀이 high 로추출될때, 보레이트발생기는 SSPADD<6:0> 에서적재되고 0 으로향해아래로센다. SDA 가 high 인동안 SCL 핀이 low 로추출되는경우에, 다른마스터가시작상태동안데이터를 1 로이끈다고추정되기때문에버스충돌이발생한다. 이카운트 (count) 동안 SDA 핀이 low 로추출되는경우, BRG 는리셋되고그리고 SDA 라인은쉽게주장된다 ( 표 17-37). 그러나만약 '1' 이 SDA 핀에서추출되는경우, SDA 핀은 BRG 카운트끝에서 low 로주장된다. 이시기동안보레이트발생기는그후재적재되고 0 으로카운트한다. 만약 SCL 핀이 0 으로추출되면버스충돌은발생하지않는다. BRG 카운트끝에서 SCL 핀은 low 로주장된다. Note: 시작상태동안버스충돌이주요인이아니라는이유는 2 버스마스터가정확히같은시간에시작상태를주장할수없다는것이다. 그러므로 1 마스터는나머지것들전에시작조건을주장해야한다. 2 마스터는반드시시작상태뒤의 1 번째주소를중재하는것이허락되기때문에이상태는버스의충돌에영향을주지않는다. 그리고주소가같다면중재는데이터일부, 반복된시작또는정지상태에서지속되는것이허용된다
Figure 17-35: Bus Collision During Start Condition (SDA only) Figure 17-36: Bus Collision During Start Condition (SCL = 0) 2007 Microchip Technology Inc. Advance Information DS31017A-page 51
PICmicro MID-RANGE MCU FAMILY Figure 17-37: BRG Reset Due to SDA Arbitration During Start Condition
17.4.18.2 Bus Collision During a Repeated Start Condition 반복된시작상태도중, 버스충돌은만약생긴다면 : a) Low 레벨은 SCL 가 low 레벨에서 high 레벨로갈때 SDA 에서추출된다. b) 다른마스터가데이터 1 을전송하는시도를가리키는 SCL 은 SDA 가 low 로추출되기전에 low 로간다. 사용자가 SDA 을주장하지않고그핀이 high 로올라가는것이허락되며 BRG 는 SSPADD<6:0> 로적재되고 0 을향해아래로카운트한다. 그후 SDA 핀은주장되지않으며그리고 high 로추출될때 SDA 핀은추출된다. SDA 가 low 인경우, 버스충돌이발생한다 ( 즉, 표 17-38 에서나타나는다른마스터는데이터 0 을전달하는것을시도한다 ). 그러나만약 SDA 가 high 로추출되고그후 BRG 가재적재되고카운팅 (counting) 을시작한다. BRG 가타임아웃되기전에 SDA 가 high 에서 low 가는경우, 정확히같은시간에서 2 마스터가 SDA 로주장할수없기때문에어떤버스충돌도일어나지않는다. 그러나만약 BRG 시간이끝나거나 SDA 가이미주장되지않기전에 SCL 이 high 에서 low 로가는경우그후버스충돌은발생한다. 이경우에, 표 17-39 에보이는바와같이반복된시작상태동안다른마스터는데이터 1 을전송하는것을시도한다. 만약 BRG 시간끝나는지점의마지막에서 SCL 와 SDA 가여전히 high 라면, SDA 핀은 low 가며 BRG 는재적재되며카운팅을시작한다. SCL 핀의상태에관계없이카운티 (count) 의끝에서 SCL 핀은 low 로가고반복된시작상태는완료된다. Figure 17-38: Bus Collision During a Repeated Start Condition (Case 1) 2007 Microchip Technology Inc. Advance Information DS31017A-page 53
PICmicro MID-RANGE MCU FAMILY Figure 17-39: Bus Collision During Repeated Start Condition (Case 2)
17.4.18.3 Bus Collision During a STOP Condition 만약정지상태동안버스충돌이발생한다면 : a) SDA 핀이주장되지않고 high 로띄어진후 SDA 는 BRG 가타임아웃한후 low 로추출된다. b) SCL 핀이주장되지않고 SDA 가 high 로가기전에 low 로추출된다. 정지상태는 low 로주장된 SDA 와같이시작된다. SDA 가 low 로추출될때, SCL 핀은플로트 (float) 하는것을허용한다. 이핀이 high 로추출되면 ( 클럭중재 ), 보레이트발생기는 SSPADD<6:0> 로적재되고 0 을향해아래로카운트한다. BRG 가타임아웃한후에 SDA 는추출된다. SDA 가 low 로추출되는경우버스충돌이발생한다. 이것은다른마스터가데이터 0 ( 표 17-40) 을시도했기때문이다. SDA 가 high 로올라가는것이허용되기전에 SCL 핀은 low 로추출되는경우버스충돌이발생한다. 이것은또다른마스터가데이터 0 을이동하는것을시도하는다른경우이다 ( 표 17-41). Figure 17-40: Bus Collision During a STOP Condition (Case 1) Figure 17-41: Bus Collision During a STOP Condition (Case 2) 2007 Microchip Technology Inc. Advance Information DS31017A-page 55
PICmicro MID-RANGE MCU FAMILY 17.5 Connection Considerations for Bus 표준모드버스장치를위해, 표 17-42 의저항기 RP 와 RS 값은다음의파라미터에의존한다 : Supply voltage Bus capacitance Number of connected devices (input current + leakage current) 일정한출력단계동안 VOLMAX = 0.4V 에서 3 ma 의일정한최소싱크 (sink) 전류때문에전압공급은저항의최소값을제한하다. 예를들면, 3 ma 에서 VDD = 5V+10% 와 VOLMAX = 0.4V 의공급전압, RPMIN = (5.5-0.4)/0.003 = 1.7 kw 와같이, 꼐의기능으로동작하는 VDD 는표 17-42 에서보여진다. Low 레벨동안 0.1 VDD 의요구된노이즈마진 (margin) 은 RS 의최소값을제한한다. 시리즈저항기는선택적이며그리고 ESD 민감도를증가시키는데사용된다. 버스용량은와이어, 연걸, 그리고핀들의전체적인용량이다. 이용량은지정된상승시간 ( 표 17-42) 때문에 RP 의최대값을제한한다. SMP 비트는인에이블된 slew rate 제어비트이다. 이비트는 SSPSTAT 레지스터에있으며그리고모드 ( 마스터또는슬레이브 ) 일때입력 / 출력핀의 slew rate 을제어한다. Figure 17-42: Sample Device Configuration for Bus 17.6 Initialization
Example 17-2: SPI Master Mode Initialization 17.6.1 Master SSP Module / Basic SSP Module Compatibility 기본적인 SSP 모듈에서 SSPSTAT 레지스터가 SPI 에서변화할때, SSPSTAT 레지스터는 2 개의추가적인제어비트를포함한다. 이러한비트들은 : SMP, SPI data input sample phase CKE, SPI Clock Edge Select 마스터 SSP 모듈의 SPI 와호환이되기위하여는, 이러한비트들은반드시적합하게구성되어야한다. 이러한비트들이표 17-4 년에서보여지는상태가아니라면적절치않은 SPI 통신이발생할수도있다. Table 17-4: New bit States for Compatibility 17.7 Design Tips 2007 Microchip Technology Inc. Advance Information DS31017A-page 57
PICmicro MID-RANGE MCU FAMILY 질문 1: SPI 모드를사용하여, SPI 장치와통신할수없었다. 응답 1: 그장치를위해정확한 SPI 모드를사용하고있는지확인하십시오. 이 SPI 는모든 4 개의 SPI 모드를지원한다. 그래서당신은동작시키기위해그것을얻어야한다. 클럭극성과클럭단계를확인하시오. 질문 2: 모드를사용하여, 나는데이터를 SSPBUF 레지스터에쓴다. 그러나데이터는전송하지않는다. 응답 2: 클럭을방출하기위해당신이 CKP 비트를설정한지를확인하십시오. 17.8 Related Application Notes
이장은메뉴얼의이장과관련된어플리케이션노트를나타낸다. 이러한어플리케이션노트들은 Mid-Range MCU family( 즉, Base-Line, 또는 High-End families 와관련해쓰여진것 ) 을위해명확하게보이지는않을수도있다. 그러나개념은적절하고그리고사용어질수있다 ( 수정, 또는가능한제한 ). 마스터 SSP 모듈과관련된현재의어플리케이션노트들은다음과같다 : Title Application Note # Use of the SSP Module in the Multi-Master Environment Using Microchip 93 Series Serial EEPROMs with Microcontroller SPI Ports Interfacing PIC16C64/74 to Microchip SPI Serial EEPROM Interfacing a Microchip PIC16C92x to Microchip SPI Serial EEPROM AN578 AN613 AN647 AN668 17.9 Revision History 2007 Microchip Technology Inc. Advance Information DS31017A-page 59
PICmicro MID-RANGE MCU FAMILY Revision A 이것은마스터 SSP 모듈설명의최초의출시된개정이다.