SPI Slave Mode
3.3.2 Thiết bị kết nối Ethernet với vi điều khiển
Thông thường để kết nối thiết bị điều khiển với mạng Ethernet có hai cách, một là sử dụng các vi điều khiển tích hợp sẵn phần giao tiếp với Ethernet, phổ biến là các dòng PIC18F66J60, PIC18F66J65, PIC18F67J60, PIC18F67J60, PIC18F86J60,…. của Microchip. Sử dụng phương thức này có ưu điểm viết mã code đơn giản, kích thước bo mạch nhỏ gọn. Ngoài ra còn có cách khác là sử dụng chip giao tiếp Ethernet ENC28J60, với cách sử dụng này bo mạch sẽ có kích thước lớn hơn, thường tách thành hai module độc lập được kết nối qua card hỗ trợ giao tiếp chuẩn SPI ( Serial Pheripheral Interface ).
Trong module ghép nối Ethernet, ta chọn cách sử dụng chip ENC28J60. ENC28J60 là thiết bị kết nối Ethernet độc lập theo chuẩn công nghiệp giao tiếp SPI. Nó được thiết kế để đáp ứng như một giao diện mạng Ethernet cho bất kì bộ điều khiển nào có trang bị giao tiếp SPI.
Hình 21: ENC28J60. ENC28J60 bao gồm 7 khối chức năng chính:
Một giao tiếp SPI phục vụ cho kênh truyền thông giữa vi điều khiển với ENC28J60.
Các thanh ghi điều khiển được sử dụng để điều khiển và giám sát ENC28J60.
Một bộ nhớ đệm RAM dùng cho nhận và truyền dữ liệu.
Một bộ phân xử để điều khiển truy nhập tới bộ đệm RAM khi yêu cầu được tạo ra từ DMA, khối nhận và truyền.
Giao diện bus để trao đổi dữ liệu và nhận lệnh qua giao tiếp SPI.
Module MAC thực hiện phép logic MAC theo IEEE 802.3.
Module PHY mã hóa và giải mã dữ liệu tương tự truyền trên cặp đôi dây xoắn.
Hình 22 : Giao diện cơ bản ENC28J60.
Tất cả bộ nhớ bên trong ENC28J60 là kiểu RAM tĩnh (SRAM ). Có 3 loại bộ nhớ :
Bộ nhớ chứa các thanh ghi điều khiển được sử dụng để cấu hình, điều khiển và lấy lại trạng thái của ENC28J60. Chúng được đọc và ghi trực tiếp bởi giao tiếp SPI.
Bộ nhớ chứa các thanh ghi điều khiển được chia thành 4 ngăn (bank ), có thể được chọn bởi các bit chọn ngăn BSEL1:BSEL0 trong thanh ghi ECON1. Mỗi bank dài 32 bytes và được đánh 5 bit địa chỉ. Vị trí của 5 bytes cuối cùng (từ 1Bh đến 1Fh) của tất cả các bank đều có chung năm thanh ghi EIE, EIR, ESTAT, ECON1, ECON2.
Bộ đệm Ethernet là bộ nhớ đệm có được sử dụng để truyền và nhận dữ liệu. Kích thước của bộ đệm là 8Kbyte và được chia thành bộ đệm nhận và bộ đệm truyền. Trong đó, kích thước và vị trí của các bộ đệm trên được lập trình bởi vi điều khiển qua giao tiếp SPI. Nội dung của bộ đệm Ethernet được truy cập thông qua các con trỏ đọc và ghi kết hợp với các lệnh đọc và ghi bộ nhớ đệm SPI.
Hình 23: Các vùng nhớ của ENC28J60.
Bộ đệm nhận là vùng nhớ tạm thời dùng để lưu dữ liệu nhận được từ mạng Ethernet. Các cặp thanh ghi ERXSTH: ERXSTL và ERXNDH : ERXNDL đóng vai trò như là các con trỏ để xác định kích thước và vị trí của bộ đệm trong bộ nhớ.
Khi các byte của dữ liệu nhận được từ giao diện Ethernet thì chúng sẽ được ghi vào trong bộ đệm nhận một cách tuần tự.
Bộ đệm truyền sẽ chiếm phần bộ nhớ còn lại trong bộ đệm Ethernet. Bộ đệm này cũng được xác định kích thước và vị trí thông qua các cặp thanh ghi ETXST và ETXSN như các con trỏ. Dữ liệu trước khi truyền lên mạng Ethernet sẽ được lưu tạm thời trong vùng nhớ này.
Các thanh ghi PHY được sử dụng để cấu hình, điều khiển và lấy lại trạng thái của module PHY. Các thanh ghi này không được truy nhập trực tiếp qua giao diện SPI, chúng chỉ có thể được truy nhập qua MII thực hiện trong MAC.
Mọi hoạt động của ENC28J60 phụ thuộc vào toàn bộ các lệnh được đưa từ vi điều khiển thông qua giao diện SPI. Các lệnh này được sử dụng để truy nhập tới bộ nhớ chứa các thanh ghi điều khiển và bộ đệm Ethernet.
Lệnh đọc thanh ghi điều khiển (RCR) cho phép vi điều khiển đọc bất kì các thanh ghi nào của ETH, MAC, MII. Lệnh đọc bộ nhớ đệm(RBM)cho phép vi điều khiển có thể đọc các bytes bên trong bộ nhớ đệm truyền và nhận.Lệnh viết thanh ghi điều khiển viết WCR cho phép vi điều khiển viết tới bất kì các thanh ghi nào của ETH, MAC, MII. Lệnh viết tới bộ nhớ đệm WBM cho phép vi điều khiển viết các bytes trong 8-Kbyte bộ nhớ đệm truyền và nhận. Lệnh BSF dùng để thiết lập 8 bits điều khiển trong thanh ghi ETH. Lệnh này không được sử dụng với thanh ghi MAC, PHY, MII hay bộ nhớ đệm. Lệnh BFC dùng để xóa 8 bits trong thanh ghi điều khiển ETH. Lệnh reset hệ thống SRC cho phép vi điều khiển phát ra lệnh SSR. Không giống như các lệnh SPI khác. Lệnh SRC chỉ là lệnh 1 byte, không tác động lên các thanh ghi khác.
Quá trình gửi và nhận bức điện:
Module MAC bên trong ENC28J60 sẽ tự động gửi đi trường mở đầu và phân định đầu khung khi truyền. Ngoài ra, MAC có thể gửi thêm bất kì phần đệm nào (nếu cần) và phần kiểm soát lỗi CRC.
Trong khi đó, vi điều khiển sẽ phải thực hiện việc ghi tất cả những trường hợp còn lại của khung Ethernet vào bên trong bộ nhớ đệm trước khi được truyền đi.
Để truyền đi một bức điện Ethernet thì vi điều khiển cần thực hiện các bước sau:
1.Điều khiển con trỏ ETXST để trỏ vào vùng nhớ nào hiện thời không sử dụng. 2.Sử dụng lệnh ghi bộ nhớ đệm WBR để ghi byte điều khiển, sau đó đến các trường của khung Ethernet : địa chỉ MAC đích và nguồn, kiểu/ độ dài và dữ liệu mạng.
4.Xóa bit TXIF và đặt bit TXIE trong thanh ghi EIR, đặt bit INTIE trong thanh ghi EIE để có thể thực hiện một ngắt khi cần thiết.
5.Quá trình truyền được bắt đầu khi đặt bit TXRTS của thanh ghi ECON1.
Khi quá trình truyền bức điện được thực hiện thành công hoặc ngưng lại khi có một nguyên nhân nào đó thì bit TXRTS của thanh ghi ECON1 sẽ được xóa, 7 byte vector trạng thái truyền sẽ được ghi vào vị trí bởi ETXND +1, bit TXIF của thanh ghi EIR sẽ được đặt và ngắt được tạo ra. Để kiểm tra nếu bức điện được gửi thành công, bit TXABRT của thanh ghi ESTAT sẽ được đọc.