6. Điểm: (Bằng chữ: )
3.1.2 Chuẩn truyền thông SPI
3.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”.
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.
MOSI – Master Output/ Slave Input
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.
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
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.
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:
Bảng 3. 1 : Tóm tắt các tín hiệu của giao diện SPI
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
3.1.2.2 Truyền thông SPI 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.
Hình 3. 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)
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.
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.
3.1.3 Các kiểu kết nối SPI
3.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.
Hình 3. 4 : 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.
3.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ẻ.
Hình 3. 5 : 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 3. 6 : Kết nối nối tiếp (Daisy-Chained) 3.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:
Hình 3. 7 : 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.
Hình 3. 8 : Kết nối hai master với nhau 3.2 Web server.
3.2.1 Web server là gì?
Web Server (máy chủ Web): máy chủ mà trên đó cài đặt phần mềm chạy Website, đôi khi người ta cũng gọi chính phần mềm đó là Web Server. Tất cả các Web Server đều hiểu và chạy được các file *.htm và *.html, tuy nhiên mỗi Web Server lại phục vụ một số kiểu file chuyên biệt chẳng hạn như IIS của Microsoft dành cho *.asp, *.aspx…; Apache dành cho *.php…; Sun Java System Web Server của SUN dành cho *p…
Máy chủ Web Server là máy chủ có dung lượng lớn, tốc độ cao, được dùng để lưu trữ thông tin như một ngân hàng dữ liệu, chứa những website đã được thiết kế cùng với những thông tin liên quan khác. (các mã Script, các chương trình, và các file Multimedia)
Web Server có khả năng gửi đến máy khách những trang Web thông qua môi trường Internet (hoặc Intranet) qua giao thức HTTP – giao thức được thiết kế để gửi các file đến trình duyệt Web (Web Browser), và các giao thức khác.
Tất cả các Web Server đều có một địa chỉ IP (IP Address) hoặc cũng có thể có một Domain Name.
Bất kỳ một máy tính – máy chủ nào cũng có thể trở thành một Web Server bởi việc cài đặt lên nó một chương trình phần mềm Server Software và sau đó kết nối vào Internet.
Khi máy tính của bạn kết nối đến một Web Server và gửi đến yêu cầu truy cập các thông tin từ một trang Web nào đó, Web Server Software sẽ nhận yêu cầu và gửi lại cho bạn những thông tin mà bạn mong muốn.
3.2.1.1 Hoạt động của máy chủ Web.
Các tiến trình cơ bản :
Theo mô hình trên, trình duyệt web (bên trái) thực hiện một kết nối tới máy chủ web (bên phải), yêu cầu một trang web và nhận lại nó. Sau đây, là thứ tự từng bước cơ bản xảy đến đằng sau màn hình của bạn:
Trình duyệt web tách địa chỉ website làm 3 phần: Tên giao thức: “http”
Tên miền của máy chủ web: http://maychuvietnam.com.vn
Tên tệp HTML: “web-server.htm”
Trình duyệt liên hệ với máy chủ tên miền (DNS Server) để chuyển đổi tên miền “http://maychuvietnam.com.vn” ra địa chỉ IP tương ứng. Sau đó, trình duyệt sẽ gửi tiếp một kết nối tới máy chủ của website có địa chỉ IP này qua cổng 80. Dựa trên giao thức HTTP, trình duyệt gửi yêu cầu GET đến máy chủ, yêu cầu tệp HTML “web-server.htm”. (Chú ý: một cookies cũng sẽ được gửi kèm theo từ trình duyệt web đến máy chủ).
Tiếp đến, máy chủ sẽ gửi một file văn bản có các thẻ HTML đến trình duyệt web của bạn (một cookies khác cũng được gửi kèm theo từ máy chủ tới trình duyệt web, cookies này được ghi trên đầu trang của mỗi trang web).
Trình duyệt web đọc các thẻ HTML để xác lập định dạng (hình thức trình bày) trang web và kết xuất nội dung trang ra màn hình của bạn.
3.2.1.2 HTML là gì?
HTML là chữ viết tắt của cụm từ Hyper Text Markup Language (dịch là Ngôn ngữ đánh dấu siêu văn bản) được sử dụng để tạo một trang web, trên một website có thể sẽ chứa nhiều trang và mỗi trang được quy ra là một tài liệu HTML (thi thoảng mình sẽ ghi là một tập tin HTML).
Một tập tin HTML sẽ bao gồm các phần tử HTML và được lưu lại dưới đuôi mở rộng là .html hoặc .htm
3.2.2 Web server trong l ập trình Arduino
Để lập trình webserver trong môi trường Arduino chúng ta cần sử dụng Ethernet shield và board Arduino hoặc Genuino của bạn để tạo ra một máy chủ Web
đơn giản. Sử dụng thư viện Ethernet, thiết bị của bạn sẽ có thể trả lời một yêu cầu HTTP với Ethernet shield của bạn. Sau khi mở trình duyệt và điều hướng đến địa chỉ IP Ethernet shield của bạn, Arduino sẽ phản hồi vừa đủ HTML cho trình duyệt để hiển thị các giá trị đầu vào từ tất cả sáu chân analog
3.2.2.1 Yêu cầu phần cứng.
Board Arduino hoặc Genuino
Hình 3. 11 : Arduino Uno
Module Arduino Ethernet Shield
Hình 3. 13: Arduino Uno kết nối với Arduino Ethernet Shield
Các Ethernet Shield cho phép bạn kết nối một WizNet điều khiển Ethernet cho Arduino hoặc Genuino thông qua bus SPI. Nó sử dụng các chân 10, 11, 12, và 13 cho kết nối SPI cho WizNet. Mô hình sau này của Ethernet Shield cũng có thẻ SD trên board. Pin 4 digital được sử dụng để điều khiển các pin slave select trên thẻ SD.
Các Shield nên được kết nối với một mạng với một cáp ethernet. Chúng ta sẽ cần phải thay đổi các thiết lập mạng trong các chương trình tương ứng với mạng.
Arduino Ethernet shield cho phép một bo Arduino kết nối với internet bằng cách sử dụng thư viện Ethernet và để đọc và viết một card SD bằng cách sử dụng thư viện SD .
3.2.2.2 Kết nối Ethernet Shield
Để sử dụng Shield, gắn kết nó vào đầu của một bo Arduino (ví dụ như Uno). Để upload chương trình đến bo, kết nối nó với máy tính bằng cáp USB như bình thường.Một khi chương trình đã được tải lên, bạn có thể ngắt kết nối bo từ máy tính của bạn và nguồn của nó bằng một nguồn cung cấp điện bên ngoài.
Kết nối Shield đến máy tính của bạn hoặc một network hub hoặc router bằng cáp Ethernet chuẩn ( CAT5 hoặc CAT6 với kết nối RJ45 ). Kết nối với một máy tính có thể yêu cầu sử dụng một cáp chéo (mặc dù với nhiều máy tính, bao gồm tất cả các máy Mac gần đây (http://support.apple.com/kb/HT2274 ) có thể kết nối chéo trong nội bộ).
Hình 3. 14 : Rj45
Hình 3. 15 : Chuẩn cáp mạng CAT 6 3.2.2.3 Thiết lập mạng
Shield phải được gán một địa chỉ MAC và một địa chỉ IP cố định bằng cách sử dụng chức năng Ethernet.begin ().
Một địa chỉ MAC là một định danh duy nhất tổng thể cho một thiết bị cụ thể. Hiện nay Ethernet Shields đi kèm với một nhãn cho biết địa chỉ MAC bạn nên sử dụng với chúng. Những người thực hiện đề tài chọn địa chỉ MAC 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED cho Arduino Ethernet Shield.
Địa chỉ IP của module Arduino Ethernet Shield được thiết lập trong phần lập trình cho Arduino trong môi trường lập trình bằng công cụ Arduino IDE 1.0.6.
Đối với các Shield cũ hơn sẽ không có một địa chỉ MAC chuyên dụng, có thể làm việc một cách ngẫu nhiên, nhưng không sử dụng cho nhiều bo. Địa chỉ IP hợp lệ phụ thuộc vào cấu hình mạng của bạn. Có thể sử dụng DHCP để gán địa chỉ IP vào Shield. Bạn cũng có thể chỉ định một network gateway và subnet tùy ý.
Hình 3. 16 : Địa chỉ IP sau khi được thiết lập
.
3.3 Tổng quan về Ethernet
3.3.1 Cấu trúc khung tin Ethernet
Các chuẩn Ethernet đều hoạt động ở tầng Data link trong mô hình 7 lớp OSI vì thế đơn vị dữ liệu mà các trạm trao đổi với nhau là các khung ( famer) .
Cấu trúc khung Ethernet như sau:
Bảng 3. 2 : Cấu trúc khung MAC theo IEEE 802.3/ Ethernet
Preamble ( mở đầu): 7 bytes ( không được tính vào kích thước frame của Ethernet ) trường này đánh dấu sự xuất hiện của khung bit, nó luôn mang giá trị 10101010. Từ nhóm bit này, phía nhận có thể tạo ra xung đồng hồ 10Mhz.
SFD ( Start Frame Delimiter): 1 bytes (không được tính vào kích thước frame của Ethernet) trường hợp này mới thực sự xác định bắt đầu của một khung. Nó luôn mang giá trị 10101011.
Destination Address( địa chỉ đích): 6 bytes
Đây là địa chỉ MAC của Ethernet card nơi đến ( nơi khung frame gửi đến).
Ý nghĩa của bit thấp nhất xác định 6 bytes này: o 0: địa chỉ unicast
3 bytes đầu tiên được dùng để chỉ nhà sản xuất 1. 00-00-0C: CISCO
2. 00-00-3D: AT&T
3 bytes tiếp theo do nhà sản xuất quyết định o 1: địa chỉ multicast
01-80-C2-00-00-00: được dùng bởi các bridges cho giải thuật cây tản rộng
FF-FF-FF-FF-FF-FF: địa chỉ quảng bá (broadcast)
Ở chế độ hoạt động bình thường, Ethernet chỉ tiếp nhận những frame có địa chỉ nơi đến trùng với địa chỉ (duy nhất) của nó, hoặc địa chỉ nơi đến thể hiện một thông điệp quản bá. Tuy vậy, hầu hết các Ethernet card đều có thể được đặt ở chế độ "promiscuous". Trong chế độ này, nó sẽ nhận tất cả các frame xuất hiện trong mạng LAN.
Source Address ( địa chỉ nguồn): 6 bytes. Đây là địa chỉ MAC của Ethernet card nguồn (nơi khung frame được gửi đi).
LEN/TYLE (độ dài/kiểu gói): 2 bytes. Giá trị của trường nói lên độ lớn của phần giữ liệu mà khung mang theo.
Có 2 loại cấu trúc Ethernet frame o IEEE 802.3 MAC
Dùng để chỉ độ dài của Ethernet frame
o DIX Ethernet: được công bố bởi DEC, Intel và Xeror vào năm 1980 (phổ biến hơn)
Dùng để chỉ giao thức của lớp phía trên 0800: IP
0860: ARP
Phần thông tin: từ 46 tới 1500 bytes:
Do kích thước frame tối thiểu là 64 bytes, kích thước tối thiểu của phần thông tin là 64-18=46 bytes.
Kích thước phần thông tin tối đa là 1500 bytes. Do đó, kích thước gói IP trong Ethernet tối đa là 1500 bytes, đây cũng là một trong ba kích thước gói IP thông dụng nhất (40, 576, 1500).
FCS mang CRC ( cyclic redundancy checksum): phía gửi sẽ tính toán trường này trước khi truyền khung. Phía nhận tính toán lại CRC này theo cách tương tự. Nếu hai kết quả trùng nhau, khung được xem là nhận đúng, ngược lai khung coi như