Tải bản đầy đủ (.ppt) (12 trang)

slide bài giảngckỹ thuật điều khiển ghép nối thiết bị ngoại vi chương 7

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (245.94 KB, 12 trang )

GIAO TiẾP SPI


GiỚI THIỆU

Giao tiếp SPI được thực hiện thông qua BUS 4 dây MISO, MOSI, SCK,
SS nên đôi khi SPI còn được gọi là giao thức giao tiếp 4 dây.
MISO: Master Input Slave Output
MOSI: Master Output Slave Input.
SCK : Serial Clock
SS : Slave Select

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




HOẠT ĐỘNG

Cả Master và Slave đều có thanh ghi dịch nối tiếp ở bên trong. Thiết bị
Master bắt đầu việc trao đổi dữ liệu bằng cách truyền đi một Byte vào
thanh ghi dịch của nó, sau đó Byte dữ liệu sẽ được đưa sang Slave theo
đường tín hiệu MOSI (SDI), Slave sẽ truyền dữ liệu nằm trong thanh ghi
dịch của chính nó ngược trở về Master thông qua đường tín hiệu MISO
(SDO). Bằng cách này, dữ liệu của hai thanh ghi sẽ được trao đổi với
nhau. Việc đọc và ghi dữ liệu vào Slave diễn ra cùng một lúc nên tốc độ
trao đổi dữ liệu diễn ra rất nhanh. Do đó, giao thức SPI là một giao thức
rất có hiệu quả
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





KẾT NỐI NHIỀU SLAVE

MASTER VÀ SLAVE ĐỘC LẬP

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

KiỂU DAISY-CHAINED




CÁC CHẾ ĐỘ HOẠT ĐỘNG
MODE 0: Xung dương, dữ liệu được chốt trước khi dịch

MODE1: Xung dương, dữ liệu được dịch đi trước khi chốt

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




CÁC CHẾ ĐỘ HOẠT ĐỘNG
MODE 2: Xung âm, dữ liệu được chốt trước khi dịch

MODE 3: Xung âm, dữ liệu được dịch đi trước khi chốt

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





LẬP TRÌNH
Mode 0:
char SPI_Transfer (char SPI_byte)
{
unsigned char i; // counter
for (i = 8; i> 0; i--)
{
MOSI = SPI_byte & 0x80;
SPI_byte = SPI_byte << 1;
SCK = 0x01;
SPI_byte |= MISO;
SCK = 0x00;
}
return (SPI_byte);
}

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




EEPROM 25Cxx

Đọc dữ liệu:

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





EEPROM 25Cxx

Ghi dữ liệu:

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




ĐỌC 1 BYTE VÀO 25Cxx
unsigned char EE_Read (unsigned Addr)
{
unsigned char data;
CS= 0; // chọn bộ nhớ
Delay_us(1); // tối thiểu 250ns (CS setup time)
data= SPI_Transfer(EE_READ); // truyền mã READ
data= SPI_Transfer((Addr & 0xFF00) >> 8); // truyền MSB của địa
chỉ
data= SPI_Transfer((Addr & 0x00FF)); // Truyền LSB của địa chỉ
data= SPI_Transfer(0x00);// Truyền dữ liệu giả
delay_us (1); // tối thiểu 250ns
CS= 1; // hủy chọn bộ nhớ
delay_us (1); // tối thiểu 500ns (CS disable time)
return data;
}
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





GHI 1 BYTE VÀO 25C04
void EE_Write (unsigned Addr, unsigned char value)
{
unsigned char data;
CS= 0;
delay_us (1);
data= SPI_Transfer(EE_WREN);
delay_us (1);
CS= 1;
delay_us (1);
CS= 0;
delay_us (1);
data = SPI_Transfer(EE_WRITE);
data = SPI_Transfer((Addr & 0xFF00) >> 8);
data = SPI_Transfer((Addr & 0x00FF));
data = SPI_Transfer(value);
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




GHI 1 BYTE VÀO 25C04
delay_us (1); //(CS hold time)
CS= 1;
do {
delay_us (1);
CS= 0; // select EEPROM to begin polling

delay_us (1);
data= SPI_Transfer(EE_RDSR);
data= SPI_Transfer(0x00);
delay_us (1);
CS= 1; // de-select EEPROM
} while (data& 0x01);
delay_us (1);
}

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





×