Chức năng cơ bản nhất của một giao thức truyền thông không dây là truyền và nhận thông tin giữa 2 thiết bị. Lớp điều khiển truy cập MAC (Media Access Controller) cung cấp cách truy cập cơ bản tới kênh, đánh địa chỉ và các chứng năng truyền nhận, nằm ngay trên lớp vật lý PHY xử lý các dữ liệu thô. Vì sự đa dạng trong triển khai thiết bị ở lớp vật lý nên lớp điều khiển truy cập MAC là lớp thấp nhất có thể để thực hiện chuẩn hóa phần mềm cho các giao thức truyền thông.
Với các giao thức không dây Microchip, MiMAC chính là giao diện đã chuẩn hóa ở lớp MAC dành cho việc giao tiếp giữa tất cả các giao thức và bộ thu phát của Microchip hỗ trợ loại ứng dụng không dây tốc độ thấp, phạm vi hẹp và công suất tiêu thụ thấp. Sử dụng MiMAC mang lại nhiều lợi ích cho các nhà phát triển:
- Thứ nhất, ngăn xếp của các giao thức truyền thông không dây thường phức tạp khi triển khai và khó sử dụng. Với giao diện chuẩn hóa MiMAC, nó giúp cho ngăn xếp giao thức có thể dùng được cho một lượng lớn các bộ thu phát vô tuyến khác nhau.
- Thứ hai, MiMAC có thể được áp dụng cho tất cả các bộ thu phát vô tuyến của Microchip ở những tần số và cách điều chế khác nhau. Nó giúp nhà phát triển giảm thiểu rủi do khi phát triển bằng việc cho phép người dùng khả năng thay thế bộ thu phát sóng ở bất kỳ giai đoạn nào của quá trình phát triển ứng dụng. Việc lựa chọn bộ thu phát trong phần mềm lõi được chuyển đến tay người dùng bằng cách chỉnh sửa các tham số cấu hình.
3.2.1. Các đặc điểm của MiMAC
Các đặc điểm của MiMAC có thể kể đến: - Dễ học, dễ triển khai và hỗ trợ.
- Đủ linh hoạt để triển khai trên nhiều dòng vi xử lý và bộ thu phát khác nhau của Microchip.
- Đủ mạnh để thực hiện được hầu hết các ứng dụng tốc độ thấp, phạm vi hẹp.
- Đơn giản nhưng mạnh, module bảo mật với các chế độ bảo mật của nó dành cho các bộ thu phát không có bộ máy bảo mật phần cứng riêng.
- Giao diện lập trình giữa MiMAC và các giao thức không dây Microchip ngắn gọn nhưng mạnh.
- Ảnh hưởng tối thiểu đến dung lượng phần mềm lõi.
3.2.2. Cấu trúc của MiMAC
Lớp MiMAC bao gồm 3 phần chính tách biệt nhưng liên quan chặt chẽ đến nhau. Trong 3 phần này, phần thứ nhất và phần thứ 2 được định nghĩa cho các bộ thu phát sóng có tài nguyên phần cứng hạn chế trong lớp MAC. Phần thứ 3 định nghĩa riêng cho các bộ thu phát sóng của Microchip. 3 phần đó là:
Định dạng khung MiMAC
Định dạng khung sẽ quy định khung sẽ có hình thù như thế nào trên mạng. Về cơ bản định dạng khung MiMAC quyết định khả năng và hiệu quả của MiMAC. Nó sẽ là nền tảng cho 2 phần còn lại trong kiến trúc MiMAC.
Khối bảo mật của MiMAC
Với truyền thông không dây, bản tin được truyền đi qua môi trường mở. Nó tương đối dễ hơn để tiếp nhận thông tin từ giao tiếp không dây so với giao tiếp có dây. Do đó, bảo mật là một vấn đề quan trọng cần xem xét cho các ứng dụng không dây. Khối bảo mật của MiMAC định nghĩa một khối mật mã giá rẻ với khả năng bảo mật mạnh mẽ. Khối bảo mật MiMAC cũng định nghĩa nhiều chế độ bảo mật để làm việc với khối bảo mật theo những yêu cầu khác nhau của các ứng dụng.
Giao diện lập trình vạn năng MiMAC
Giao diện lập trình vạn năng MiMAC làm việc như một trình điều khiển giữa tất cả các bộ thu phát sóng với các giao thức không dây của Microchip. Giao diện này cho phép các bộ thu phát sóng của Microchip làm việc với bất kể giao thức không dây Microchip nào và ngược lại cho phép tất cả các giao thức không dây Microchip làm việc với bất kỳ thiết bị thu phát sóng nào của Microchip.
Các bộ thu phát được Microchip hỗ trợ rất khác nhau về tính năng. Một số bộ thu phát có phần cứng được trang bị tốt ở lớp MAC, bao gồm định dạng khung hoặc/và bộ máy bảo mật riêng. Có những tín năng của phần cứng được tích hợp vào bộ thu phát để phù hợp với tiêu chuẩn. Ví dụ bộ thu phát MRF24J40 của Microchip là một thiết bị như thế, nó được thiết kế phù hợp với tiêu chuẩn IEEE 802.15.4. MiMAC không có ý định điều chỉnh định dạng khung hay khối bảo mật nếu chúng đã được định nghĩa sẵn bởi vì thực nghiệm đã cho thấy các tính năng phần cứng luôn nhanh hơn và tiêu tốn ít tài nguyên hệ thống hơn. Đối với những bộ thu phát này, người dùng nên sử dụng những tính năng phần cứng tích hợp sẵn của bộ thu phát và chỉ sử dụng giao diện lập trình của MiMAC.
Với những bộ thu phát khác, thường có rất ít hoặc không có lớp MAC được định nghĩa ở phần cứng. Đối với những bộ thu phát này, nên sử dụng cả 3 thành phần trong cấu trúc MiMAC. Nó cho phép các bộ thu phát đơn giản này có thể thực hiện đầy đủ các tính năng mạng và truyền thông bằng phần mềm, tuy có phức tạp hơn.
Trong phạm vi của đề tài này, bộ thu phát được sử dụng là MRF24J24MC của Microchip đã tích hợp sẵn định dạng khung và bộ máy bảo mật riêng phù hợp tiêu chuẩn IEEE 802.15.4. Vì thế đề tài sẽ không nghiên cứu sâu hơn về định dạng khung và khối bảo mật mà MiMAC cung cấp cho người dùng. Để tìm hiểu chi tiết, vui lòng tham khảo tài liệu mô tả của Microchip về MiMAC (AN1283).
3.2.3. Giao diện lập trình MiMAC
Cùng với việc chuẩn hóa định dạng khung và khối bảo mật MiMAC thì chuẩn hóa giao diện lập trình MiMAC là bước tiếp theo để chuẩn hóa giao diện giữa lớp MAC của bộ thu phát với các lớp giao thức cao hơn. Như đã thảo luận ở trên, giao diện lập trình vạn năng MiMAC cho phép:
- Khả năng thay thế tất cả các bộ thu phát Microchip trong quá trình phát triển phần mềm.
- Giảm thiểu rủi do trong quá trình phát triển ứng dụng cho nhà phát triển.
- Cân nhắc tiềm năng của các bộ thu sóng phát khác nhau, trong khi vẫn cung cấp một giao diện đơn giản để làm việc với các lớp giao thức bên trên mà không làm tăng dung lượng phần mềm lõi.
Có 2 loại giao diện được định nghĩa để làm việc với các bộ thu phát sóng của Microchip đó là các file cấu hình và các lời gọi hàm.
Đối với các bộ thu phát sóng khác nhau thì giao diện phần cứng, tính năng và thiết lập thanh ghi khác nhau rất nhiều. Đối với những thiết lập chỉ dành riêng cho một
vài bộ thu phát đơn lẻ, một file cấu hình sẽ được định nghĩa. Các thiết lập đó không thay đổi khi ứng dụng chạy và các thiết lập trong file cấu hình sẽ được đặt trong quá trình khởi tạo. Các cấu hình này được quy định và mô tả cụ thể các thay đổi có thể thực hiện bởi từng bộ thu phát. MiMAC không can thiệp và điều chỉnh các thiết lập đó nên chúng ta sẽ không thảo luận về file cấu hình ở chương này.
Với tất cả các giao thức không dây, lời gọi hàm được chia làm 4 loại chính: - Cấu hình.
- Truyền gói tin. - Nhận gói tin.
- Chức năng đặc biệt.
Giao diện lập trình MiMAC định nghĩa một hoặc nhiều lời gọi hàm cho mỗi loại trên. Việc gọi đến các giao diện lập trình đó sẽ thực hiện tất cả các chức năng của bộ thu phát sóng. Sau đây chúng ta sẽ tìm hiểu các giao diện lập trình của MiMAC theo các loại hàm đã nói ở trên.
3.2.3.1. Các hàm cấu hình MiMAC
Các hàm cấu hình lớp MAC được gọi bởi lớp giao thức phía trên nhằm cấu hình hoạt động cho bộ thu phát sóng. Không giống như các thiết lập trong file cấu hình, các thiết lập trong các lời gọi hàm này thay đổi khi chạy ứng dụng không dây. Với những tính năng được hỗ trợ bởi phần cứng của bộ thu phát thì MiMAC sẽ đặt các bit thanh ghi tương ứng trong bộ thu phát. Còn với các tính năng không được phần cứng hỗ trợ, phần mềm lõi MiMAC sẽ xử lý chúng trước khi chuyển giao cho các lớp phía trên. Các hàm cấu hình MiMAC được sử dụng là:
- MiMAC_Init
- MiMAC_SetPower
- MiMAC_SetChannel
- MiMAC_SetAltAddress
MiMAC_Init:
Lời gọi hàm này dùng để khởi tạo hoạt động của lớp MiMAC. Sau lời gọi hàm này, MiMAC sẽ khởi chạy bộ thu phát sóng vô tuyến. Các tham số truyền vào và cú pháp gọi hàm như sau:
- RepeaterMode: cho phép bộ thu phát chuyển tiếp gói tin khi bit Repeat được đặt ở byte điều khiển khung trong tiêu đề MAC.
- PAddrLength: Xác định độ dài của địa chỉ thường trực cho bộ thu phát. Có thể từ 2 đến 8 byte.
- PAddress: con trỏ trỏ đến địa chỉ thường trực của bộ thu phát.
MiMAC_SetPower:
Lời gọi hàm để đặt công suất ra của bộ thu phát. Đây là lời gọi hàm lớp vật lý PHY chứ không phải lớp MiMAC. Ở đây, lớp MiMAC ở đây chỉ truyền thiết lập đến lớp vật lý của bộ thu phát. Cú pháp gọi hàm như sau:
Trong đó tham số outputPower được biểu diễn bằng 1 byte.
MiMAC_SetChannel:
Để thiết lập tần số hoạt động của bộ thu phát. Cú pháp như sau:
Trong đó:
- Channel: là kênh hoạt động, giá trị từ 0-31
- offsetFreq: tham số phụ được dùng để thiết lập tần số trung tâm. offsetFreq không thể lớn hơn khoảng cách giữa 2 kênh liên tiếp.
MiMAC_SetAltAddr:
Dùng để thiết lập địa chỉ mạng thay thế khi một nút không dây gia nhập mạng. Hàm này chỉ được dùng nếu bộ thu phát có hỗ trợ đa địa chỉ và khái niệm PANID. Cú pháp như sau:
3.2.3.2. Các hàm truyền gói tin
Cú pháp của hàm truyền gói tin như sau:
Trong đó:
MAC_TRANS_PARAM: được định nghĩa bằng struct sau:
+ flags: là tập các thiết lập dùng để truyền một gói tin. Các thiết lập trong tham số flags là:
- broadcast: quy định kiểu truyền là broadcast hay unicast. Nếu bit được đặt thì gói tin sẽ được truyền quảng bá và bit destPrsnt sẽ được xóa và địa chỉ đích trong tiêu đề MAC không còn tồn tại.
- secEn: quy định có cần bảo mật tải gói tin hay không. Nếu bit secEn được đặt, tải gói tin sẽ được mã hóa và/hoặc yêu cầu xác thực trước khi gửi đi. - repeat: quy định việc gói tin có cần được chuyển tiếp lại giữa thiết bị gửi và
nhận hay không. Thiết bị chuyển tiếp sẽ chỉ chuyển tiếp gói tin nếu bit được đặt.
- ackReq: được sử dụng bởi đầu nhận để đảm bảo gói tin được truyền đến nơi cần đến. Lớp MiMAC sẽ đảm nhiệm việc gửi khung Acknowledgement ở đầu nhận. MiMAC của thiết bị gửi cũng cần có khả năng gửi lại gói tin nếu không nhận được Acknowledgement trong khoảng thời gian nhất định.
- dstPrsnt: địa chỉ đích trong tiêu đề MAC nếu có (truyền unicast). - sourcePrsnt: địa chỉ nguồn trong tiêu đề MAC.
+ altDestAddr/altSrcAddr: biến boolean cho biết địa chỉ nguồn/đích là địa chỉ thường trực hay địa chỉ thay thế
+ DestPANID: con trỏ trỏ tới PANID của thiết bị đích.
+ DestAddress: con trỏ trỏ tới địa chỉ của thiết bị đích. Điạ chỉ này có thể là thường trực hoặc thay thế phụ thuộc vào giá trị của tham số altDestAddr.
MACPayload: con trỏ trỏ tới vùng nhớ đệm sẽ được truyền.
3.2.3.3. Các hàm nhận gói tin
Cùng với chức năng truyền, một chức năng quan trọng bậc nhất khác của bộ thu phát là chức năng nhận. Bởi vì gói tin có thể nhận được vào bất kỳ lúc nào trong khi phần mềm giao thức phía trên đang chạy, nên sẽ có 2 cách để xử lý bản tin đến:
- Cách thứ nhất là gọi đến một hàm gọi lại và để việc xử lý gói tin cho các tiến trình cao hơn xử lý ngay lập tức. Cách này làm thời gian đáp ứng nhanh hơn nhưng việc dùng đến nhiều hàm ở các lớp khác nhau làm cho ngăn xếp nhanh bị đầy.
- Cách thứ 2 là dự đoán các gói tin đến, lưu chúng vào một biến toàn cục, gán nhãn một sự kiện để lớp giao thức phía trên biết được là gói tin đang tồn tại. Cách này phù hợp hơn với kiểu kiến trúc máy trạng thái của các ngăn xếp Microchip.
Chúng ta sẽ tìm hiểu cách thứ 2 để ứng dụng cho ngăn xếp MiWi PRO.
Để thực hiện được cách làm này, Microchip đã định nghĩa kiểu sau để lưu giữ các thông tin về gói tin:
Ngoài ra:
- SourceAddress: là con trỏ trỏ đến địa chỉ nguồn nếu địa chỉ nguồn tồn tại trong gói tin. Địa chỉ này là địa chỉ thường trực hay thay thế phụ thuộc vào
altSourceAddress.
- Payload: là con trỏ trỏ tới vùng nhớ đệm của MAC Payload. Kích thước của MAC Payload được quy định bởi PayloadSize.
- RSSI và LQI: dùng để quy định các thông số vật lý của gói nhận được. RSSI
qui định cường độ tín hiệu trung bình của gói nhận được, trong khi LQI quy định chất lượng tín hiệu của gói nhận được. RSSI và LQI không được hỗ trợ bởi tất cả các bộ thu phát.
Một khi gói tin được nhận, nội dung gói tin sẽ được đặt vào cấu trúc này và sẵn sàng cho lớp giao thức phía trên xử lý. Lớp giao thức phía trên sẽ định kỳ kiểm tra xem có gói tin nào được nhận hay không, nếu có nó sẽ xử lý gói tin theo cấu trúc được định nghĩa ở trên. Có 2 lời gọi hàm được thực hiện bởi lớp giao thức để xử lý gói tin:
MiMAC_ReceivePackage :
Cú pháp như sau:
Hàm này được gọi để kiểm tra định kỳ xem có gói tin nào được nhận không. Khi hàm này trả về giá trị TRUE thì nội dung cấu trúc MAC_RECEIVED_PACKAGE
sẽđược lấp đầy và sẵn sàng cho lớp giao thức phía trên xử lý.
MiMAC_DiscardPackage :
Hàm này được gọi bởi lớp giao thức phía trên để thông báo cho lớp MiMAC rằng gói tin đã được nhận và xử lý và có thể được hủy. Việc hủy gói tin đã được xử lý là quan trọng để tránh tiêu tốn hết tài nguyên bộ nhớ của vi xử lý. Hàm này không có tham số truyền vào cũng không có giá trị trả về. Nó đơn thuần là một thông báo.
3.2.3.4. Các hàm chức năng đặc biệt
Cùng với chức năng truyền và nhận gói tin thì đa số các bộ thu phát đều có thêm một số tính năng đặc biệt để đảm bảo là chúng có thể làm việc trong những điều kiện tối ưu. Hai chức năng phổ biến rất có giá trị với tất cả các lớp giao thức khả năng thực hiện quét năng lượng và tiết kiệm năng lượng. Những hàm sau đây được định nghĩa để thực hiện 2 chức năng đó:
- MiMAC_ChannelAssessment - MiMAC_PowerStage
MiMAC_ChannelAssessment:
Hàm MiMAC_ChannelAssessment được gọi sẽ thực hiện một phép đánh giá kênh để xác định xem kênh hay tần số có phù hợp cho việc giao tiếp đáng tin cậy hay không. Thao tác này không nên bị nhầm lẫn với thao tác xóa đánh giá kênh CSMA-CA được sử dụng trước khi truyền tin. Thao tác CSMA-CA được thực hiện ở lớp MAC bên dưới trong lời gọi hàm MiMAC_SendPackage để tránh việc truyền một gói tin cùng thời điểm với một nút lân cận đang truyền. Thao tác đánh giá kênh, đôi khi được gọi là quét năng lượng ở các lớp giao thức, chủ yếu được sử dụng để kiểm tra mức độ nhiễu ở các tần số khác nhau để quyết định tần số nào sẽ được sử dụng. Thao tác này