+ Mô phỏng được quá trình truyền nhận dữ liệu thông qua chuẩn giao tiếp SPI... Là giao tiếp đồng bộ, bất cứ quá trình nào cũng đều được đồng bộ với xung clock sinh ra bởi thiết bị Master
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ
CHÍ MINH TRƯỜNG ĐẠI HỌC KHOAJIỌC Tự
NHIÊN KHOA ĐIỆN TỬ - VIỄN THÔNG
BỘ MÔN MÁY TÍNH - HỆ THỐNG NHÚNG
ũũũmũũũ
NHÓM 01
Đề tài:
Xây dựng hệ thống SoC có sử dụng IP SPI
để giao tiếp nội tiếp
BÁO CÁO ĐỀ TÀI ĐỒ ÁN THựC HÀNH SOC CHUYÊN NGÀNH MÁY TÍNH - HỆ THỐNG NHÚNG
GIẢNG VIÊN
Trang 2Thầy Trần Tuấn Kiệt
TP Hồ Chí Minh, tháng 2 năm 2022
Trang 3TÓM TẮT ĐỀ TÀI
Đề tài của nhóm tập trung vào việc thực hiện hệ thống SoC có giao tiếp nội tiếp qua chuẩn SPI Sau quá trình thực hiện, nhóm đã hoàn thành được một
số tiêu chí đã đề ra trong lúc thiết kế, bao gồm:
+ Hiểu được khái quát các kiến thức thiết kế một hệ thống SoC + Mô phỏng được quá trình truyền nhận dữ liệu thông qua chuẩn giao tiếp SPI
Trang 4CÁC THÀNH VIÊN TRONG NHÓM
Trang 5MỤC LỤC
1 Serial Peripheral Interface-SPI 1
1.1 Giới thiệu 1
1.2 Cấu tạo 2
1.4 Chế độ hoạt động 3
2 Thực hiện 4
2.1 Thiết kế hệ thống 4
2.2 Thiết kế mô phỏng 6
2.2.1 Nios II Softwave Build Tools for Eclipse 6
2.2.2 Mô phỏng trên NIOS II 6
Tài liệu tham khảo 6
Trang 6DANH SÁCH HÌNH
Hình 1.1 Mô hình SPI 1
Hình 1.2 Các chân kết nối SPI 2
Hình 1.3 Quá trình truyền dữ liệu 3
Hình 1.4 Chế độ hoạt động SPI 4
Hình 2.1 Hệ thống phần cứng 5
Hình 2.2 File top-level 5
Hình 2.3 Code C chạy mô phỏng 6
Trang 71 Serial Peripheral Interface-SPI
1.1 Giới thiệu
SPI - Serial Peripheral Interface - hay còn gọi là giao diện ngoại vi nối tiếp, được phát triển bởi hãng Motorola
Chuẩn đồng bộ nối truyền dữ liệu ở chế độ full - duplex (hay gọi là "song công toàn phần" Nghĩa là tại 1 thời điểm có thể xảy ra đồng thời quá trình truyền và nhận
Là giao tiếp đồng bộ, bất cứ quá trình nào cũng đều được đồng bộ với xung clock sinh ra bởi thiết bị Master ► Không cần phải lo lắng về tốc độ truyền dữ liệu SPI thường được sử dụng giao tiếp với bộ nhớ EEPROM, RTC (Đồng hồ thời gian thực), IC âm thanh, các loại cảm biến như nhiệt độ và áp suất, thẻ nhớ như MMC hoặc thẻ SD hoặc thậm chí các bộ vi điều khiển khác
Hình 1.1 Mô hình SPI
Trang 81.2 Cấu tạo
Sử dụng 4 đường giao tiếp nên đôi khi được gọi là chuẩn truyền thông “ 4 dây” 4 đường đó là :
• SCK (Serial Clock): Thiết bị Master tạo xung tín hiệu SCK và cung cấp cho Slave Xung này có chức năng giữ nhịp cho giao tiếp SPI Mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi ^ Quá trình ít bị lỗi và tốc độ truyền cao
• MISO (Master Input Slave Output): Tín hiệu tạo bởi thiết bị Slave và nhận bởi thiết bị Master Đường MISO phải được kết nối giữa thiết bị Master
và Slave
• MOSI (Master Output Slave Input): Tín hiệu tạo bởi thiết bị Master và nhận bởi thiết bị Slave Đường MOSI phải được kết nối giữa thiết bị Master và Slave
• SS (Slave Select): Chọn thiết bị Slave cụ thể để giao tiếp Để chọn Slave giao tiếp thiết bị Master chủ động kéo đường SS tương ứng xuống mức 0 (Low) Chân này đôi khi còn được gọi là CS (Chip Select) Chân SS của
vi điều khiển (Master) có thể được người dùng tạo bằng cách cấu hình 1 chân GPIO bất kỳ chế độ Output
Trang 9Slave Master
MOSI
MIS O
Processor
SCK
ss or cs
Hình 1.2
MOSI
MISO
Peripheral SCK
ss or cs
Các chân kết nối SPI
Trang 101.3 Khung truyền SPI
Mỗi chip Master hay Slave đều có một thanh ghi dữ liệu 8 bits
Quá trình truyền nhận giữa Master và Slave xảy ra đồng thời sau 8 chu kỳ đồng
hồ, một byte dữ liệu được truyền theo cả 2 hướng
Quá trình trao đổi dữ liệu bắt đầu khi Master tạo 1 xung clock từ bộ tạo xung nhịp (Clock Generator) và kéo đường SS của Slave mà nó truyền dữ liệu xuống mức Low
Cứ 1 xung clock, Master sẽ gửi đi 1 bit từ thanh ghi dịch (Shift Register) của nó đến thanh ghi dịch của Slave thông qua đường MOSI Đồng thời Slave cũng gửi lại 1 bit đến cho Master qua đường MISO.Như vậy sau 8 chu kỳ clock thì hoàn tất việc truyền và nhận 1 byte dữ liệu
Dữ liệu của 2 thanh ghi được trao đổi với nhau nên tốc độ trao đổi diễn ra nhanh
và hiệu quả
Lưu ý: Trong giao tiếp SPI, chỉ có thể có 1 Master nhưng có thể 1 hoặc nhiều Slave cùng lúc Ở trạng thái nghỉ, chân SS của các Slave ở mức 1, muốn giao tiếp với Slave nào thì ta chỉ việc kéo chân SS của Slave đó xuống mức 0
Hình 1.3 Quá trình truyền dữ liệu
1.4 Chế độ hoạt động
• SPI có 4 chế độ hoạt động phụ thuộc vào cực của xung giữ (Clock
Polarity - CPOL) và pha (Phase - CPHA)
• CPOL dùng để chỉ trạng thái của chân SCK ở trạng thái nghỉ Chân SCK giữ ở mức cao khi CPOL=1 hoặc mức thấp khi CPOL=0
• CPHA dùng để chỉ các mà dữ liệu được lấy mẫu theo xung Dữ liệu sẽ được lấy ở cạnh lên của SCK khi CPHA=0 hoặc cạnh xuống khi
CPHA=1
Trang 11Hình 1.4 Chế độ hoạt động SPI
• Mode 0 (mặc định) - xung nhịp của đồng hồ ở mức thấp (CPOL = 0) và
dữ liệu được lấy mẫu khi chuyển từ thấp sang cao (cạnh lên) (CPHA = 0)
• Mode 1 - xung nhịp của đồng hồ ở mức thấp (CPOL = 0) và dữ liệu được lấy mẫu khi chuyển từ cao sang thấp (cạnh xuống) (CPHA = 1)
• Mode 2 - xung nhịp của đồng hồ ở mức cao (CPOL = 1) và dữ liệu được lấy mẫu khi chuyển từ cao sang thấp (cạnh lên) (CPHA = 0)
• Mode 3 - xung nhịp của đồng hồ ở mức cao (CPOL = 1) và dữ liệu được lấy mẫu khi chuyển từ thấp sang cao (cạnh xuông) (CPHA = 1)
Lưu ý: Khi giao tiếp SPI giữa vi điều khiển và các thiết bị ngoại vi khác như IC, cảm biến thì 2 bên bắt buộc hoạt động cùng Mode, nếu không dữ liệu truyền nhận có thể bị đọc sai
2 Thực hiện
2.1 Thiết kế hệ thống
cs OR
ss
DATA
MODEO
(CPŨL=O&CPHA=0)
MODE1
(CPOL=0&CPHA^1)
MODE2
(CPOL=1&CPHA=0)
MODE3
(CPỮL=1&CPHA=1)
Trang 13Hình 2.5 Hệ thống phần cứng
Trong giao diện Platform Designer thêm SPI(3 Wire Serial) Intel FPGA IP
SOC_SPI.V
3? ôô (T :i Đ tí* 10 w 0 2« z
6 L
System Nios_system
9 clk_clk (CLOCK_50),
10 reset_reset_n (KEỸ[O])
li
12 L
14
Hình 2.6 File top-level
Thêm file Top-level cho project
Trang 142.2 Thiết kế mô phỏng
2® * "Smaỉỉ Hello Horld" exaiuple [] A 80
@81 ilĩnclud^^ar^ty^es^h^
I?I 82 1 ne Ịude ’’ ạ 11 e r a ay a 1 pn^sp i_^r e 3 h ’’
?, 83 ^incrgde^alcer^ayalon^^pi,;!!"
? 84 j| ĩ n □ lude^ " 3 3 1 emỊ.h "
85 #include <3tdio.h>
86 #ĩnclude <unistd.ỉi>// usleep
870 int main (void) {
88 printf ("Entered Main\n") ;
89 alt_u8 send_M; alt_u8 send_S; alt_u8 rcvd_S; alt_u8 rcvd_M; alt_u8 count;
90 count = 0;
91 whĩle(l){
92 send_M = OxAA;
93 send_S = 0x55;
94
95 IOWR_ALTERA_AVALON_SPI_CONTROL (SPI_MASTER_BASE, 0x00í ;
96 IOWR_ALTERA_AVALON_SPI_CONTROL (SPISLAVEBASE, 0x00);
97
98 IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_SLAVE_BASE , send_S ) :
99 IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_MASTER_BASE f send_M);
100
101 usleep(75);
102
103 rcvd_s = IORD_ALTERA_AVALON_SPI_RXDATA(SPI_SLAVE_BASE) ;
104 rcvd_M = IORD_ALTERA_AVALON_SPI_RXDATA(SPI_MASTER_BASE) ;
105 // Print results
106 prĩntf ( "raastei sent = %i\t31ạye recv’d = send_M r rcvd_S);
107 prĩntf ( "slave sent = %i\tmaster recv'd = %i\n" r send_S, rcvd_M) ;
108
109 count ++;
110 usleep (1000000) ;
113 ỉ
114
Hình 2.7 Code C chạy mô phỏng
Hình 2.4 Mô phỏng dạng sóng slave trên modelsim