thì sử dụng vi xử lý có các ưu điểm như: nhỏ gọn, ít tốn năng lượng, thời gian đáp ứng nhanh, có thể lập trình được.Giao tiếp và truyền nhận dữ liệu là một nhu cầu không thể thiếu trong
TỔNG QUAN
Đặt vấn đề
Hiện nay, các vi xử lý hay vi điều khiển đang được sử dụng rộng rãi trong nhiều lĩnh vực như: điều khiển, tự động hóa, đo đạc, truyền thông So với các phương pháp điều khiển, đo đạc truyền thống (cơ khí, điện tử tương tự ) thì sử dụng vi xử lý có các ưu điểm như: nhỏ gọn, ít tốn năng lượng, thời gian đáp ứng nhanh, có thể lập trình được.
Giao tiếp và truyền nhận dữ liệu là một nhu cầu không thể thiếu trong hệ thống nhúng.Trong đó giao thức ngoại vi nối tiếp (Serial Peripheral Interface) là một loại giao tiếp truyền thông nối tiếp đồng bộ được sử dụng cho giao tiếp khoảng cách ngắn, chủ yếu trong các hệ thống nhúng Giao diện được phát triển bởi Motorola vào giữa những năm 1980 và đã trở thành một tiêu chuẩn thực tế Các ứng dụng điển hình bao gồm thẻ từ và màn hình tinh thể lỏng Cùng với đó giao diện SPI ngày càng được sử dụng rộng rãi trong ngành công nghiệp cơ điện tử Nhận thức được tầm quan trọng của giao diện SPI trong lập trình nhúng đây là cơ sở để chúng em chọn đề tài bài tập lớn
“Tìmhiểugiao diệnSPI”để kết thúc môn học.
Mục tiêu đề tài
- Hiểu được chuẩn nối tiếp truyền thông.
- Nắm được kiến thức về chuẩn giao tiếp SPI.
- Phân tích được ưu, được điểm của giao tiếp SPI.
- Thiết kế ứng dụng sử dụng giao tiếp SPI
- Nhận xét và đánh giá qua việc mô phỏng bằng phần mềm
Nội dung nghiên cứu
- Tổng quan về vấn đề sử dụng giao diện SPI trong truyền nhận dữ liệu.
- Giới thiệu về chuẩn giao tiếp SPI
- Đặc điểm và nguyên lý hoạt động của SPI
- Thiết kế phần cứng và giải thuật sử dụng SPI
- Mô phỏng và đánh giá qua phần mềm
- Tóm tắt và kết luận
Bố cục
Nội dung chính của đề tài gồm 6 chương:
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
CHƯƠNG 4: ĐÁNH GIÁ QUA TESTBENCH
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Giới hạn đề tài
Đề tài chỉ đề cập đến nghiên cứu về mặt lý thuyết chuẩn giao tiếp SPI, nguyên lý hoạt động và ưu nhược điểm của SPI, viết một chương trình ứng dụng của SPI, mô phỏng trên phần mềm và hướng phát triển công nghệ trong tương lai.
CƠ SỞ LÝ THUYẾT
Giới thiệu giao diện SPI
SPI (Serial Peripheral Interface – Giao diện Ngoại vi Nối tiếp) là một chuẩn đồng bộ nối tiếp để truyền dữ liệu ở chế độ song công toàn phần (full-duplex), do công ty Motorola thiết kế nhắm đảm bảo sự liên hợp giữa các vi điều khiền và thiết bị ngoại vi một cách đơn giản. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình truyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave.
SPI cung cấp một giao diện nối tiếp đơn giản giữa vi xử lý và thiết bị ngoại vi. Giống với các Bus nối tiếp khác như I2C, CAN hoặc USB Chuẩn giao tiếp SPI ngày càng được sử dụng rộng rãi trong lĩnh vực điện tử, đặc biệt là trong giao tiếp trao đổi dữ liệu với các thiết bị ngoại vi.
Giao diện SPI được sử dụng tích hợp trong một số loại thiết bị như:
- Các bộ chuyển đổi (ADC và DAC)
- Các loại bộ nhớ (EEPROM và FLASH)
- Các loại IC thời gian thực
- Các loại cảm biến (nhiệt độ, áp suất )
THIẾT KẾ
Sơ đồ khối thiết kế
3.1.1 Mô hình giao tiếp SPI
Serial Peripheral Interface (SPI) là một liên kết dữ liệu nối tiếp, đồng bộ, song công, là liên kết tiêu chuẩn trên nhiều bộ vi xử lý, vi điều khiển và thiết bị ngoại vi Nó cho phép giao tiếp giữa bộ vi xử lý và thiết bị ngoại vi và giao tiếp giữa các bộ xử lý.
Hệ thống SPI đủ linh hoạt để giao tiếp trực tiếp với nhiều thiết bị ngoại vi có sẵn trên thị trường
Thiết kế SPI Master đã được thực hiện trong CoolRunner-II CPLD Thiết kế CoolRunner-II SPI Master có thể được sử dụng để cung cấp bộ điều khiển SPI cho các bộ vi điều khiển hoặc bộ vi xử lý không chứa giao diện SPI Sơ đồ khối mức cao được thể hiện trong “Hình 13” Giao diện vi điều khiển (microcontroller) được chọn trong triển khai SPI Master này dựa trên chu kỳ bus vi điều khiển 8051 phổ biến, nhưng có thể dễ dàng sửa đổi thành các giao diện vi điều khiển khác
Hình 13: CoolRunner-II SPI Master 3.1.2 Sơ đồ khối thiết mạch giao tiếp SPI
Sơ đồ khối của CoolRunner-II CPLD SPI Master, thể hiện trong “Hình 14” được chia thành hai khối chính, giao diện vi điều khiển và giao diện SPI.
Hình 14: SPI Master Block Diagram 3.1.3 Sơ đồ SCK Clock Logic
Quá trình này tạo ra đầu ra SCK dựa trên cài đặt CLKDIV, CPHA và CPOL trong thanh ghi điều khiển SPI Tần số xung nhịp của tín hiệu SCK được xác định bằng cách chia nhỏ xung nhịp đầu vào dựa trên các mục trong thanh ghi điều khiển Tín hiệu, SCK_INT là SCK bên trong được sử dụng để đồng bộ dữ liệu nối tiếp ra khỏi thiết bị và được tạo ra liên tục Máy trạng thái SPI Control được đồng bộ hóa với tín hiệu nội bộ này Tín hiệu SCK_1 đại diện cho SCK khi CPHA = 1 và tín hiệu SCK_0 đại diện cho SCK khi CPHA = 0 Máy trạng thái điều khiển SPI tạo mặt nạ cho các xung này(CLK0_MASK, CLK1_MASK) để SCK đầu ra có mối quan hệ pha chính xác với dữ liệu và được giữ ở trạng thái không hoạt động khi không có dữ liệu được chuyển.Biểu diễn logic cần thiết để tạo đầu ra tín hiệu SCK tới bus SPI được thể hiện trong “Hình 15”.
Mô tả thanh ghi
3.2.1 Thanh ghi của giao tiếp bên trong vi điều khiển a SPI Status Register (SPISR)
Thanh ghi này chứa trạng thái của bộ điều khiển SPI Thanh ghi trạng thái này là chỉ đọc ngoại trừ một số bit nhất định có thể xóa được bằng phần mềm. b SPI Slave Select Register (SPISSR)
Thanh ghi này chứa các bit cho biết dòng chọn phụ nào sẽ được xác nhận "1" ở một vị trí bit chỉ ra rằng bit tương ứng trong bus đầu ra lựa chọn phụ được xác nhận theo các thông số kỹ thuật định thời SPI "0" ở một vị trí bit chỉ ra rằng bit tương ứng trong bus đầu ra lựa chọn Slave vẫn bị phủ định Điều này cho phép vi điều khiển chỉ định dòng chọn phụ nào được xác nhận trong quá trình truyền dữ liệu SPI.
Lưu ý rằng chỉ có thể xác nhận một dòng chọn phụ trong quá trình truyền dữ liệu SPI Điều này phải được tuân thủ bởi vi điều khiển, việc triển khai phần cứng của thông số kỹ thuật này không thực thi yêu cầu này Nói cách khác, nếu vi điều khiển đặt nhiều bit trong thanh ghi này, nhiều dòng chọn phụ sẽ được xác nhận cho quá trình truyền SPI. c SPI Transfer Data Register (SPITR)
Thanh ghi này chứa dữ liệu được truyền trên bus SPI trên chân MOSI Dữ liệu được ghi vào thanh ghi này được xuất trên bus SPI khi bit START trong thanh ghi điều khiển (SPICR) đã được xác nhận Miễn là bit START trong SPICR được xác nhận, các byte dữ liệu bổ sung trong thanh ghi này sẽ tiếp tục được truyền trên bus SPI.
Sau khi dữ liệu này được tải vào thanh ghi dịch chuyển truyền SPI, XMIT_EMPTY xác nhận và vi điều khiển có thể đặt byte dữ liệu tiếp theo để truyền trên bus SPI vào thanh ghi này Việc ghi dữ liệu vào thanh ghi này sẽ đặt lại cờ XMIT_EMPTY.
XMIT_EMPTY phải được phủ định và START phải được xác nhận trước khi máy trạng thái SPI bắt đầu truyền dữ liệu trên bus SPI. d SPI Receive Data Register (SPIRR)
Thanh ghi này chứa dữ liệu nhận được từ bus SPI trên chân MISO Khi một byte dữ liệu đã được nhận từ bus SPI và được chuyển đến SPIRR, cờ RCV_FULL xác nhận. Sau đó vi điều khiển đọc dữ liệu từ SPIRR đặt lại cờ RCV_FULL Bởi vì dữ liệu được tải từ thanh ghi dịch chuyển nhận SPI đến SPIRR, vi điều khiển có toàn bộ quá trình truyền SPI 8 bit để đọc dữ liệu từ SPIRR.
3.2.2 Thanh ghi của giao tiếp SPI
SPI Shift Registers bao gồm SPI Transmit Shift Register và SPI Receive Shift Register a SPI Transmit Shift Register
Thanh ghi dịch chuyển truyền SPI là một thanh ghi dịch chuyển có thể tải được 8 bit chứa dữ liệu SPI Thanh ghi dịch chuyển này được tải từ Thanh ghi truyền SPI (SPITR) thông qua tín hiệu tải do máy trạng thái điều khiển SPI tạo ra và được tạo xung nhịp bởi cạnh lên của SCK_INT Dữ liệu chuyển ra ngoài là dữ liệu MOSI. SCK_OUT là một SYS_CLK trễ từ SCK_INT Do đó, cần phải trì hoãn dữ liệu được chuyển ra khỏi thanh ghi dịch chuyển truyền SPI bởi một SYS_CLK cũng như để duy trì mối quan hệ giữa MOSI và SCK_OUT.
Hình 16: SPI Transmit Shift Register b SPI Receive Shift Register
Một thanh ghi dịch chuyển riêng biệt được sử dụng để nhận dữ liệu MISO vì pha xung và cực tính của đầu ra SCK có thể thay đổi dựa trên mỗi giao dịch Thanh ghi dịch chuyển nhận SPI được đặt xung nhịp trên cạnh lên của SCK bên ngoài Bộ bit RCV_CPOL trong thanh ghi điều khiển cho phép vi điều khiển chỉ định cạnh nào của dữ liệu MISO đến SCK bên ngoài được lấy mẫu Điều này cho phép sự linh hoạt trong việc xử lý tất cả các loại thiết bị SPI Slave khác nhau vì một số SPI Slave sẽ đồng bộ dữ liệu ở cạnh lên của SCK trong khi còn lại sẽ đồng bộ dữ liệu ở cạnh xuống của SCK Nếu một phụ xung nhịp dữ liệu trên cạnh xuống của SCK, thì RCV_CPOL phải được đặt thành "1" để CoolRunner-II SPI Master sẽ đồng bộ dữ liệu trên cạnh lên của SCK Nếu một bộ phận phụ xử lý dữ liệu trên cạnh lên của SCK, thì RCV_CPOL phải được đặt thành "0" để CoolRunner-II SPI Master đồng bộ hóa dữ liệu trên cạnh xuống của SCK Điều này giúp loại bỏ mọi vấn đề về thời gian thiết lập và lưu giữ.
Nếu Slave hoạt động theo đặc điểm kỹ thuật SPI cho CPHA và CPOL,RCV_CPOL sẽ bằng "1" bất cứ khi nào CPHA và CPOL bằng nhau và "0" nếu không.Trong quá trình triển khai thực tế, hai thanh ghi đầu vào được sử dụng để lấy mẫuMISO, một thanh ghi có xung nhịp ở cạnh lên của SCK, thanh ghi còn lại có xung nhịp ở cạnh xuống của SCK Đầu ra của hai thanh ghi này sau đó được ghép với bitRCV_CPOL được sử dụng làm dòng chọn Đầu ra của bộ ghép kênh này sau đó sẽ trở thành đầu vào cho thanh ghi dịch chuyển nhận SPI được đặt xung nhịp trên cạnh lên của SCK bên ngoài Sử dụng phương pháp triển khai này loại bỏ clock ghép kênh bên trong CPLD Xung clock ghép kênh trong CPLD đặt thời gian trễ giữa SCK và dữ liệu đầu vào thực tế vào thanh ghi dịch chuyển Sự chậm trễ này trên SCK có thể đặt ra yêu cầu về thời gian lưu trữ dữ liệu bổ sung trên thiết bị phụ mà không mong muốn Do đó,thay vào đó, người ta đã quyết định ghép kênh dữ liệu, do đó loại bỏ sự cần thiết phải chỉ định yêu cầu thời gian lưu giữ trên thiết bị phụ.
ĐÁNH GIÁ QUA TESTBENCH
Thiết kế chương trình
Hình 19: Hệ thống sử dụng giao tiếp SPI Chương trình giao tiếp bên trong hệ thống sử dụng giao tiếp SPI theo sơ đồ trên hình vẽ, kèm với các khối chương trình khác có nhiệm vụ tạo xung sclk và xử lí các tín hiệu liên tục. a Khối khai báo tín trong hệ thống module SPI_Master ( output reg [7:0] out_data, output mosi, output miso, output sclk, output [7:0] mastershift, output [7:0] slaveshift, input clk, input cs, input wr, input rd, input [7:0] in_data, input [1:0] div
); b.Khối khai báo các reg và wire sử dụng trong hệ thống reg busy =0; reg sclk =0; reg [4:0] sclk_cnt=0; reg [4:0] div_cnt=4'b0001; reg [7:0] mastershift; reg [7:0] slaveshift; reg out; reg miso = 0; reg mosi = 0; wire mosi_buf; wire miso_buf; wire [4:0]clk_div; assign mosi_buf = mastershift[7]; assign miso_buf = slaveshift[7]; c Khối tạo xung sclk, chứa bộ chia xung để tạo ra xung sclk từ xung clk ban đầu always @(posedge clk) begin if (!busy) begin if (cs && wr) begin mastershift