Mục đích nghiên cứu/mục tiêu nghiên cứu Thiết kế mạch COM ảo được nối vào máy tính thông qua cổng USB, khi kết nối vào máy tính thiết bị này đóng vai trò như một cổng COM và có thể giao
Trang 1ĐỀ TÀI NGHIÊN CỨU KHOA HỌC SINH VIÊN
CHẾ TẠO MẠCH COM ẢO DỰA TRÊN MẠCH PHÁT TRIỂN
Trang 2UỶ BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC SÀI GÒN
BÁO CÁO TỔNG KẾT
ĐỀ TÀI NGHIÊN CỨU KHOA HỌC SINH VIÊN
CHẾ TẠO MẠCH COM ẢO DỰA TRÊN MẠCH PHÁT TRIỂN
Tp Hồ Chí Minh, Tháng 5 Năm 2016
Trang 3MỤC LỤC
BẢN TÓM TẮT ĐỀ TÀI 1
DANH MỤC BẢNG BIỂU 2
DANH MỤC CÁC CHỮ VIẾT TẮT 3
THÔNG TIN KẾT QUẢ NGHIÊN CỨU 4
MỞ ĐẦU 5
1 Lý do chọn đề tài 5
2 Nội dung và bố cục đề tài 7
3 Kết luận 7
CHƯƠNG 1: MÔ HÌNH HOẠT ĐỘNG CỦA MẠCH COM ẢO 8
1.1 Virtual Com Port (VCP) 8
1.2 Giao tiếp giữa VCP (STM32F4) và CP2102 9
1.3 Kết luận 10
CHƯƠNG 2: HỆ THỐNG MẠCH COM ẢO 11
2.1 Mạch phát triển STM32F4-DISCOVERY 11
2.2 Mạch chuyển USB sang UART CP2102 Nạp Pro Mini 17
2.3 Cấu trúc cổng COM 18
2.4 Kết luận 18
CHƯƠNG 3: CÁC CÔNG NGHỆ HỖ TRỢ CHO VIỆC THIẾT LẬP HỆ THỐNG PHẦN MỀM MẠCH COM ẢO 19
3.1 Công nghệ NET (C#) 19
3.1.1 Cấu trúc NET FrameWork 19
3.1.2 Lập trình hệ thống mô phỏng mạch COM ảo 23
3.2 Bộ công cụ lập trình nhúng Keil C 24
3.3 Giao tiếp với khối truyền/thu không đồng bộ đa năng (UART) 26
3.4 VCP (Virtual Com Port) 28
3.5 Kết luận 29
CHƯƠNG 4: KẾT QUẢ NGHIÊN CỨU 30
4.1 Nhận thiết bị 30
Trang 44.2 Truyền và nhận dữ liệu 33
4.3 Kết luận 38
CHƯƠNG 5: KẾT LUẬN VÀ KIẾN NGHỊ 39
5.1 Kết quả đạt được 39
5.2 Kiến nghị 39
5.2.1 Áp dụng thực tế 39
5.2.2 Hướng phát triển 40
TÀI LIỆU THAM KHẢO 41
PHỤ LỤC 42
Trang 51
BẢN TÓM TẮT ĐỀ TÀI CHẾ TẠO MẠCH COM ẢO DỰA TRÊN MẠCH PHÁT TRIỂN
2 Mục đích nghiên cứu/mục tiêu nghiên cứu
Thiết kế mạch COM ảo được nối vào máy tính thông qua cổng USB, khi kết nối vào máy tính thiết bị này đóng vai trò như một cổng COM và có thể giao tiếp với các thiết bị có giao tiếp COM
3 Nhiệm vụ/nội dung nghiên cứu/câu hỏi nghiên cứu
Nghiên cứu các tính năng cũng như các thư viện của board stm32f4-discovery
để phát triển chương trình COM ảo
4 Phương pháp nghiên cứu
Nghiên cứu lý thuyết kết hợp thực tiễn gồm các bước sau:
a) Nghiên cứu dạng COM ảo đang có trên thị trường hiện nay
b) Nghiên cứu chip ARM thông qua board phát triển stm32f4-Discovery
c) Nghiên cứu công cụ lập trình nhúng cho chip ARM đã chọn
d) Thiết kế một COM ảo
5 Kết quả nghiên cứu và các sản phẩm
a) Mạch phát triển stm32f4-Discovery
b) Cơ chế hoạt động của cổng COM
c) Thiết kế mạch COM ảo
Trang 62
DANH MỤC BẢNG BIỂU
Bảng 2.1 Tổng hợp các chân giao tiếp UART và USART của mạch DISCOVERY .12 Bảng 2.2 Cặp chân giao tiếp UART được sử dụng trong đề tài 16
Trang 7STM32F4-3
DANH MỤC CÁC CHỮ VIẾT TẮT
UART Universal Asynchronous Receiver/Transmitter
USART Universal Synchronous/Asynchronous Receiver/Transmitter USB Universal Serial Bus
FCL Framework Class Library
JVM Java Virtual Machine
MSIL Microsoft Intermediate Language
RTOS RealTime Operating Systems
TCP Transmission Control Protocol
Trang 84
THÔNG TIN KẾT QUẢ NGHIÊN CỨU
Đề tài hệ thống mạch COM ảo đã thực hiện được các công việc sau:
Thiết kế hệ thống phần cứng mạch COM ảo gồm các phần sau:
o Mạch phát triển stm32f4-Discovery
o Cơ chế hoạt động của cổng COM
o Thiết kế mạch COM ảo
Xây dựng hệ thống phần mềm mạch COM ảo gồm các phần sau:
Trang 9Ngày nay, do tốc độ truyền dữ liệu chậm hơn so với các cổng mới ra đời nên các cổng nối tiếp đang dần bị loại bỏ trong các chuẩn máy tính hiện nay, chúng được thay thế bằng các cổng có tốc độ nhanh hơn như: USB, FireWire
Cổng nối tiếp thường được tích hợp sẵn trên các máy tính cá nhân từ giữa năm
1990 trong các hệ thống máy tính cá nhân sử dụng CPU thế hệ thứ tư Chúng thường được tích hợp sẵn trên các bo mạch chủ thông qua chip Super I/O (thay cho các chíp UART trước đây) để thuận tiện hơn mà không cần sử dụng các bo mạch riêng cho chúng Tuy nhiên, (ngay như đầu bài này đã nói) ngày nay chúng đã dần biến mất khỏi các hệ thống máy tính cá nhân
Ngày nay rất nhiều máy tính cá nhân nói chung cũng như máy tính xách tay nói riêng đã không còn trang bị cổng nối tiếp nữa, đa số các bo mạch chủ trung và cao cấp cũng dần loại bỏ cổng nối tiếp khiến cho một số người sử dụng đã gặp khó khăn khi còn sử dụng các thiết bị cũ, truyền dẫn dữ liệu cũng như giao tiếp thông tin (chẳng hạn các modem quay số)
Trong vòng 20 năm qua, những tiến bộ vượt bậc của khoa học công nghệ đã mang đến rất nhiều tiện ích, dịch vụ cho người dùng trên toàn thế giới, trong đó có Việt Nam, với chiến lược phát triển những công nghệ tiên tiến nhất, nhằm mục đích đi tắt, đón đầu, tạo ra nền tảng công nghệ cho các ngành và lĩnh vực khác phát triển bền vững
Với những tiện ích ngày càng phong phú, cộng với giá cả ngày càng trở nên rẻ hơn và cạnh tranh hơn, tốc độ truyền dữ liệu ngày càng nhanh hơn Chính vì thế cổng COM không còn được tích hợp trên máy tính ngày nay, mà thay vào đó là máy tính chỉ còn tích hợp cổng USB
Trang 106
USB (Universal Serial Bus) là một chuẩn kết nối tuần tự đa dụng trong máy tính USB sử dụng để kết nối các thiết bị ngoại vi với máy tính, chúng thường được thiết kế dưới dạng các đầu cắm cho các thiết bị tuân theo chuẩn cắm là chạy mà với tính năng cắm nóng thiết bị (nối và ngắt các thiết bị không cần phải khởi động lại hệ thống)
USB có những đặc trưng sau đây:
Cho phép mở rộng 127 thiết bị kết nối cùng vào một máy tính thông qua một cổng USB duy nhất (bao gồm các hub USB)
Những sợi cáp USB riêng lẻ có thể dài tới 5 mét, với những hub, có thể kéo dài tới 30 mét (6 sợi cáp nối tiếp nhau thông qua các hub) tính từ đầu cắm trên máy tính
Với USB 2.0 chuẩn tốc độ cao, đường truyền đạt tốc độ tối đa đến 480 Mbps
Cáp USB gồm hai sợi nguồn (+5V và dây chung GND) cùng một cặp gồm hai sợi dây xoắn để mang dữ liệu
Trên sợi nguồn, máy tính có thể cấp nguồn lên tới 500mA ở điện áp 5V một chiều (DC)
Những thiết bị tiêu thụ công suất thấp (ví dụ: chuột, bàn phím, loa máy tính công suất thấp ) được cung cấp điện năng cho hoạt động trực tiếp từ các cổng USB mà không cần có sự cung cấp nguồn riêng (thậm chí các thiết bị giải trí số như SmartPhone, PocketPC ngày nay sử dụng các cổng USB để sạc pin) Với các thiết bị cần sử dụng nguồn công suất lớn (như máy in, máy quét ) không sử dụng nguồn điện từ đường truyền USB như nguồn chính của chúng, lúc này đường truyền nguồn chỉ có tác dụng như một sự so sánh mức điện thế của tín hiệu Hub có thể có nguồn cấp điện riêng để cấp điện thêm cho các thiết
bị sử dụng giao tiếp USB cắm vào nó bởi mỗi cổng USB chỉ cung cấp một công suất nhất định
Những thiết bị USB có đặc tính cắm nóng, điều này có nghĩa các thiết bị có thể được kết nối (cắm vào) hoặc ngắt kết nối (rút ra) trong mọi thời điểm mà người
sử dụng cần mà không cần phải khởi động lại hệ thống
Trang 11sử dụng phần còn lại
Chính vì vậy, để bắt kịp với thời đại, nâng cao chất lượng dịch vụ, đáp ứng được nhu cầu của người sử dụng, giảm thiểu chi phí sản xuất, tăng cường việc truyền dẫn thông tin, linh hoạt trong quá trình truyền và nhận tín hiệu, ta cần phải có một giải pháp mạch COM ảo, để giúp cho việc truyền và nhận dữ liệu, giao tiếp thông tin trở nên nhanh hơn nhằm đáp ứng kịp thời nhu cầu người sử dụng ngày nay Nhờ đó có thể tăng sức mạnh cạnh tranh trong nền kinh tế mở hiện nay Đây đang là một vấn đề cấp bách đặt ra đối với các nhà cung cấp thiết bị điện tử tại Việt Nam
2 Nội dung và bố cục đề tài
Nội dung đề tài được tổ chức thành các phần chính như sau:
Phần mở đầu: Trình bày lý do và mục tiêu nghiên cứu xây dựng hệ thống mạch COM ảo, truyền dẫn dữ liệu, giao tiếp thông tin
Chương 1: Mô hình hoạt động của hệ thống mạch COM ảo
Chương 2: Hệ thống mạch COM ảo
Chương 3: Các công nghệ hỗ trợ việc thiết lập hệ thống phần mềm mạch COM
ảo
Chương 4: Kết quả nghiên cứu
Chương 5: Kết luận và kiến nghị
3 Kết luận
Nghiên cứu xây dựng hệ thống mạch COM ảo có ý nghĩa rất quan trọng trong việc ứng dụng điện tử viễn thông và công nghệ thông tin để giúp tối ưu hóa việc sử dụng cổng USB trên các máy tính
Trang 128
CHƯƠNG 1: MÔ HÌNH HOẠT ĐỘNG CỦA MẠCH COM ẢO
Chương này sẽ mô tả cụ thể các tính năng, cách thức hoạt động và quá trình truyền và nhận dữ liệu cũng như trao đổi thông tin giữa VCP và CP2102
1.1 Virtual Com Port (VCP)
Để giao tiếp giữa các thiết bị với máy tính không có cổng COM, ta có thể sử dụng các thiết bị chuyển đổi từ USB sang UART như FTDI, CP2102,… để có thể giao tiếp giữa các thiết bị đó với máy tính thông qua cổng USB
Ta sẽ ứng dụng từ các chức năng của STM32F4 Discovery để thực hiện lập trình cho nó trở thành một cổng COM ảo Điều đó có nghĩa là ta sẽ không cần sử dụng các thiết bị chuyển đổi USB sang UART để có thể giao tiếp giữa các thiết bị với máy tính mà STM32F4 Discovery sẽ hiển thị trên máy tính như một cổng COM
Chương trình sẽ cung cấp một cổng COM ảo thông qua cổng micro USB của Board Stm32f4-Discovery và sau khi tiến hành cài đặt STM32 Virtual COM Port Driver sau đó kết nối với máy tính thì trên máy tính sẽ hiển thị nên công COM ảo này
và ta có thể thực hiện truyền tải dữ liệu như một cổng COM
Trang 139
Hình 1.2 Sơ đồ mô tả trạng thái của STM32F4 khi chạy chương trình VCP
CODE: tham khảo tại phụ lục 1 (trang 43)
1.2 Giao tiếp giữa VCP (STM32F4) và CP2102
STM32F4 sẽ nhận dữ liệu tại USB_VCP và sẽ gửi lại dữ liệu đó tới bộ UART4 Ngược lại CP2102 sẽ nhận dữ liệu từ bộ UART4 và sau đó sẽ gửi lại dữ liệu qua USB_VCP
• VCP(STM32F4)
Bắt đầu
Nhận dữ liệu tại USB_VCP
Gửi dữ liệu nhận được tới UART4
Bắt đầu
Kiểm tra cấu hình USB và Driver
Đúng
Hiển thị cổng COM trên máy
tính đồng thời Thực hiện bật
LED xanh và tắt LED đỏ
Sai máy tính đồng thời thực hiện bật Không hiển thị cổng COM trên
LED đỏ và tắt LED xanh
Trang 1410
• CP2102
Hình 1.3 Sơ đồ mô tả cách thức truyền dữ liệu giữa VCP(STM32F4) và CP2102
CODE: tham khảo tại phụ lục 2 (trang 45)
Khi ta kết nối STM32F4 (VCP) và CP2102 bằng cách nối chân PC10 (UART4_TX) của STM32F4 với chân RX của CP2102 và chân PC11 (UART4_RX) của STM32F4 với chân TX của CP2102 thì ra có thể truyền dữ liệu giữa hai thiết bị với nhau thông qua các hàm truyền và nhận dữ liệu
Tại STM32F4 (VCP) sẽ nhận dữ liệu được gửi từ CP2102 thông qua hàm:
TM_USB_VCP_Getc (*) và truyền dữ liệu tới CP2102 bằng hàm SendChar (*) Còn
tại CP2102 sẽ nhận dữ liệu được từ STM32F4 (VCP) thông qua hàm
USART_ReceiveData (*) và truyền dữ liệu tới STM32F4 (VCP) qua hàm TM_USB_VCP_Putc (*)
(*): Tham khảo phụ lục 2 trang 42
1.3 Kết luận
Chương 1 cho chúng ta cái nhìn tổng quát về cơ chế hoạt động cũng như cách thức truyền tải dữ liệu giữa VCP (STM32F4) và CP2102 Hệ thống này gồm 2 khối chương trình chính, mỗi khối đảm nhiệm một tính năng riêng, tuy nhiên chúng có liên lạc mật thiết với nhau trên nền tảng là giao thức TCP để tạo nên một hệ thống truyền dẫn dữ liệu thống nhất
Bắt đầu
Nhận dữ liệu tại UART4
Gửi dữ liệu nhận được tới USB_VCP
Trang 1511
CHƯƠNG 2: HỆ THỐNG MẠCH COM ẢO
Chương 2 sẽ trình bày các tính năng của mạch phát triển chính cũng như chức năng và thông số của module CP2102
2.1 Mạch phát triển STM32F4-DISCOVERY
STM32F4-DISCOVERY giúp khám phá các tính năng của chip ARM nhằm phát triển các ứng dụng một cách dễ dàng Nó bao gồm tất cả tính năng cần thiết cho người mới bắt đầu cũng như người dùng có kinh nghiệm tiếp cận chip ARM một cách nhanh chóng
Hình 2.1 Board mạch stm32F4-DISCOVERY
Trang 1612
STM32F4-DISCOVERY gồm các tính năng sau:
Vi điều khiển STM32F407VGT6 với 1 MB bộ nhớ Flash, 192 KB bộ nhớ ST-LINK / V2 được sử dụng cho việc nạp và debug
Nguồn : được cung cấp thông qua cổng USB hoặc từ một nguồn cung cấp điện
áp 5V bên ngoài
Nguồn cung cấp ra bên ngoài: 3V và 5V
LIS302DL hoặc LIS3DSH, cảm biến chuyển động ST MEMS, 3 trục đầu ra kỹ thuật số gia tốc
MP45DT02, ST MEMS cảm biến âm thanh, microphone kỹ thuật số đa hướng
CS43L22, DAC âm thanh với lớp tích hợp trình điều khiển loa D
LD1 (màu đỏ / màu xanh lá cây) để giao tiếp USB
LD2 (màu đỏ) cho điện 3.3V
Bốn đèn LED dành cho người dùng sử dụng, LD3 (màu cam), LD4 (màu xanh), LD5 (màu đỏ) và LD6 (màu xanh)
2 USB OTG LED LD7 (màu xanh) và VBus LD8 (màu đỏ) quá dòng
Hai nút bấm (USER và RESET)
USB OTG với kết nối micro-AB
STM32F4 bao gồm các bộ giao tiếp UART và USART sau:
Trang 17DCMI_D11
WKUP
USART2_CTS USART4_TX/
ETH_MII_CRS TIM2_CH1_ET TIM5_CH1/
TIMM2_CH2/
ADC123_IN1
TIM5_CH3/
Trang 20Các chân của mạch giao tiếp được sử dụng trong đề tài:
Bảng 2.2 Cặp chân giao tiếp UART được sử dụng trong đề tài
Trang 2117
2.2 Mạch chuyển USB sang UART CP2102 Nạp Pro Mini
Mạch chuyển USB sang UART CP2102 Nạp Pro Mini sử dụng chip CP2102 của hãng SILICON LABS Chip hỗ trợ các loại hệ điều hành phổ biến như: Win8, Win7, Vista, Server 2003, XP, Mac OS - X và các hệ điều hành phổ biến khác
CP2102 không sử dụng thạch anh ngoài như các chip PL2303 Module có sẵn ngõ ra điện áp 3.3V Trên mạch có 6 cổng đầu ra: 3.3V DTR 5V Tx Rx Gnd Trong
đó chân DTR được sử dụng để reset vi điều khiển trong quá trình nạp
Tốc độ tối đa 115200 bps Module có sẵn LED nguồn sáng khi gắn vô máy tính
và LED báo hiệu Tx/Rx sẽ sáng khi module nhận/gửi dữ liệu
Driver tương thích với nhiều hệ điều hành Đã test và hoạt động tốt trên Windows, Mac OS, Linux Riêng với Gnu/Linux, driver đã được biên dịch sẵn trong kernel, bạn không cần cài thêm gì cả
Hình 2.2 Mạch chuyển USB sang UART CP2102 Nạp Pro Mini
Mô tả chân:
5V: nguồn điện áp dương (tối đa 500mA)
DTR: Chân reset để nạp cho vi điều khiển
3.3V: nguồn điện áp dương 3.3V
TXD: chân truyền dữ liệu UART, dùng kết nối đến chân Rx của các module khác, không kết nối trực tiếp đến mức của RS232
Trang 22… Việc trao đổi tín hiệu thông thường qua 2 chân RxD (nhận) và TxD (truyền)
Các phương thức nối giữa DTE và DCE:
Đơn công (simplex connection): dữ liệu chỉ được truyền theo 1 hướng
Bán song công ( half-duplex): dữ liệu truyền theo 2 hướng, nhưng mỗi thời điểm chỉ được truyền theo 1 hướng
Song công (full-duplex): số liệu được truyền đồng thời theo 2 hướng
Định dạng của khung truyền dữ liệu như sau:
Khi không truyền dữ liệu, đường truyền sẽ ở trạng thái mark (điện áp -10V) Khi bắt đầu truyền, DTE sẽ đưa ra xung Start (space: 10V) và sau đó lần lượt truyền
từ D0 đến D7 và Parity, cuối cùng là xung Stop (mark: -10V) để khôi phục trạng thái đường truyền
Trang 233.1 Công nghệ NET (C#)
.NET Framework của Microsoft là một nền tảng lập trình tập hợp các thư viện lập trình có thể được cài thêm hoặc đã có sẵn trong các hệ điều hành Windows Nó cung cấp những giải pháp thiết yếu cho những yêu cầu thông thường của các chương trình điện toán như lập trình giao diện người dùng, truy cập dữ liệu, kết nối cơ sở dữ liệu, ứng dụng web, các giải thuật số học và giao tiếp mạng Ngoài ra, NET Framework còn quản lý việc thực thi các chương trình được viết dựa trên công nghệ NET do đó người dùng cần phải cài NET Framework để có thể chạy các chương trình được viết trên nền NET
Về chức năng, NET Framework có 3 khối chức năng là: Trình diễn (Presentation), Dữ liệu (Data), Giao tiếp (Communication)
Về kỹ thuật, hiện tại Microsoft giới thiệu 4 kỹ thuật mới và nổi bật nhất là: Windows CardSpace (InfoCard), Windows Presentation Foundation (Avalon), Windows Communication Foundation (Indigo), Windows Workflow Foundation (Workflow)
3.1.1 Cấu trúc NET FrameWork
.NET Framework bao gồm ba phần là bộ thực thi ngôn ngữ chung (Common Language Runtime), các lớp lập trình hợp nhất hay còn gọi là các thư viện lớp cơ sở (Base Class Libraries) và một phiên bản cấu thành của Microsoft Active Server Pages gọi là Microsoft ASP.NET Trên thực tế, ASP.NET và Windows Forms là hai thành phần nằm trong Base Class Libraries, nên có thể xem NET Framework bao gồm 2 phần chính là Common Language Runtime (CLR) và NET Framework Class Library (FCL) Một trong các thành phần này đều có vai trò cực kỳ quan trọng trong việc phát triển các dịch vụ và các ứng dụng NET
Trang 2420
3.1.1.1 Common Language Runtime - Bộ thực thi ngôn ngữ chung
Common Language Runtime (gọi tắt là bộ thực thi – CLR) được xây dựng trên các dịch vụ hệ điều hành CLR là nền tảng của NET Framework, nó đảm nhận các công việc sau:
Là công cụ thực thi mã trung gian (tựa JVM)
Biên dịch (Just-in-time compiler)
Thực thi mã nguồn
Quản lý bộ nhớ
Thực thi luồng (Thread execution)
Xử lý lỗi (Error-handling)
Xác nhận mã nguồn an toàn (managed code)
CLR đã được phát triển ở tầm cao hơn so với các runtime trước đây như runtime chẳng hạn, bởi nó đạt được những khả nǎng như tích hợp các ngôn ngữ, bảo mật truy cập mã, quản lý thời gian sống của đối tượng và hỗ trợ gỡ lỗi
VB-Mã được biên dịch và hướng tới CLR có tên “managed code” “Managed code” cung cấp siêu dữ liệu (metadata) cần thiết cho CLR để cung cấp các dịch vụ hỗ trợ đa ngôn ngữ, bảo mật mã, quản lý thời gian sống của đối tượng và quản lý bộ nhớ
Nếu NET Framework tồn tại (và đã được cài đặt) trên một hệ điều hành, thì hệ điều hành đó có thể chạy bất kỳ chương trình NET nào Tính năng giúp một chương trình có thể chạy (không có sửa đổi) trên nhiều hệ điều hành khác nhau được gọi là sự độc lập về nền tảng Code được viết một lần có thể được sử dụng trên mọi loại máy tính mà không sửa đổi, giúp tiết kiệm cả thời gian và tiền bạc
.NET Framework cũng cung cấp mức độ tương tác cao giữa các ngôn ngữ Chương trình viết bằng các ngôn ngữ khác nhau đều được biên dịch thành các phần MSIL khác nhau có thể được kết hợp để tạo ra một chương trình thống nhất MSIL cho phép NET Framework trở thành ngôn ngữ không phụ thuộc, bởi vì các chương trình NET không gắn với một ngôn ngữ lập trình cụ thể nào cả Bất cứ ngôn ngữ nào
có thể được biên dịch sang MSIL được gọi là ngôn ngữ tương thích với NET Danh sách một số ngôn ngữ lập trình khả dụng với NET được liệt kê trong bảng sau:
Trang 25 Common Language Infrastructure (CLI)
Mục đích của Common Language Infrastructure (CLI) là cung cấp một nền tảng ngôn ngữ trung lập để phát triển và thực thi ứng dụng, bao gồm cả chức năng để
xử lý các lỗi, thu gom rác thải (garbage collection), bảo mật và khả năng tương tác Bằng cách thực hiện những khía cạnh cốt lõi của NET Framework trong phạm vi của mình, CLI sẽ không được gắn với một ngôn ngữ duy nhất mà sẽ có mặt trên nhiều ngôn ngữ được hỗ trợ bởi NET framework
Biên dịch trong NET
Common Language Runtime (CLR) là một phần trung tâm của NET Framework thực hiện các chương trình NET
Chương trình được biên dịch vào các hướng dẫn - cụ thể (machine-specific) của máy theo hai bước Đầu tiên, chương trình được dịch thành Microsoft Intermediate Language (MSIL), trong đó xác định các hướng dẫn cho các CLR Code được chuyển đổi thành MSIL từ các ngôn ngữ khác và các nguồn có thể được kết hợp với nhau bằng CLR Các MSIL cho các thành phần của một ứng dụng được đặt vào file thực thi của ứng dụng (được gọi là assembly) Khi ứng dụng thực thi, trình biên dịch (được gọi là biên dịch just-in-time hoặc biên dịch JIT) CLR phiên dịch MSIL trong file thực thi vào mã máy (đối với một nền tảng cụ thể), sau đó mã máy được thực thi trên nền tảng đó MSIL là ngôn ngữ trung gian, là một giải pháp để giúp cho các lập trình viên không cần quan tâm đến việc lập trình bằng ngôn ngữ nào trong bộ NET
Việc biên dịch chương trình sang MSIL giúp chương trình đó có thể chạy trên nhiều máy, nhiều nền tảng khác nhau
Tại sao phải biên dịch 2 lần:
Độc lập với phần cứng
o NET framewwork có thể cài đặt trên nhiều platform
Trang 26Microsoft Foundation Class (MFC) là bộ thư viện mà lập trình viên Visual C++
sử dụng trong khi Java Foundation Class (JFC) là bộ thư viện dành cho các lập trình viên Java Bạn có thể xem NET Framework Class Library (FCL) là bộ thư viện dành cho các lập trình viên NET
Với hơn 80000 lớp đối tượng (với NET 4.0) để gọi thực hiện đủ các loại dịch
vụ từ hệ điều hành, bạn có thể bắt đầu xây dựng ứng dụng bằng Notepad.exe Nhiều người lầm tưởng rằng các môi trường phát triển phần mềm như Visual Studio 98 hay Visual Studio NET là tất cả những gì cần để viết chương trình Thực ra, chúng là những phần mềm dùng làm vỏ bọc bên ngoài Với chúng, bạn sẽ viết được các đoạn lệnh đủ các màu xanh, đỏ, lỗi cú pháp được báo ngay khi đang gõ lệnh, thuộc tính của các đối tượng được đặt ngay cửa sổ properties, giao diện được thiết kế theo phong cách trực quan…
Hầu hết các lớp được gom vào một namespace (không gian tên) gọi là system
3.1.1.3 Sơ lược về NAMESPACE
.NET Framework được tạo bởi từ hàng trǎm lớp (class) Nhiều ứng dụng mà bạn xây dựng trong NET đang tận dụng các lớp này theo cách này hay cách khác Vì
số lượng các lớp là quá lớn, NET Framework tổ chức các lớp này vào một cấu trúc lớp được gọi là một namespace Một namespace có thể là con của một namespace lớn hơn Namespace lớn nhất trong NET Framework là System System là một Namespace cơ sở trong NET Framework Tất cả các namespace được cung cấp trong NET framework bắt đầu với namespace cơ sở này Ví dụ, những lớp phục vụ việc
Trang 2723
truy cập và thao tác dữ liệu được tìm thấy trong namespace System.Data Những ví dụ khác bao gồm System.IO, System.XML, System.Collections, System.Drawing và v.v
Lợi điểm của namespace là phân nhóm các lớp đối tượng, giúp người dùng dễ nhận biết và sử dụng Ngoài ra, namespace tránh việc các lớp đối tượng có tên trùng với nhau không sử dụng được .NET Framework cho phép bạn tạo ra các lớp đối tượng và các namespace của riêng mình Với hơn 80000 tên có sẵn, việc đặt trùng tên lớp của mình với một lớp đối tượng đã có là điều khó tránh khỏi Namespace cho phép việc này xảy ra bằng cách sử dụng một tên đầy đủ để truy xuất đến một lớp đối tượng
Ví dụ, nếu muốn dùng lớp WebControls, bạn có thể dùng tên tắt của nó là WebControls hay tên đầy đủ là System.Web.UI.WebControls
3.1.2 Lập trình hệ thống mô phỏng mạch COM ảo
Chương trình mô phỏng hoạt động của 2 thiết bị COM ảo [cụ thể là thiết bị stm32f4-discovery đã tích hợp chương trình COM ảo (server) và thiết bị CP2102 (client)], sau khi 2 thiết bi kết nối thành công với nhau Tiếp đó sẽ là giao tiếp giữa Client và Server, giống như chương trình chat Đặc điểm ở đây là dùng mô hình TCP, nên khi bạn gửi đi từ Client, sẽ phải chờ trả lời từ Server rồi mới được gửi tiếp
Kết nối Server-Client thông qua TCP
Khi thực thi, server cần được xác định rõ địa chỉ cổng COM và sẽ “lắng nghe” trên một port cụ thể Server sẽ nằm trong trạng thái này cho đến khi client đã kết nối Sau khi cả 2 đều được kết nối với nhau, một kết nối sẽ hình thành cho phép server và client giao tiếp với nhau
Để hiểu rõ hơn ta thực hiện các bước sau để kết nối server và client sử dụng giao thức TCP trong C# (có thể chạy server và client trên cùng một máy)
Server:
1 Thiết lập một cổng COM để bắt đầu giao tiếp với client
2 Start COM để bắt đầu giao tiếp
3 Thực hiện giao tiếp với client
4 Stop COM
Trang 2824
Client:
1 Thiết lập một cổng COM để bắt đầu giao tiếp với server
2 Start COM để bắt đầu giao tiếp
3 Thực hiện giao tiếp với server
4 Stop COM
Ví dụ : Gửi nhận dữ liệu dạng mảng các byte
Lớp NetworkStream và Socket cung cấp các phương thức gửi và nhận dữ liệu dạng mảng các byte Vì vậy bạn cần phải thực hiện các bước chuyển đổi dữ liệu sang dạng byte và ngược lại Trong ví dụ sau tôi sử dụng dữ liệu dạng văn bản ASCII trong console, và dùng các lớp trong namespace System.Text để chuyển đổi
CODE chương trình mô phỏng giữa 2 thiết bị COM ảo tham khảo tại phụ lục 3 (trang 49)
3.2 Bộ công cụ lập trình nhúng Keil C
Giới thiệu
Keil C là công cụ phần mềm hỗ trợ khá đầy đủ giúp người dùng soạn thảo và biên dịch chương trình cho các vi điều khiển thuộc họ ARM và một số họ khác bằng ngôn ngữ C/C++
Giống như tất cả các phần mềm dựa trên μVision IDE Keil, Keil C cung cấp môi trường lập trình mạnh mẽ, dễ sử dụng và dễ dàng tiếp cận giúp phát triển các ứng dụng nhúng Chúng bao gồm các thành phần cần thiết để tạo, debug và kết hợp vi điều khiển với các thiết bị ngoại vi liên quan
4 Debug và hoàn thiện chương trình
5 Download chương trình xuống FLASH ROM hay SRAM của chip
Trang 2925
Thành phần RTOS and Middleware
Các thành phần này được thiết kế để giải quyết các vấn đề về truyền thông và thời gian thực trong hệ thống nhúng Các thành phần này cung cấp một cơ chế giúp tiết kiệm thời gian và rút ngắn chu kỳ phát triển trong khi nó vẫn có thể thực hiện các ứng dụng nhúng mà không cần sử dụng một cơ chế thời gian thực
Hình 3.1: Mô hình RTOS và Middleware
Cấu trúc chương trình đơn giản
Keil C hoạt động giống như các bộ lập trình C chuẩn, khi bắt đầu nó thực thi hàm main Đối với các chương trình nhúng hàm main thường là đoạn code lặp vô tận
Ví dụ:
int counter;
main (void) {
counter = 0;
while (1) { // repeat forever
counter++; // increment counter }
}
Trang 3026
Luân chuyển công việc theo cấu trúc Round-Robin
Round-Robin cho phép thực hiện song song đồng thời một số nhiệm vụ Mỗi công việc được thực hiện trong một thời gian xác định trước Sau khi hết thời gian
thực hiện tác vụ i nó sẽ bắt đầu thực hiện tác vụ i+1 Ví dụ minh họa hoạt động của
cấu trúc round-robin tham khảo tại phụ lục 4 (trang 59)
Các dạng hàm wait
Hàm wait dùng để tạm dừng một công việc và chờ biến cố để tiếp tục công việc của mình Suốt thời tạm dừng này, CPU sẽ thực thi những công việc khác Ví dụ minh họa tham khảo tại phụ lục 5 (trang 60)
Bộ nhớ
Công cụ phát triển Keil C cung cấp quyền truy cập vào tất cả khu vực bộ nhớ với bất kỳ kiến trúc vi điều khiển nào Các biến có thể được gán tường minh tại một không gian vùng nhớ nào đó bằng các khai báo kiểu tường minh hoặc có thể được gán không tường minh dựa vào kiểu vùng nhớ Truy cập vào bộ nhớ dữ liệu nội bộ nhanh hơn so với truy cập vào bộ nhớ dữ liệu bên ngoài, vì vậy nếu có thể ta nên khai các biến sử truy xuất thường xuyên tại vùng nhớ nội bộ và các biến ít truy xuất ở vùng nhớ bên ngoài
3.3 Giao tiếp với khối truyền/thu không đồng bộ đa năng (UART)
Giao tiếp UART là giao tiếp nối tiếp, có các tính năng sau:
Cấp tín hiệu cho các đầu vào bộ điều khiển
Điều khiển đầu ra tín hiệu
Trang 3127
chia sẻ một đường dẫn hoặc nếu có hai đường nhưng cả hai thiết bị chỉ giao tiếp qua một đường ở cùng một thời điểm
Dữ liệu truyền được ghi vào thành 16 byte FIFO và bắt đầu quá trình các khung
dữ liệu với các tham số được xác định trong thanh ghi điều khiển UART Truyền sẽ kết thúc khi dữ liệu trong FIFO là trống
Trong quá trình thu, UART bắt đầu lấy mẫu sau khi nhận một bit khởi động ( đầu vào mức thấp) Khi một word (16 bit) được nhận đủ, nó sẽ được chứa trong FIFO nhận
Có thể không sử dụng tính năng của FIFO nhưng nếu xảy ra lỗi tràn, dữ liệu dư vẫn được chứa trong FIFO và phải đọc ra để xóa FIFO
Thiết lập tốc độ baud của UART được lập trình bởi các thanh ghi chia tốc độ bit UART_LCRM và UART_LCRL
Các ngắt UART
Mỗi UART tạo ra bốn ngắt:
Bộ ngắt trạng thái: dùng để xác nhận khi có bất kỳ sự thay đổi trạng thái nào
Ngắt loại bỏ UART: dùng để xác nhận khi UART được loại bỏ và bit khởi động (mức thấp) được phát hiện trên đường thu Trạng thái này sẽ được xóa nếu UART được kích hoạt hoặc đường thu ở mức cao
Ngắt Rx (ngắt thu dữ liệu): dùng để xác nhận khi một trong các trường hợp sau xảy ra:
Bộ FIFO thu được kích hoạt và bộ FIFO đã chứa nửa hoặc quá nửa (8 byte hoặc nhiều hơn 8 byte)
Bộ FIFO thu không còn trống và không có dữ liệu cho hơn chu kỳ 32 bit
Bộ FIFO thu bị vô hiệu và dữ liệu đã được thu
Ngắt Rx được xóa bằng việc đọc nội dung của FIFO
Ngắt Tx (ngắt truyền dữ liệu): dùng để xác nhận khi một trong các trường hợp sau xảy ra:
Bộ FIFO truyền được kích hoạt và bộ FIFO chứa một nửa hoặc ít hơn một nửa
Trang 3228
Bộ FIFO truyền bị vô hiệu hóa và vùng đệm lưu trữ là trống
Ngắt Tx sẽ được xóa khi chèn vào bọ FIFO hơn quá nửa hoặc ghi vào thanh ghi lưu trữ
Dạng khung truyền
Khung truyền trong giao tiếp UART gồm bốn thành phần, như trong hình
Hình: Khung truyền trong giao tiếp UART
Start bit (1 bit ở mức logic 0): bắt đầu một gói in, đồng bộ xung nhịp clock
Data (có thể là 5, 6, 7 hoặc 8 bit): dữ liệu cần truyền
Parity bit [1 bit: chẵn (even), lẻ (old), mark, space]: bit cho phép kiểm tra lỗi
Stop bit (1 hoặc 2 bit): kết thúc một gói tin
Tốc độ truyền
Tính bằng đơn vị bit/giây: bps (bit per second) hay còn gọi là tốc độ baud
Là số bit truyền trong một giây
Tốc độ tối đa = tốc độ xung nhịp clock/hằng số
Code minh họa khởi tạo và cấu hình cho UART: tham khảo tại phụ lục 6 (trang 61)
3.4 VCP (Virtual Com Port)
Cổng COM hay còn gọi là cổng nối tiếp (Serial port) là một cổng thông dụng được sử dụng ở nhiều loại máy bàn, cổng COM giao tiếp bằng cách "nối tiếp" từng bit một
Để giao tiếp giữa các thiết bị với máy tính không có cổng COM, ta có thể sử dụng các thiết bị chuyển đổi từ USB sang UART như FTDI, CP2102,… để có thể giao tiếp giữa các thiết bị đó với nhau thông qua cổng USB
Ta sẽ ứng dụng từ các chức năng của STM32F4 Discovery để thực hiện lập trình cho nó trở thành một cổng COM ảo Điều đó có nghĩa là ta sẽ không cần sử dụng các thiết bị chuyển đổi USB sang UART để có thể giao tiếp giữa các thiết bị với máy tính mà STM32F4 Discovery sẽ hiển thị trên máy tính như một cổng COM
Trang 3329
Chương trình sẽ cung cấp một cổng COM ảo thông qua cổng micro USB của Board Stm32f4-Discovery và sau khi tiến hành cài đặt STM32 Virtual COM Port Driver sau đó kết nối với máy tính thì trên máy tính sẽ hiển thị nên công COM ảo này
và ta có thể thực hiện truyền tải dữ liệu như một cổng COM
Code minh họa cho việc nhúng chương trình VirtualCOM vào mạch phát triển STM32F4-DISCOVERY: tham khảo tại phụ lục 7 (trang 73)
Trang 3430
CHƯƠNG 4: KẾT QUẢ NGHIÊN CỨU
Từ thông tin về cơ chế hoạt động của hệ thống mạch COM ảo đã nêu ở chương
1, các tính năng về các thiết bị cảm biến đã nêu ở chương 2 và thông tin về các công nghệ được sử dụng trong hệ thống mạch COM ảo đã nêu ở chương 3, chương 4 sẽ đưa
ra các kết quả nghiên cứu đạt được trong đề tài
4.1 Nhận thiết bị
STM32f4-Discovery:
Sau khi đã nạp chương trình VirtualCOM thì thiết bị stm32f4-discovery đã được chuyển thành một cổng COM (COM3)
Hình 4.1: Cổng COM ảo từ stm32f4-discovery
Sau đó mở chương trình mô phỏng COM đã được thiết kế từ C# Chương trình này (C#) gồm 2 phần: COM và Send
COM: dùng để xác nhận cổng COM mà máy tính đã nhận (ở đây máy tính nhận thiết bị là cổng COM3)
Send: truyền và nhận dữ liệu qua thiết bị khác (COM4)
Hình 4.2: Cổng COM3 đã được mở
COM Port: đây là cổng COM của thiết bị stm32f4-discovery
Baud Rate: Là số bit truyền trong một giây Tính bằng đơn vị bit/giây (bps: bit per second) hay còn gọi là tốc độ baud Bên trong UART có hỗ trợ các thanh ghi cho phép xác định các tốc độ làm việc khác, vd: 1200, 2400, 4800, 9600,
19200, 38400,… bps, có thể thiết lập tốc độ baud bằng phần mềm
Nút nhấn Start COM: bắt đầu mở cổng COM (Code tại C#)
privatevoid OpenPort()
Trang 3531
{
try
{
int comPort = int.Parse(txt_COMPort.Text);
int baudRate = int.Parse(txt_BaudRate.Text);
if (InitDeviceCOMPort(comPort, baudRate) == true)
// Xuất ra log file
//log.Error("btn_Start_Click đã phát ra exception ", ex.Message);
}
}
Nút nhấn Stop COM: kết thúc đóng cổng COM (Code tại C#)
privatevoid ClosePort()
Trang 3632
MessageBox.Show("Đã hoàn thành Cổng COM đã được đóng",
"Open", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Đã hoàn thành Không thể đóng cổng COM",
"Open", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
// Xuất ra log file
//log.Error("btn_Stop_Click đã phát ra exception ", ex.Message);
Trang 3733
COM Port: đây là cổng COM của thiết bị cp2102
Baud Rate: Tốc độ baud của cổng COM4 được thiết lập bằng phần mềm thông qua UART4 (PC10: Tx, PT11: Rx)
//cau hinh cho UART4
usartInit.USART_BaudRate=230400;//256000;
usartInit.USART_HardwareFlowControl=USART_HardwareFlowControl_No ne;
Nhập 1 chuỗi dữ liệu và nhấn Send
Hình 4.5a: Truyền dữ liệu qua COM4
Khung gửi dữ liệu (Send):
o Được thiết lập để truyền dữ liệu (code tại C#)
{
STATUS = "";
Trang 3834
byte[] day = BT.getDBytes().ToArray();
UInt16 len = (UInt16)(day.Length);
DoiIntToBytes ITB = new DoiIntToBytes(len);
byte[] dayso = ITB.getBytes().ToArray();
devicePort.Write(dayso, 0, dayso.Length);//goi len
devicePort.Write(day, 0, day.Length);//goi package On
Khung nhận dữ liệu (Receive):
o Được thiết lập để nhận những dữ liệu từ COM3 gửi tới (Code tại C#)
privatevoid DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{