Bluetooth 규격

-2.4GHz 대역의 ISM(Industrial Scientific Medical) 대역 (2.402GHz ~ 2.480GHz)

-1Mbps의 전송 속도 (실제 723kbps : 721kbps로 잘못 표기된 곳이 많음)

-간섭방지를 위한 주파수 호핑 방식 (79/23 hop, 1600 hop/sec)

-저소비전력 (대기상태 0.3mA, 송수신시 최대 30mA)

-전송거리 10m 및 Option으로 100m까지 가능

-Class 1,2,3의 송신 파워 (각 100mW, 2.5mW, 1mW)

-변조방식 : GFSK (Guassian Frequency Shift Keying)

-3채널의 Voice 지원 (A-Law, u-Law PCM, CVSD)

-Point to Point, Point to Multi 방식의 연결 가능



일단 저는 대부분의 전자소자와 모듈은 디바이스마트와 엘레파츠를 통해서 구입합니다. 직접 전자상가에 가서 부품을 보고서 구입할때도 있지만...일단 아직까지 학생인지라..^^;..시간과 자금의 여유가..ㅠㅠ 

아무튼 전반적인 블루투스 모듈의 종류를 캡쳐해서 아래에 첨부해봅니다.


블루투스모듈을 공급하는 가장 유명한 회사로는 : 펌테크(firmtech), SENA, 모본(MOVON), 우리디스플레이 정도가 됩니다.





개인적으로 저는 펌테크사의 제품을 추천하며..저렴한 가격대로 구성하실려면 우리디스플레이의 HC-06을 추천합니다.

당근이 카페나 전자소자관련 카페에서 공동구매도 많이 진행하기때문에 적절한 타이밍을 잡아서 구매하시면 되시겠습니다 ^^


아래는 펌테크사의 블루투스 프로파일에 대한 설명입니다.




그리고 블루투스를 사용하실때 CLASS1,2,3 라고 많이들 말씀하시는데 구체적으로 이것이 무엇일까요??

블루투스는 근거리 무선통신으로  CLASS 는 통신의 최대 전파범위(out power)를 의미합니다.


Class 3 radios – have a range of up to 1 meter or 3 feet 

Class 2 radios – most commonly found in mobile devices – have a range of 10 meters or 33 feet 

Class 1 radios – used primarily in industrial use cases – have a range of 100 meters or 300 feet


(1 feet = 30.48cm)

그러나..전파범위가 넓다고 꼭 좋은것만은 아닙니다 ^^;.. 기술이 그렇게 허술할리가 없지요..ㅎ 각각의 장단점이 존재합니다.

각각의 Class별 지원사양이 차이가 나지만 여기서 다루지는 않겠습니다 ㅎ


그리고 다음장부터는 제가 직접다루어본 FB155BC에 대해서 설명하겠습니다.




출처 : http://navercast.naver.com/contents.nhn?rid=122&contents_id=5531  (네이버 캐스트)


루투스(Bluetooth)는 휴대폰, 노트북, 이어폰·헤드폰 등의 휴대기기를 서로 연결해 정보를 교환하는 근거리 무선 기술 표준을 뜻한다. 주로 10미터 안팎의 초단거리에서 저전력 무선 연결이 필요할 때 쓰인다. 예를 들어 블루투스 헤드셋을 사용하면 거추장스러운 케이블 없이도 주머니 속의 MP3플레이어의 음악을 들을 수 있다. 블루투스 통신기술은 1994년 휴대폰 공급업체인 에릭슨(Ericsson)이 시작한 무선 기술 연구를 바탕으로, 1998년 에릭슨, 노키아, IBM, 도시바, 인텔 등으로 구성된블루투스 SIG(Special Interest Group)’를 통해 본격적으로 개발됐다. 이후 블루투스 SIG 회원은 급속도로 늘어나 2010년 말 기준 전세계 회원사가 13,000여 개에 이른다.


블루투스 – 야심 찬 이름의 근거리 무선 통신 기술


블루투스라는 이름은 10세기경 스칸디나비아 지역을 통일한 덴마크와 노르웨이의 국왕 해럴드 블루투스 (Harold "Bluetooth" Gormsson, ?~985 혹은 986)의 별명에서 나왔다. 그는 블루투스(Bluetooth, 푸른이빨)라는 별명을 가지고 있었는데, 블루베리를 좋아해 항상 치아가 푸르게 물들어 있었기 때문이라는 설도 있고, 파란색 의치를 해 넣었기 때문이라는 설도 있다. 참고로 블루투스는 ‘덴마크의 하랄1세’라고도 불리는데,노르웨이의 하랄1세와 헷갈리기 쉽다. 하여간 SIG는 자신들이 개발한 기술이 통신장치들을 하나의 무선 기술 규격으로 통일하기를 바라는 마음에서 공식명칭을 블루투스로 정했다. 이에 따라 블루투스의 공식 로고도 하랄의 H와 블루투스의 B를 뜻하는 스칸디나비아 룬 문자에서 따왔다.





블루투스의 원리


블루투스의 무선 시스템은 ISM(Industrial Scientific and Medical) 주파수 대역인 2400~2483.5MHz를 사용한다. 이 중 위아래 주파수를 쓰는 다른 시스템들의 간섭을 막기 위해 2400MHz 이후 2MHz, 2483.5MHz 이전 3.5MHz까지의 범위를 제외한 2402~2480MHz, 총 79개 채널을 쓴다. ISM이란 산업, 과학, 의료용으로 할당된 주파수 대역으로, 전파 사용에 대해 허가를 받을 필요가 없어 저전력의 전파를 발산하는 개인 무선기기에 많이 쓰인다. 아마추어 무선, 무선랜, 블루투스가 이 ISM 대역을 사용한다.

 

여러 시스템들과 같은 주파수 대역을 이용하기 때문에 시스템간 전파 간섭이 생길 우려가 있는데, 이를 예방하기 위해 블루투스는 주파수 호핑(Frequency Hopping) 방식을 취한다. 주파수 호핑이란 많은 수의 채널을 특정 패턴에 따라 빠르게 이동하며 패킷(데이터)을 조금씩 전송하는 기법이다. 블루투스는 할당된 79개 채널을 1초당 1600번 호핑한다.

 

이 호핑 패턴이 블루투스 기기 간에 동기화되어야 통신이 이루어진다. 블루투스는 기기 간 마스터(Master)와 슬레이브(slave) 구성으로 연결되는데, 마스터 기기가 생성하는 주파수 호핑에 슬레이브 기기를 동기화시키지 못하면 두 기기 간 통신이 이루어지지 않는다. 이로 인해 다른 시스템의 전파 간섭을 피해 안정적으로 연결될 수 있게 된다. 참고로 하나의 마스터 기기에는 최대 7대의 슬레이브 기기를 연결할 수 있으며, 마스터 기기와 슬레이브 기기 간 통신만 가능할 뿐 슬레이브 기기 간의 통신은 불가능하다. 그러나 마스터와 슬레이브의 역할은 고정된 것이 아니기 때문에 상황에 따라 서로 역할을 바꿀 수 있다.



블루투스 기기 연결 방법

블루투스 기기를 서로 연결하는 방법은 그다지 복잡하지 않다. 한두 번만 연결해 보면 누구라도 능히 블루투스 기기를 사용할 수 있을 것이다. 당연하겠지만, 마스터 기기, 슬레이브 기기 모두 블루투스를 지원해야 한다. 예를 들어 블루투스를 지원하는 스마트폰과 블루투스 헤드셋을 연결하는 예를 들면, 스마트폰이 마스터, 헤드셋이 슬레이브가 된다. 헤드폰 전원을 켜고 스마트폰의 블루투스를 활성화하면 이내 주변의 모든 블루투스 기기를 탐색한다.

 

그중에서 연결을 원하는 헤드폰 모델을 선택하면 즉시 연결(페어링- pairing, 두 기기를 한 쌍으로 묶는다는 의미)된다. 블루투스 기기에 따라 연결 시 암호를 입력해야 하는 경우도 있다. 예를 들어 노트북에 블루투스 마우스/키보드 등을 연결하는 경우가 그러하다. MS 윈도우 운영체제의 작업 표시줄에서 블루투스 아이콘을 클릭하여 ‘장치 추가’ 메뉴를 선택한 다음, 블루투스 기기를 탐색하여 연결하면 된다. 필요에 따라 이때 연결 암호를 입력하여 연결을 완료하면 된다. 암호는 일반적으로 슬레이브 기기에 부여된 문자 또는 숫자를 입력한다. 아울러 일단 한번 연결되면 그 이후부터는 각 기기의 전원과 블루투스를 켤 때마다 자동으로 연결된다.

 



블루투스를 지원하는 헤드셋이나 키보드는 있는데, 정작 마스터 기기가 될 노트북, 휴대폰이 블루투스를 지원하지 않을 경우가 있다. 이럴 때는 블루투스 동글(dongle, 중계기)을 사용하면 된다. 이 동글은 일반적으로 USB메모리 모양을 하고 있어 USB포트에 연결하는 방식으로 쉽게 사용할 수 있지만, 기기에 따라 별도의 전용 동글이 필요할 때도 있다.


블루투스의 발전


초창기 블루투스의 전송속도는 최대 1Mbps에 불과했다. 이는 기존 기술에 비해 6배 가량 빠른 속도였지만 고품질 음악이나 동영상과 같은 대용량 데이터를 전송하기에는 부적합한 수준이었다. 따라서 블루투스의 대중화는 생각보다 진전이 느렸고, 제한적인 용도로만 사용됐다. 하지만 시간이 지나고 새로운 버전의 블루투스가 등장하면서 속도는 눈에 띄게 향상됐다. 블루투스 2.0(2004년)은 최대 3Mbps, 블루투스 3.0(2009년)은 최대 24Mbps까지 속도가 올라갔다. 2010년에는 24Mbps 속도를 유지하면서도 손목시계용 코인 배터리로도 수년간 쓸 수 있을 정도로 소비 전력을 낮춘 블루투스 4.0까지 나왔다.

 

블루투스를 대체할 경쟁 기술도 등장했다. 2010년 발표된 와이파이 다이렉트가 그것이다. 와이파이 다이렉트는 인터넷망 없이 휴대기기 간 직접 연결해 통신할 수 있는 기술로, 기존 와이파이에 버금가는 빠른 속도가 장점이다. 하지만 그만큼 전력 소모는 심할 것으로 보인다. 향후 개인 무선 기술 경쟁구도는 저전력을 내세운 ‘블루투스 4.0’ vs 빠른 속도가 강점인 ‘와이파이 다이렉트’를 중심으로 이루어질 전망이다.


보안에 취약한 블루투스 


블루투스를 이용한 해킹은 블루재킹(bluejacking), 블루스나핑(bluesnarfing), 블루버깅(bluebugging)으로 나뉜다. 이 중 블루재킹은 단순히 스팸메시지를 뿌리는 수준으로, 귀찮은 존재긴 하지만 보안에 큰 위협을 가하지는 않는다. 하지만 모바일 기기에 저장된 일정표, 전화번호, 이메일, 문자메시지 등에 접근하는 블루스나핑, 희생자의 휴대폰을 원격 조종해 통화내용을 엿듣는 블루버깅은 치명적인 피해를 야기할 수 있다. 따라서 공공장소와 같이 유동인구가 많은 곳에서는 블루투스를 신중히 사용해야 한다. 또한 안티 바이러스나 방화벽 기능을 지원하는 모바일 기기용 보안 제품을 구비하는 것이 좋다.



블루투스는 헤드셋/핸즈프리 외에는 큰 힘을 못 쓰고 있는 상황


무선 통신을 제패하겠다는 부푼 꿈을 안고 출발한 블루투스는 현재까지 큰 힘을 못쓰고 있는 게 현실이다. 소비 전력이 낮다는 장점은 있지만 전송 속도와 비용 면에서 충분한 경쟁력을 갖추지 못했기 때문이다. 물론 차량용 헤드셋(핸즈프리)이나 스피커폰 같은 일부 기기에서는 강세를 보이고 있다. 통화할 때 핸들에서 손을 놓을 필요가 없어 안전한 운전이 가능하고, 거추장스러운 케이블이나 복잡한 연결 과정이 필요 없어 운전 중 통화할 일이 많은 전문직에게 인기를 끌고 있다.

 

하지만 휴대폰이나 노트북 등 다른 모바일 기기에서는 여전히 무선랜, NFC(근거리 통신) 등의 다른 무선 기술과 치열한 경쟁을 펼쳐야 할 상황에 놓였다. 과연 블루투스가 헤럴드 블루투스 왕처럼 무선 세계 통일을 이룰 수 있을까? 당분간은 더 지켜봐야 할 것으로 보인다.





JHKIM님의 블루투스관련자료 :

02_about Bluetooth.pdf


 

Two-wire Serial Interface

참조 : ATmega128 Datasheet, I2C protocol, etc blog data.. 

 

I2C : 어떤 IC들간에도 공통적으로 통할 있는 버스(2가닥)

오늘의 주제 :  ATmega128 에서의 TWI 사용법에 대해서... 




 

 

PD1 INT1/SDA(1) (External Interrupt1 Input or TWI Serial DAta)

 

PD0 INT0/SCL(1) (External Interrupt0 Input or TWI Serial CLock)

 

 

 

• INT1/SDA – Port D, Bit 1

INT1, External Interrupt source 1.

The PD1 pin can serve as an external interrupt source

to the MCU.

SDA, Two-wire Serial Interface Data: When the TWEN bit in TWCR is set (one) to enable the Two-wire Serial Interface, pin PD1 is disconnected from the port and

becomes the Serial Data I/O pin for the Two-wire Serial Interface. In this mode, there is a spike filter on the pin to suppress spikes shorter than 50 ns on the input signal, and the pin is driven by an open drain driver with slew-rate limitation.

 

 

 

 

 

• INT0/SCL – Port D, Bit 0

INT0, External Interrupt source 0. The PD0 pin can serve as an external interrupt source to the MCU.

SCL, Two-wire Serial Interface Clock: When the TWEN bit in TWCR is set (one) to enable the Two-wire Serial Interface, pin PD0 is disconnected from the port and becomes the Serial Clock I/O pin for the Two-wire Serial Interface. In this mode, there is a spike filter on the pin to suppress spikes shorter than 50 ns on the input signal, and the pin is driven by an open drain driver with slew-rate limitation. Table 37 and Table 38 relates the alternate functions of Port D to the overriding signals.

 

 

 

Features

 

Simple yet Powerful and Flexible Communication Interface, only Two Bus Lines Needed

Both Master and Slave Operation Supported

Device can Operate as Transmitter or Receiver

7-bit Address Space allows up to 128 Different Slave Addresses

Multi-master Arbitration Support

Up to 400 kHz Data Transfer Speed

Slew-rate Limited Output Drivers

Noise Suppression Circuitry Rejects Spikes on Bus Lines

Fully Programmable Slave Address with General Call Support

Address Recognition Causes Wake-up when AVR is in Sleep Mode

 

간단히 설명을 풀자면..

I2C는 필립스사에서 처음개발하였으며, 특징으로는 오직 2가닥의 WIRE만 필요하며 /  BUS에 연결되어 소프트웨어적으로 주소지정이 가능한 각각의 장치들은 고유의 주소값과 마스터/슬레이브 관계를 가진다. (보통 마스터는 MCU가 되며, 슬레이브는 각종센서류나 메모리,출력장치가 된다)

다수의 마스터가 BUS에 연결되어있어도 장치간 충돌을 감지할수있으며 2개이상의 마스터를 초기화하여도 데이터가 변조되지않으며 통신이 가능하다.  (이는 버스구조로 인하여..)

그리고 3가지 MODE가 존재하며

1. Standard : 100kbps

2. Fast : 400kbps

3. High-speed : 3.4Mbps

AVR은 2가지 1.2. MODE만 제공한다. 

단일 칩 필터링으로 노이즈를 제거한다.

버스의 커패시턴스가 400pF을 넘지않는 한도안에서 IC연결이 가능하며 아트메가는 128개까지 가능하다. 이는 주소비트가 7bit이기 때문이다.


Two-wire Serial Interface Bus Definition

 

The Two-wire Serial Interface (TWI) is ideally suited for typical microcontroller applications.

The TWI protocol allows the systems designer to interconnect up to 128 different devices using only two bi-directional bus lines, one for clock (SCL) and one for data (SDA). The only external hardware needed to implement the bus is a single pull-up resistor for each of the TWI bus lines. All devices connected to the bus have individual addresses, and mechanisms for resolving bus contention are inherent in the TWI protocol.

 

 

>Pull-up 저항은 필요한가?  (R1,R2)

신호가 없으면 항상 High값을 유지하기때문에 BUS가 high상태라면 현재 통신이 가능하다는 뜻이 되며 이는 장치간의 충돌을 미연에 방지하는 역할을 하게 된다. 

 

As depicted in Figure 86, both bus lines are connected to the positive supply voltage through pull-up resistors. The bus drivers of all TWI-compliant devices are open-drain or open-collector. This implements a wired-AND function which is essential to the operation of the interface. A low level on a TWI bus line is generated when one or more TWI devices output a zero. A high level is output when all TWI devices tri-state their outputs,allowing the pull-up resistors to pull the line high. Note that all AVR devices connected to the TWI bus must be powered in order to allow any bus operation.

The number of devices that can be connected to the bus is only limited by the bus capacitance limit of 400 pF and the 7-bit slave address space. A detailed specification of the electrical characteristics of the TWI is given in “Two-wire Serial Interface Characteristics” on page 324. Two different sets of specifications are presented there, one

relevant for bus speeds below 100 kHz, and one valid for bus speeds up to 400 kHz



 

 

Data Transfer and Frame Format

 

Transferring Bits

 

 

Each data bit transferred on the TWI bus is accompanied by a pulse on the clock line.The level of the data line must be stable when the clock line is high. The only exception to this rule is for generating start and stop conditions

 

데이터의 유효성 : SCL이 High이면 SDA신호는 일정값을 유지해야한다. (DATA값)

                                SCL이 LOW이면 SDA신호는 변경이 가능하다.


START and STOP Conditions

 



앞서 SCL이 HIGH일때 SDA신호는 일정해야 한다고 하였다.

만약 값이 변한다면?? 그때가 바로 시작과 중단신호를 의미한다. (참 잘만든 프로토콜인듯..)

SCL = HIGH상태  -> SDA가 Falling Edge = START condition

SCL = HIGH상태  -> SDA가 rising Edge   = STOP  condition

 

그래서 DATA는 시작신호 이후에 입력될수있다.


Address Packet Format

 


Data Packet Format 


 

시작조건이 발생되면 ( SCL = HIGH상태  -> SDA가 Falling Edge ) SDA은 SCL의 클럭신호에 맞추어 DATA가 전송되는데 이는 8BIT형식이다. 만약 SLAVE가 데이터를 다 받지 못했다면 SLAVE는 SCL신호를 LOW로 잡아둠으로써 나머지 DATA를 모두 전송할수가 있다. (풀업설계의 장점이기도 하다)


Acknowledge

 

Data transfer with acknowledge is obligatory. The acknowledge-related clock pulse is generated by the master. The transmitter releases the SDA line (HIGH) during the acknowledge clock pulse.

The receiver must pull down the SDA line during the acknowledge clock pulse so that it remains stable LOW during the HIGH period of this clock pulse (see Fig.7). Of course, set-up and hold times )

must also be taken into account.

Usually, a receiver which has been addressed is obliged to generate an acknowledge after each byte has been received, except when the message starts with a CBUS address

When a slave doesn’t acknowledge the slave address

 (for example, it’s unable to receive or transmit because it’s performing some real-time function),

the data line must be left HIGH by the slave. The master can then generate either a STOP condition to abort the transfer, or a repeated START condition to start a new transfer.

If a slave-receiver does acknowledge the slave address but, some time later in the transfer cannot receive any more data bytes, the master must again abort the transfer. This is indicated by the slave generating the not-acknowledge on the first byte to follow. The slave leaves the data line HIGH and the master generates a STOP or a repeated START condition.

If a master-receiver is involved in a transfer, it must signal the end of data to the slave- transmitter by not generating

an acknowledge on the last byte that was clocked out of the slave. The slave-transmitter must release the data line

to allow the master to generate a STOP or repeated START condition.

 


요약하면, DATA전송이 끝나면 SLAVE는 의무적으로 ACK를 발생시켜야 한다. 또한 이를 위해서 MASTER는 8번째 비트까지 DATA전송을 끝내고 9번재는 그냥 클럭신호만 보내줘야한다. 그래서 SLAVE는 DATA선을 LOW로 유지하여 (신호선이 풀업상태라서 LOW로 유지된다면 ACK가 전송됐다고 판단된다) ACK를 보낸다. 그럼 마스터는 이때 DATA신호를 확인하면 ACK를 확인할수가 있다.

만약 MASTER가 전달하면 DATA를 SLAVE에서 놓치게 된다면??

MASTER는 전송하던 DATA를 무시하고 다시 STOP,START condition을 발생시켜야한다.

이는 ACK를 통해서 알수있는 SLAVE 쪽에서 주소값이 일치하지 않으면 SDA를 HIGH로 만들면 된다.

(이는 MASTER가 송신, SLAVE가 수신하는 경우를 예로 든것이다)



  

 

 

Combining Address and Data Packets Into a Transmission




 


*출처 :  유명환강사님자료



위의 그림은 데이터송신에 대한 일련의 과정을 하나의 그림으로 나타낸것이다. 자세한 소스는 맨아래의 "AVR STUDIO용 C언어 예제"소스라는 그림을 참조하길 바란다.

 

Overview of the TWI Module

The TWI module is comprised of several submodules, as shown in Figure 94. All registers drawn in a thick line are accessible through the AVR data bus.


 



Scl and SDA Pins

These pins interface the AVR TWI with the rest of the MCU system. The output drivers contain a slew-rate limiter in order to conform to the TWI specification. The input stages contain a spike suppression unit removing spikes shorter than 50 ns. Note that the internal pull-ups in the AVR pads can be enabled by setting the PORT bits corresponding to

the SCL and SDA pins, as explained in the I/O Port section. The internal pull-ups can in some systems eliminate the need for external ones.

 

Bit Rate Generator Unit

 

마스터모드에서 SCL의 주기를 조절할때 사용한다. 이는 TWBR레지스터를 통해서 설정할수가 있다.

This unit controls the period of SCL when operating in a Master mode. The SCL period is controlled by settings in the TWI Bit Rate Register (TWBR) and the Prescaler bits in the TWI Status Register (TWSR). Slave operation does not depend on Bit Rate or Prescaler settings, but the CPU clock frequency in the slave must be at least 16 times higher

than the SCL frequency. Note that slaves may prolong the SCL low period, thereby reducing the average TWI bus clock period. The SCL frequency is generated according to the following equation:

 



 

• TWBR = Value of the TWI Bit Rate Register

• TWPS = Value of the prescaler bits in the TWI Status Register

Note: TWBR should be 10 or higher if the TWI operates in Master mode. If TWBR is lower than 10, the master may produce an incorrect output on SDA and SCL for the reminder of the byte. The problem occurs when operating the TWI in Master mode, sending Start + SLA  + R/W to a slave (a slave does not need to be connected to the bus for the condition to

happen).

 

 

 

 

 

Bus Interface Unit

 

This unit contains the Data and Address Shift Register (TWDR), a START/STOP Controller and Arbitration detection hardware. The TWDR contains the address or data bytes to be transmitted, or the address or data bytes received. In addition to the 8-bit TWDR, the Bus Interface Unit also contains a register containing the (N)ACK bit to be transmitted or received. This (N)ACK Register is not directly accessible by the application software. However, when receiving, it can be set or cleared by manipulating the TWI Control Register (TWCR). When in Transmitter mode, the value of the received (N)ACK bit can be determined by the value in the TWSR.

 The START/STOP Controller is responsible for generation and detection of START, REPEATED START, and STOP conditions. The START/STOP controller is able to detect START and STOP conditions even when the AVR MCU is in one of the sleep modes, enabling the MCU to wake up if addressed by a master.

If the TWI has initiated a transmission as master, the Arbitration Detection hardware continuously monitors the transmission trying to determine if arbitration is in process. If the TWI has lost an arbitration, the Control Unit is informed. Correct action can then be taken and appropriate status codes generated.

 

Address Match Unit  :  NOT needed in the MASTER MODE

 

mutil master mode에서는 반드시 TWAR레지스터가 필요하다.


The Address Match unit checks if received address bytes match the 7-bit address in the TWI Address Register (TWAR). If the TWI General Call Recognition Enable (TWGCE) bit in the TWAR is written to one, all incoming address bits will also be compared against the General Call address. Upon an address match, the Control Unit is informed,

allowing correct action to be taken. The TWI may or may not acknowledge its address, depending on settings in the TWCR. The Address Match unit is able to compare addresses even when the AVR MCU is in sleep mode, enabling the MCU to wake up if addressed by a master. If another interrupt (e.g., INT0) occurs during TWI Power-down

address match and wakes up the CPU, the TWI aborts operation and return to it’s idle state. If this cause any problems, ensure that TWI Address Match is the only enabled interrupt when entering Power-down.

 

 

Control Unit

 

The Control unit monitors the TWI bus and generates responses corresponding to settings in the TWI Control Register (TWCR). When an event requiring the attention of the application occurs on the TWI bus, the TWI Interrupt Flag (TWINT) is asserted. In the next clock cycle, the TWI Status Register (TWSR) is updated with a status code identifying

the event. The TWSR only contains relevant status information when the TWI Interrupt Flag is asserted. At all other times, the TWSR contains a special status code indicating that no relevant status information is available. As long as the TWINT flag is set, the SCL line is held low. This allows the application software to complete its tasks

before allowing the TWI transmission to continue.  The TWINT flag is set in the following situations:

 

 

• After the TWI has transmitted a START/REPEATED START condition

• After the TWI has transmitted SLA+R/W

• After the TWI has transmitted an address byte

• After the TWI has lost arbitration

• After the TWI has been addressed by own slave address or general call

• After the TWI has received a data byte

• After a STOP or REPEATED START has been received while still addressed as a slave

• When a bus error has occurred due to an illegal START or STOP condition

 

  

TWI Register Description



 







If set, this bit enables the recognition of a General Call given over the Two-wire Serial Bus


 

  

. Using the TWI

 

이부분은 인터럽트방식으로 TWI통신을 사용할때를 설명한것이다. 보통 인터럽트로 통신을 많이 사용하며, 앞서 설명한 부분들과 C언어예제들은 모두 폴링방식이다. 혼동하지 않길 바란다.


The AVR TWI is byte-oriented and interrupt based. Interrupts are issued after all bus events, like reception of a byte or transmission of a START condition. Because the TWI is interrupt-based, the application software is free to carry on other operations during a TWI byte transfer. Note that the TWI Interrupt Enable (TWIE) bit in TWCR together with

the Global Interrupt Enable bit in SREG allow the application to decide whether or not assertion of the TWINT flag should generate an interrupt request. If the TWIE bit is cleared, the application must poll the TWINT flag in order to detect actions on the TWI bus.

 When the TWINT flag is asserted, the TWI has finished an operation and awaits application response. In this case, the TWI Status Register (TWSR) contains a value indicating the current state of the TWI bus. The application software can then decide how the TWI should behave in the next TWI bus cycle by manipulating the TWCR and TWDR Registers.

 

Figure 95 is a simple example of how the application can interface to the TWI hardware.In this example, a master wishes to transmit a single data byte to a slave. This description is quite abstract, a more detailed explanation follows later in this section. A simple code example implementing the desired behavior is also presented.


  

1. The first step in a TWI transmission is to transmit a START condition. This is done by writing a specific value into TWCR, instructing the TWI hardware to transmit a START condition. Which value to write is described later on. However, it is important that the TWINT bit is set in the value written. Writing a one to TWINT clears the flag. The TWI will not start any operation as long as the TWINT bit in TWCR is set. Immediately after the application has cleared TWINT, the TWI will initiate transmission of the START condition

 

2. When the START condition has been transmitted, the TWINT flag in TWCR is set, and TWSR is updated with a status code indicating that the START condition has successfully been sent.

 

3. The application software should now examine the value of TWSR, to make sure that the START condition was successfully transmitted. If TWSR indicates otherwise, the application software might take some special action, like calling an error routine. Assuming that the status code is as expected, the application must load SLA+W into TWDR. Remember that TWDR is used both for address and data. After TWDR has been loaded with the desired SLA+W, a specific value must be written to TWCR, instructing the TWI hardware to transmit the SLA+W present in TWDR. Which value to write is described later on. However, it is important that the TWINT bit is set in the value written. Writing a one to TWINT clears the flag. The TWI will not start any operation as long as the TWINT bit in TWCR is set. Immediately after the application has cleared TWINT, the TWI will initiate transmission of the address packet.

 

4. When the address packet has been transmitted, the TWINT flag in TWCR is set, and TWSR is updated with a status code indicating that the address packet has successfully been sent. The status code will also reflect whether a slave acknowledged the packet or not.

 

 

5. The application software should now examine the value of TWSR, to make sure that the address packet was successfully transmitted, and that the value of the ACK bit was as expected. If TWSR indicates otherwise, the application software might take some special action, like calling an error routine. Assuming that the status code is as expected, the application must load a data packet into TWDR. Subsequently, a specific value must be written to TWCR, instructing the TWI hardware to transmit the data packet present in TWDR. Which value to write is described later on. However, it is important that the TWINT bit is set in the value written. Writing a one to TWINT clears the flag. The TWI will not start any operation as long as the TWINT bit in TWCR is set. Immediately after the application has cleared TWINT, the TWI will initiate transmission of the data packet.

 

6. When the data packet has been transmitted, the TWINT flag in TWCR is set, and TWSR is updated with a status code indicating that the data packet has successfully been sent. The status code will also reflect whether a slave acknowledged the packet or not.

 

7. The application software should now examine the value of TWSR, to make sure that the data packet was

uccessfully transmitted, and that the value of the ACK bit was as expected. If TWSR indicates otherwise, the application software might take some special action, like calling an error routine. Assuming that the status code is as expected, the application must write a specific value to TWCR, instructing the TWI hardware to transmit a STOP condition. Which value to write is described later on. However, it is important that the TWINT bit is set in the value written. Writing a one to TWINT clears the flag. The TWI will not start any operation as long as the TWINT bit in TWCR is set. Immediately after the application has cleared TWINT, the TWI will initiate transmission of the STOP

condition. Note that TWINT is NOT set after a STOP condition has been sent.

 

 

Even though this example is simple, it shows the principles involved in all TWI transmissions.

 

These can be summarized as follows:

• When the TWI has finished an operation and expects application response, the TWINT flag is set. The SCL line is pulled low until TWINT is cleared.

 

• When the TWINT flag is set, the user must update all TWI Registers with the value relevant for the next TWI bus cycle. As an example, TWDR must be loaded with the value to be transmitted in the next bus cycle.

 

• After all TWI Register updates and other pending application software tasks have been completed, TWCR is written. When writing TWCR, the TWINT bit should be set. Writing a one to TWINT clears the flag. The TWI will then commence executing whatever operation was specified by the TWCR setting.

In the following an assembly and C implementation of the example is given. Note that the code below assumes that several definitions have been made for example by using include-files.

 

  

 

AVR studio C언어 예제소스 





 

 

 

 

+ Recent posts