Tải bản đầy đủ (.docx) (35 trang)

Báo cáo bài tập lớn lập trình nhúng cơ bản tìm hiểu giao diện SPI

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 (1.01 MB, 35 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI
TẬP LỚN
Lập trình nhúng cơ bản
Đề tài: Tìm hiểu giao diện SPI
Giảng viên hướng dẫn: T.S Phạm Văn Hà
Sinh viên thực hiện: Nhóm 21
Tăng Quang Khải
Nguyễn Tuấn Anh
Hà Nội 2014
MỤC LỤC
2
DANH MỤC HÌNH
3
DANH MỤC BẢNG
4
LỜI NÓI ĐẦU
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
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 việc
ứng dụng vào lập trình vi điều khiển là cơ sở để chúng em chọn đề tài bài tập lớn
“Tìm hiểu giao diện SPI”.
Dưới sự hướng dẫn, chỉ bảo nhiệt tình của thầy Phạm Văn Hà cùng với sự cố
gắng nỗ lực của các thành viên trong nhóm chúng em đã hoàn thành đề tài đúng


thời gian cho phép. Tuy nhiên do thời gian hạn chế, cũng như với tầm hiểu biết có
hạn nên chúng em không tránh khỏi sai sót. Vì vậy chúng em rất mong nhận được
nhiều ý kiến đánh giá, góp ý của thầy giáo và các bạn để chúng em có thể hoàn
thiện thêm đề tài này.
Chúng em xin chân thành cảm ơn!
5
PHẦN 1: MỞ ĐẦU
1. Tên đề tài
Tìm hiểu giao diện SPI
2. Lý do chọn đề tài
Ngày nay, khoa học kỹ thuật phát triển như vũ bão. Hệ thống thiết bị điện
tử, mạch điện tử, điện tử kỹ thuật số đã làm thay đổi sâu sắc toàn bộ hoạt
động sản xuất của con người. Kỹ thuật điện tử số đã và đang thay thế dần các
kỹ thuật tương tự và còn đóng vai trò then chốt trong cuộc cách mạng kỹ thuật
và công nghệ. Song song với sự phát triển thần kì của cuộc cách mạng khoa
học – công nghệ, kỹ thuật số đã dần dần có mặt trong hầu hết tất cả các thiết
bị từ dân dụng đến thiết bị công nghiệp đặc biệt là trong lĩnh vực thông tin
liên lạc, phát thanh truyền hình, điều khiển tự động Nó giải quyết khối
lượng công việc lớn, giảm kích thước của các mạch điện tử đồng thời chúng
có nhiều tính năng và độ chính xác cao. Có thể nói rằng kỹ thuật số ra đời là
cuộc cách mạng trong ngành kỹ thuật điện tử.
Thế kỷ 21 chứng kiến sự phát triển với tốc độ chóng mặt của khoa học
công nghệ, nó đóng vai trò then chốt trên tất cả các lĩnh vực của cuộc sống vì
vậy trong mỗi chúng ta, đặc biệt là thế hệ trẻ, sinh viên ngành kỹ thuật cần
phải hiểu rõ và nắm bắt được các kiến thức về công nghệ kỹ thuật số. Do đó
chúng em quyết định chọn đề tài “Tìm hiểu giao diện SPI” làm đề bài tập lớn.
3. Mục tiêu nghiên cứu
- Sinh viên bước đầu tìm hiểu về nghiên cứu khoa học.
- 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.
4. Bố cục đề tài
Nội dung chính của đề tài gồm ba chương:
 Chương I: Giới thiệu giao diện SPI
 Chương II: Ứng dụng giao diện SPI trên vi điều khiển AVR
 Chương III: Nhận xét về giao diện SPI
6
PHẦN 2: NỘI DUNG
CHƯƠNG I: GIỚI THIỆU GIAO DIỆN SPI
1.1. Giới thiệu
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 )
+ Và một số loại thiết bị khác như: bộ trộn tín hiệu analog, LCD, Graphic
LCD
1.2. Chuẩn truyền thông SPI
1.2.1. Cấu trúc SPI

Giao diện SPI được thực hiện thông qua Bus 4 dây MISO, MOSI, SCK và
SS nên đôi khi SPI còn được gọi là “giao diện 4 dây”.
a. MISO – Master Input/ Slave Output
Chân MISO dùng để truyền dữ liệu ra khỏi SPI khi đặt cấu hình là
Slave và nhận dữ liệu khi đặt cấu hình là Master. MISO của Master và các
Slaves được nối trực tiếp với nhau.
b. MOSI – Master Output/ Slave Input
7
Chân MOSI dùng để truyền dữ liệu ra khỏi SPI khi đặt cấu hình là
Master và nhận dữ liệu khi đặt cấu hình là Slave. MISO của Master và các
Slaves được nối trực tiếp với nhau.
c. SCK – Serial Clock
Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền thông đồng bộ
nên cần một đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến
hoặc đi. Sự tồn tại của chân SCK giúp quá trình truyền ít bị lỗi và vì thế tốc
độ truyền của SPI có thể đạt hiệu quả cao.
Xung nhịp chỉ được tạo ra bởi chip Master.
d. SS – Slave Select
SS là đường chọn Slave cần giao tiếp, trên các chip Slave đường SS sẽ
ở mức cao khi không làm việc. Nếu chip Master kéo đường SS của một
Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và
Slave đó.
Chỉ có một đường SS trên mỗi Slave nhưng có thể có nhiều đường điều
khiển trên Master tùy thuộc vào thiết kế của người dùng.
8
Hình 1: Giao diện SPI
• Có thể mô tả tóm tắt các tín hiệu của giao diện SPI bằng bảng sau:
Tên tín hiệu Chiều Mô tả
SCK
Master: đầu ra

Slave: đầu vào
Clock đồng bộ truyền/nhận dữ liệu
luôn được cung cấp bởi Master
SS
Master: đầu ra
Slave: đầu vào
Tín hiệu kết nối với Slave. Master
kích hoạt tín hiệu này nếu muốn
truyền/nhận dữ liệu với Slave.
Master: MOSI
Slave: SDO hoặc SO
Đầu ra
Đầu ra dữ liệu nối tiếp
- Với Master tín hiệu có tên Master
Out Slave In
- Với Slave tín hiệu có tên Slave
Data Out
Master: MISO
Slave: SDI hoặc SI
Đầu vào
Đầu vào dữ liệu nối tiếp
- Với Master tín hiệu có tên Master
In Slave Out
- Với Slave tín hiệu có tên Slave
Data In
Bảng 1: Các tín hiệu của giao diện SPI
1.2.2. SPI truyền thông như thế nào?
• Mô tả cơ chế
Hình dưới đây mô tả quá trình truyền một gói dữ liệu thực hiện bởi
module SPI trong AVR, bên trái là chip Master và bên phải là Slave.

9
Hình 2: Truyền dữ liệu SPI
• Giản đồ định thời giao tiếp SPI – Motorola
Khi Master muốn truyền/nhận dữ liệu, nó kéo tín hiệu chọn chip SS xuống
mức thấp. Sau đó, Master cung cấp Clock đồng bộ việc truyền/nhận dữ liệu
trên đường SCK.
Vị trí lấy mẫu dữ liệu và dịch dữ liệu theo xung SCK phụ thuộc vào hai
thông số cấu hình được quy định bởi chuẩn SPI là pha của Clock (CPHS –
Clock Phase) và cực của Clock (CPOL – Clock Polarity)
Hình 3: Giản đồ timing của giao tiếp
SPI theo Motorola
Cực của Clock quyết định trạng thái rảnh (idle) của tín hiệu SCK. Nếu
CPOL = 0 thì mức logic khi idle của SCK là mức 0. Nếu CPOL = 1 thì
ngược lại.
10
Dựa vào pha của Clock chúng ta sẽ biết lấy điểm mẫu ở đâu:
+ Nếu pha Clock bằng 0 thì dữ liệu được lấy mẫu khi SCK chuyển từ trạng
thái idle sang active, có thể là cạnh lên hoặc cạnh xuống tùy vào giá trị
CPOL.
+ Nếu pha Clock bằng 1 thì dữ liệu được lấy mẫu khi SCK chuyển từ trạng
thái active sang idle.
1.2.3. SPI là giao thức đồng bộ
Module SPI cho phép giao tiếp nối tiếp đồng bộ kép giữa vi xử lý với thiết
bị ngoại vi:
- Tín hiệu SCK được cung cấp bởi Master nhằm tạo xung đồng bộ cho phép
dữ liệu được truyền đi hoặc khi đọc dữ liệu nhận được.
- Khi tín hiệu SCK được phát ra thì tín hiệu này có thể thay đổi nhưng không
làm hỏng dữ liệu. Lí do là trong giao thức SPI, tốc độ của dữ liệu truyền đi
sẽ thay đổi theo sự thay đổi của SCK. Điều này rất có lợi nếu như vi xử lý
bị cấp xung đồng hồ không chính xác (VD: bộ dao động RC).

1.2.4. SPI là giao thức trao đổi dữ liệu
Dữ liệu lúc nào cũng được truyền qua lại giữa các thiết bị SPI. Thật ra,
không có khái niệm thiết bị phát hay thiết bị nhận trong giao thức SPI mà mỗi
thiết bị có 2 đường dữ liệu, một đường dữ liệu vào và một đường dữ liệu ra.
Dữ liệu truyền đi được điều khiển bởi xung SCK từ Master.
Khi được truyền đi, dữ liệu vào cần phải được đọc ngay nếu không sẽ bị
mất đi và khi đó, giao thức SPI có thể sẽ ngưng hoạt động. Để tránh tình trạng
này, lúc nào ta cũng phải đọc dữ liệu về ngay sau khi truyền đi cho dù dữ liệu
đó không thực sự cần thiết.
Thường thì một tín hiệu chọn Slave sẽ tác động mức thấp để chỉ ra Slave
nào được truy cập. Tín hiệu này phải được sử dụng khi có nhiều hơn một
Slave trong cùng hệ thống và thường không sử dụng đến khi trong mạch chỉ
có một Slave. Tuy nhiên, theo nguyên tắc thì ta nên sử dụng tín hiệu này trong
cả hai trường hợp trên.
Tín hiệu SS sẽ chỉ ra Slave nào mà Master muốn bắt đầu một quá trình
trao đổi dữ liệu bằng giao thức SPI giữa thiết bị Slave đó và chính nó. Nếu tín
11
hiệu trên đường SS là 0 thì chứng tỏ giao thức SPI đang hoạt động. Ngược lại
là mức 1 thì giao thức SPI sẽ không hoạt động.
Một đặc điểm khá quan trọng của tín hiệu SS là nó có tác dụng làm tăng
cường khả năng miễn nhiễm cho hệ thống. Lí do là SS sẽ Reset Slave để nó
có thể nhận Byte dữ liệu tiếp theo.
SPI có 4 mode hoạt động, phụ thuộc vào cực tính và pha của xung đồng
hồ. Trong trường hợp cực âm của xung đồng hồ, tín hiệu SCK sẽ ở mức thấp
trong quá trình nghỉ và chuyển sang mức cao trong quá trình truyền dữ
liệu. Ngược lại, đối với trường hợp cực dương của xung đồng hồ, tín hiệu
SCK ở mức cao trong quá trình nghỉ và chuyển sang mức thấp khi truyền
dữ liệu:
SPI Mode CPOL CPHS
0 0 0

1 0 1
2 1 0
3 1 1
Bảng 2: Các chế độ truyền thông trong giao thức SPI
+ SPI Mode 0:
Mô tả: Xung dương, dữ liệu được chốt trước khi dịch
Giản đồ thời gian:
12
Hình 4: Giản đồ thời gian của SPI ở
Mode 0
+ SPI Mode 1:
Mô tả: Xung dương, dữ liệu được dịch đi trước khi chốt
Giản đồ thời gian
Hình 5: Giản đồ thời gian của SPI ở
Mode 1
+ SPI Mode 2:
Mô tả: Xung âm, dữ liệu được chốt lại trước khi dịch
Giản đồ thời gian
13
Hình 6: Giản đồ thời gian của SPI ở
Mode 2
+ SPI Mode 3:
Mô tả: Xung âm, dữ liệu bị dịch đi trước khi chốt lại
Giản đồ thời gian
Hình 7: Giản đồ thời gian của SPI ở
Mode 3
1.3. Các kiểu kết nối SPI
1.3.1. Kết nối điểm – điểm ( point-to-point )
Đây là kiểu kết nối cơ bản nhất của giao thức SPI là một master kết nối
với một slave.

14
Hình 8: Kết nối point-to-point, một
master nối với một slave
Cả Master và Slave đều có thanh ghi dịch nối tiếp (thanh ghi dữ liệu 8
bits) ở 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 bit vào thanh ghi dịch của nó, sau đó bit 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ả.
Trong kiểu kết nối này, chỉ có thiết bị Master mới có thể điều khiển (phát
ra) xung SCK. Dữ liệu sẽ không được truyền đi nếu như Master không cung
cấp xung SCK và tất cả các thiết bị Slave đều được điều khiển bởi xung nhịp
phát ra từ Master trong khi đó, Slave lại không có khả năng phát xung.
1.3.2. Kết nối Multi-slave
• Kết nối nhiều slave độc lập (Independent slaves) hay kết nối song
song:
Trong cách kết nối này, tín hiệu SCK và SDO từ Master được cung cấp
đến từng Slave. Đường tín hiệu SDO của các Slave nối chung lại với nhau và
truyền về Master. Lúc này, Master sẽ lựa chọn Slave nào để trao đổi dữ liệu
thông qua các chân SS riêng lẻ.
15
Hình 9: Kết nối nhiều slave song song
• Kết nối nối tiếp hay kết nối Daisy-Chained
Trong kết nối này, chân SS và SCK của master nối song song đến tất cả
các slave. Chân SDO của slave trước nối đến SDI của slave sau. Chân MOSI
của master nối đến SDI của slave đầu tiên trong chuỗi và MISO được nối
đến SDO của slave cuối cùng trong chuỗi.

Việc truyền dữ liệu từ master đến các slave và dữ liệu master nhận từ
slave cuối cùng được minh họa với các slave như sau:
Hình 10: Kết nối nối tiếp (Daisy-Chained)
1.3.3. Kết nối Multi-master
Kết nối nhiều master độc lập (Independent masters hay Multi-master).
Đối với kiểu kết nối này có nhiều cách kết nối và nhiều vấn đề hơn.
• Kết nối nhiều master song song đến một slave
Với cách kết nối này, phần cứng ngoại vi phải hỗ trợ thêm các tín hiệu
điều khiển khác để tránh xung đột khi hai master cùng truy xuất đến slave.
Ví dụ một trong các cách hỗ trợ multi-master như trong hình sau:
16
Hình 11: Kết nối hai master song
song đến một slave
Giải pháp ở đây là ngoài các tín hiệu SPI thông thường, phần cứng của
hai master SPI hỗ trợ thêm tín hiệu SS_IN để master này biết master kia có
đang chọn slave hay không. Đồng thời tín hiệu SS nối đến slave được mắc
qua một cổng XNOR để nếu hai master cùng chọn thì tín hiệu SS của slave
vẫn không tích cực. Bên cạnh đó, trong mạch trên, ngoài txd (chính là tín
hiệu MOSI) thì đường SCK cũng phải Hi-Z khi master không chọn slave.
• Kết nối hai master với nhau
Đây là một dạng khác của multi-master. Trong đó hai master nối trực
tiếp với nhau, giao tiếp qua 5 đường.
17
Hình 12: Kết nối hai master với nhau
18
CHƯƠNG II: GIAO DIỆN SPI TRÊN VI ĐIỀU KHIỂN STM32F4
VỚI LÕI ARM CORTEX-M4
1.1. Tổng quan về ARM và Cortex-M
Kiến trúc ARM là một tập hợp các chỉ thị thiết lập kiến trúc (ISA) vi xử
lý máy tính 32-bit kiểu RISC, được phát triển bởi công ty ARM Holdings.

STT Architecture
Bit
width
Cores designed by ARM
Holdings
Cortex profile
1 ARM1 32/26 ARM1
2 ARM2 32/26 ARM2, ARM3
3 ARM3 32/26 ARM6, ARM7
4 ARM4 32/26 ARM8
5 ARM4T 32 ARM7TDMI, ARM9TDMI
6 ARM5 32
ARM7EJ, ARM9E,
ARM10E
7 ARM6 32 ARM11
8 ARM6-M 32
ARM Cortex-M0, ARM
Cortex-M0+, ARM Cortex-
M1
Microcontroller
9 ARM7-M 32 ARM Cortex-M3 Microcontroller
10 ARM7E-M 32
ARM Cortex-M4, ARM
Cortex-M7
Microcontroller
11 ARM7-R 32
ARM Cortex-R4, ARM
Cortex-R5, ARM Cortex-R7
Real time
12 ARM7-A 32

ARM Cortex-A5, ARM
Cortex-A7, ARM Cortex-
A8, ARM Cortex-A9, ARM
Cortex-A12, ARM Cortex-
A15, ARM Cortex-A17
Application
13 ARM8-A 64/32
ARM Cortex-A53, ARM
Cortex-A57
Application
14 ARM8-R 32 No announcements yet Real time
19
Bảng 3: Danh sách các kiến trúc và lõi vi xử lý mà ARM đã thiết kế
Vi xử lý (Processor hay Microprocessor) là một linh kiện điện tử được chế
tạo từ các tranzito thu nhỏ tích hợp lên trên một vi mạch cùng với một số thiết
bị giao tiếp cơ bản. CPU chính là một vi xử lý.
Vi điều khiển (Microcontrller) là một vi mạch tích hợp bao gồm bộ vi xử
lý kết hợp cùng các thiết bị ngoại vi (RAM, Timer, cổng I/O, bộ chuyển đổi,
…). Vi điều khiển có thể hoạt động chỉ với vài vi mạch hỗ trợ bên ngoài.
Hình 13: Vi mạch tích hợp của một vi
điều khiển
Cortex là một thế hệ lõi vi xử lý thuộc kiến trúc ARM, được thiết kế theo
kiến trúc Harvard. Nó là một lõi hoàn chỉnh bao gồm bộ vi xử lý Cortex và
một hệ thống các thiết bị ngoại vi được thiết kế theo giải pháp SoC.
Cortex có nhiều bus, cho phép truy cập dữ liệu không thẳng hàng, hỗ trợ
đặt xóa các bit bên trong hai vùng 1Mbyte của bộ nhớ mà không cần xử lý
luận lý (Boolean processor). Cortex gồm 3 dòng:
 ARM Cortex - A: bộ vi xử lý dành cho hệ điều hành và các ứng dụng
của người dùng phức hợp. Cortex-A hỗ trợ các tập lệnh ARM, Thumb và
Thumb-2. Cortex-A là sự cải tiến của ARM11.

20
 ARM Cortex - R: bộ vi xử lý dành cho hệ thống đòi hỏi về tính thời gian
thực (Real Time Control). Cortex-R hỗ trợ các tập lệnh ARM, Thumb và
Thumb-2. Cortex-R là sự cải tiến của ARM9.
 ARM Cortex - M: bộ vi xử lý được tối ưu dành cho các ứng dụng vi điều
khiển (Microcontroller) với chi phí thấp mà vẫn đạt hiệu xuất cao. Dòng
này chỉ hỗ trợ tập lệnh Thumb-2. Cortex-M là sự cải tiến của ARM7.
Hình 14: Các sản phẩm trong dòng vi
xử lý Cortex
Dòng Cortex-M từ khi được giới thiệu đã cho ra đời 5 thế hệ vi xử lý được
thế kế trên 2 kiến trúc là ARMv6-M và ARMv7-M (xem hình).
21
Hình 15: Các thế hệ dòng vi xử lý
Cortex-M
1.2. Tổng quan về bộ vi xử lý Cortex-M4
Bộ vi xử lý ARM Cortex-M4 là thế hệ vi xử lý thứ 2 của dòng Cortex-M
dựa trên kiến trúc ARMv7-M, được giới thiệu vào năm 2010. Nó được mở
rộng them về tập lệnh và kiến trúc mới.
Corex-M4 gồm một lõi CPU 32-bit, các thanh ghi 32-bit, đường dẫn dữ
liệu nội bộ 32-bit và giao diện bus 32-bit, cùng một số thành phần khác.
Ngoài ra, Cortex-M4 cũng đã hỗ trợ một số hoạt động liên quan đến dữ liệu
64-bit.
Hình 16: Kiến trúc bộ vi xử lý ARM
Cortex-M4
22
1.3. Lõi Cortex-M4 (CPU Cortex)
Lõi của Cortex-M4 là một CPU RISC 32-bit được thiết kế dựa trên kiến
trúc Harvard (đặc trưng bằng sự tách biệt giữa vùng nhớ chứa dữ liệu và
chương trình). Nó là phiên bản đơn giản hóa từ mô hình lập trình của ARM7/9
nhưng có một tập lệnh phong phú và tối ưu hơn, hỗ trợ tốt cho các phép toán

số nguyên, khả năng thao tác với bit và đáp ứng thời gian thực tốt hơn.
Hình 17: Lõi ARM7TDMI của Cortex-
M4
CPU Cortex-M4 có cấu trúc đường ống 3 đoạn (three-stage pipeline). Với
kiến trúc này thời giản rỗi của một chu kỳ sẽ được hạn chế tối đa nên hiệu
xuất tổng thể của nó được cải thiện rõ rệt.
23
Hình 18: Kiến trúc đường ống của
ARM Cortex-M4
Bình thường Cortex-M4 có thể thực thi hầu hết lệnh trong một chu trình
đơn, nhưng với cấu trúc pipeline này Cortex-M4 có thêm khả năng dự đoán rẽ
nhánh nên lệnh có thể được thực thi nhanh hơn. Tức là nếu với một lệnh
thường A đang được thực thi thì một lệnh B khác sẽ được giải mã và một lệnh
C khác nữa sẽ được lấy về bộ nhớ. Còn đối với lệnh rẽ nhánh (if … else chẳng
hạn), trong khi lệnh điều kiện được giải mã ở tầng decode thì bộ xử lý sẽ nạp
lệnh dự định rẽ nhánh trong else, khi lệnh rẽ được thực thi, bộ xử lý sẽ phân
tích xem đâu là lệnh tiếp theo. Nếu lệnh rẽ nhánh được chọn thì nó sẽ được
thực thi ngay (vì nó đang ở tầng decode), còn nếu không thì bộ vi xử lý sẽ
thực hiện tiếp lệnh tiếp theo (đã được lấy ở tầng fetch).
Lõi Cortex-M4 chỉ hỗ trợ tập lệnh Thumb-2. So với kiến trúc tập lệnh
ARM hoặc Thumb thì Thumb-2 tối ưu hơn về hiệu suất và kích thước mã, bao
gồm cả bộ phận phần cứng, nhân chu trình đơn, và thao tác bit-lĩnh vực.
Ngoài ra, Cortex-M4 còn được tích hợp chế độ ngủ (sleep mode) và tùy
chọn khả năng duy trì trạng thái (optional state retention capabilities) cho
phép đạt hiệu suất cao với mức tiêu thụ điện năng thấp.
1.4 SPI trên STM32
STM32 hỗ trợ 5 loại giao tiếp ngoại vi khác nhau. STM32 có giao diện
SPI và I2C để giao tiếp với các mạch tích hợp khác. Hỗ trợ giao tiếp CAN cho
các module, USB cho giao tiếp với các mạch tích hợp khác, STM cung cấp 2
khối điều khiển SPI có khả năng chạy ở chế độ song công (full duplex) với

tốc độ truyền dữ liệu lên tới 18MHz. Khối SPI tốc độ cao nằm trên APB2,
khối SPI tốc độ thấp nằm trên APB1. Mỗi khối SPI có hệ thống thanh ghi cấu
24
hình độc lập, dữ liệu truyền có thể dưới dạng 8-bit hoặc 16-bit, thứ tự hỗ trợ
MSB hay LSB. Chúng ta có thể cấu hình mỗi khối SPI đóng vai trò master
hay slave.
Hình 19: Sơ đồ khối SPI
Để hỗ trợ truyền dữ liệu tốc độ cao, mỗi khối SPI có 2 kênh DMA dành
cho gửi và nhận dữ liệu. Thêm vào đó là khối CRC dành cho cả truyền và
nhận dữ liệu. Khối CRC đều có thể hỗ trợ kiểm tra CRC8 và CRC16. Các đặc
tính này rất cần thiết khi sử dụng SPI để giao tiếp với MMC/SD card.
25

×