Thông báo! Chúng tôi đang cố gắng khôi phục lại các link download, các bạn vui lòng tải lại sau (dự kiến 10/12/2022 hoàn thành). Cảm ơn các bạn!

UART - Psoc 1

TuanPi | 24.2.15 | | | |
. . Không có nhận xét nào:
I. Giới thiệu.
UART hay USART(Asynchronous Receiver / Transmitter) là viết tắt của cụm từ: Universal Synchronous & Asynchronous serial Reveiver and Transmitter - một giao thức truyền thông nối tiếp đồng bộ và không đồng bộ tiêu chuẩn để trao đổi dữ liệu giữa hai thiết bị. Trong giao thức truyền thông này, dữ liệu được chuyển tuần tự tại một thời điểm. Việc thực hiện này sử dụng một khung gồm 8 bit dữ liệu, một Start bit, một bit chẵn lẻ, và một hoặc nhiều bit stop.
Cần chú ý rằng khái niệm UART thường để chỉ thiết bị phần cứng (device, hardware), không phải chỉ một chuẩn giao tiếp. UART cần phải kết hợp với một thiết bị chuyển đổi mức điện áp để tạo ra một chuẩn giao tiếp nào đó.
Ví dụ: Chuẩn RS232 trên các máy tính cá nhân là sự kết hợp của chip UART và chip chuyển đổi mức điện áp. Tín hiệu từ chip UART thường theo mức TTL: mức logic high là 5, mức low là 0V. Trong khi đó, tín hiệu theo chuẩn RS232 trên máy tính cá nhân thường là -12V cho mức logic high và +12 cho mức low (tham khảo hình 1). Chú ý là các giải thích trong tài liệu này theo mức logic TTL của USART, không theo RS232.

II. UART – Psoc1
Một bit chẵn lẻ với giá trị là 0 hoặc 1,nó được thêm vào một khối dữ liệu cho mục đích phát hiện lỗi. Bit này là tùy chọn. Nó cũng có thể được thiết lập hoặc để lẻ hoặc thậm chí. Những bit thường được sử dụng trong truyền dữ liệu để đảm bảo dữ liệu không bị hỏng trong quá trình chuyển giao. Nếu giao thức truyền dữ liệu được thiết lập để một parity lẻ, mỗi gói dữ liệu phải có một parity lẻ. Nếu nó được thiết lập để mặc, mỗi gói tin phải có tính chẵn. Nếu một gói tin nhận được với chẵn lẻ sai, một lỗi sẽ được phát hiện và các dữ liệu sẽ cần phải được truyền lại. Các bit chẵn lẻ cho mỗi gói dữ liệu được tính toán trước khi dữ liệu được truyền đi.
Các khung dữ liệu UART được thể hiện trong hình 1.
Hình 1. Khung dữ liệu UART
Bởi vì các giao thức UART là không đồng bộ, nó không cần một tín hiệu đồng hồ. Trong giao tiếp UART, tốc độ được xác định bởi tốc độ truyền. Các tốc độ truyền là bằng với số bit truyền trong một giây bao gồm cả bắt đầu và ngừng bit. Đối với truyền dẫn dữ liệu đáng tin cậy và tiếp nhận mà không cần bất kỳ sự mất mát của các bit, cả máy phát và máy thu phải có cùng tốc độ baud. Không phù hợp ở mức độ truyền thường dẫn đến lỗi khung. Tốc độ baud chung là 4800, 9600, 19200, 38400, 57600, và 115.200 nhưng với các tốc độ khác cũng có thể được sử dụng.
Các tính năng và Tổng quan
·        Nhận không đồng bộ và phát
·        Dữ liệu định dạng phù hợp với RS-232 (định dạng nối tiếp dữ liệu)
·        Tốc độ Burst lên đến 6 Mbits / giây
·        Khung dữ liệu bao gồm Start bit, bit chẵn lẻ tùy chọn, và bit stop
·        Optional interrupt on receive register full and transmit buffer empty //
·        Parity, khung phát hiện lỗi
Các UART User Module là một khung 8-bit Asynchronous Receiver Transmitter hỗ trợ RS-232, định dạng dữ liệu truyền thông nối tiếp trên 2 dây. Nhận và định dạng dữ liệu truyền đi bao gồm một bit start, parity tùy chọn, và một bit stop. Được hỗ trợ lập trình bởi các API.
Hình 2. Sơ đồ khối UART

Mô tả chức năng
Các UART User Module thực hiện một máy phát nối tiếp và nhận. Các khối PSoC TX cho chức năng máy phát và các khối PSoC RX cho chức năng thu.
RX và TX hoạt động độc lập. Có thể kiếm soát chúng dễ dàng. Việc kích hoạt và vô hiệu hoá được thực hiện bằng cách sử dụng chức năng API cung cấp.
Các UART User Module đồng hồ được chia sẻ bởi cả hai thành phần RX và TX. Đồng hồ tần số được lựa chọn phải là 8 lần tần số của tốc độ bit dữ liệu cần thiết. Mỗi bit dữ liệu được truyền đi hoặc đòi hỏi 8 chu kỳ đồng hồ đầu vào. Các đồng hồ được cấu hình bằng cách sử dụng biên tập PSoC Designer Device.
Dữ liệu nhận được và truyền là một dòng bit đó bao gồm một bit bắt đầu, 8 bit dữ liệu, một bit chẵn lẻ tùy chọn, và một bit kết thúc. Các chẵn lẻ có thể được thiết lập để không có, chẵn hoặc lẻ, và được thiết lập bằng cách sử dụng PSoC Designer Device Editor hoặc bằng cách sử dụng UART API. RX và TX được thiết lập để cấu hình tương đương nhau.
III. Truyền thông nối tiếp không đồng bộ.
       Truyền thông nối tiếp: giả sử bạn đang xây dựng một ứng dụng phức tạp cần sử dụng nhiều vi điều khiển (hoặc vi điều khiển và máy tính) kết nối với nhau. Trong quá trình làm việc các vi điều khiển cần trao đổi dữ liệu cho nhau, ví dụ tình huống Master truyền lệnh cho Slaver hoặc Slaver gởi tín hiệu thu thập được về Master xử lí…Giả sử dữ liệu cần trao đổi là các mã có chiều dài 8 bits, bạn có thể sẽ nghĩ đến cách kết nối đơn giản nhất là kết nối 1 PORT (8 bit) của mỗi  vi điều khiển với nhau, mỗi line trên PORT sẽ chịu trách nhiệm truyền/nhận 1 bit dữ liệu. Đây gọi là cách giao tiếp song song, cách này là cách đơn giản nhất vì dữ liệu được xuất và nhận trực tiếp không thông qua bất kỳ một giải thuật biến đổi nào và vì thế tốc độ truyền cũng rất nhanh. Tuy nhiên, như bạn thấy, nhược điểm của cách truyền này là số đường truyền quá nhiều, bạn hãy tưởng tượng nếu dữ liệu của bạn có giá trị càng lớn thì số đường truyền cũng sẽ nhiều thêm. Hệ thống truyền thông song song thường rất cồng kềnh và vì thế kém hiệu quả. Truyền thông nối tiếp sẽ giải quyết vần đề này, trong tuyền thông nối tiếp dữ liệu được truyền từng bit trên 1 (hoặc một ít) đường truyền. Vì lý do này, cho dù dữ liệu của bạn có lớn đến đâu bạn cũng chỉ dùng rất ít đường truyền. Hình 2 mô tả sự so sánh giữa 2 cách truyền song song và nối tiếp trong việc truyền con số 187 thập phân (tức 10111011 nhị phân).
Hình 2. Truyền 8 bit theo phương pháp song song và nối tiếp.
       Một hạn chế rất dễ nhận thấy khi truyền nối tiếp so với song song là tốc độ truyền và độ chính xác của dữ liệu khi truyền và nhận. Vì dữ liệu cần được “chia nhỏ” thành từng bit khi truyền/nhận, tốc độ truyền sẽ bị giảm. Mặt khác, để đảm bảo tính chính xác của dữ liệu, bộ truyền và bộ nhận cần có những “thỏa hiệp” hay những tiêu chuẩn nhất định. Phần tiếp theo trong chương này giới thiệu các tiêu chuẩn trong truyền thông nối tiếp không đồng bộ.
       Khái niệm “đồng bộ” để chỉ sự “báo trước” trong quá trình truyền. Lấy ví dụ thiết bị 1 (tb1) kết với với thiết bị 2 (tb2) bởi 2 đường, một đường dữ liệu và 1 đường xung nhịp. Cứ mỗi lần tb1 muốn send 1 bit dữ liệu, tb1 điều khiển đường xung nhịp chuyển từ mức thấp lên mức cao báo cho tb2 sẵn sàng nhận một bit. Bằng cách “báo trước” này tất cả các bit dữ liệu có thể truyền/nhận dễ dàng với ít “rủi ro” trong quá trình truyền. Tuy nhiên, cách truyền này đòi hỏi ít nhất 2 đường truyền cho 1 quá trình (send or receive). Giao tiếp giữa máy tính và các bàn phím (trừ bàn phím kết nối theo chuẩn USB) là một ví dụ của cách truyền thông nối tiếp đồng bộ.
       Khác với cách truyền đồng bộ, truyền thông “không đồng bộ” chỉ cần một đường truyền cho một quá trình. “Khung dữ liệu” đã được chuẩn hóa bởi các thiết bị nên không cần đường xung nhịp báo trước dữ liệu đến. Ví dụ 2 thiết bị đang giao tiếp với nhau theo phương pháp này, chúng đã được thỏa thuận với nhau rằng cứ 1ms thì sẽ có 1 bit dữ liệu truyền đến, như thế thiết bị nhận chỉ cần kiểm tra và đọc đường truyền mỗi mili-giây để đọc các bit dữ liệu và sau đó kết hợp chúng lại thành dữ liệu có ý nghĩa. Truyền thông nối tiếp không đồng bộ vì thế hiệu quả hơn truyền thông đồng bộ (không cần nhiều lines truyền). Tuy nhiên, để quá trình truyền thành công thì việc tuân thủ các tiêu chuẩn truyền là hết sức quan trọng. Chúng ta sẽ bắt đầu tìm hiểu các khái niệm quan trọng trong phương pháp truyền thông này.
       Baud rate (tốc độ Baud): như trong ví dụ trên về việc truyền 1 bit trong 1ms, bạn thấy rằng để việc truyền và nhận không đồng bộ xảy ra thành công thì các thiết bị tham gia phải “thống nhất” nhau về khoảng thời dành cho 1 bit truyền, hay nói cách khác tốc độ truyền phải được cài đặt như nhau trước, tốc độ này gọi là tốc độ Baud. Theo định nghĩa, tốc độ baud là số bit truyền trong 1 giây. Ví dụ nếu tốc độ baud được đặt là 19200 thì thời gian dành cho 1 bit truyền là 1/19200 ~ 52.083us.
       Frame (khung truyền): do truyền thông nối tiếp mà nhất là nối tiếp không đồng bộ rất dễ mất hoặc sai lệch dữ liệu, quá trình truyền thông theo kiểu này phải tuân theo một số quy cách nhất định. Bên cạnh tốc độ baud, khung truyền là một yếu tốc quan trọng tạo nên sự thành công khi truyền và nhận. Khung truyền bao gồm các quy định về số bit trong mỗi lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài ra số lượng các bit trong một data  cũng được quy định bởi khung truyền. Hình 1 là một ví dụ của một khung truyền theo UART, khung truyền này được bắt đầu bằng một start bit,  tiếp theo là 8 bit data, sau đó là 1 bit parity dùng kiểm tra dữ liệu và cuối cùng là 2 bits stop.
       Start bit: start là bit đầu tiên được truyền trong một frame truyền, bit này có chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới.
       Data: data hay dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận. Data không nhất thiết phải là gói 8 bit.
       Parity bit: parity là bit dùng kiểm tra dữ liệu truyền đúng không (một cách tương đối). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity). Parity chẵn  nghĩa là số lượng số 1 trong dữ liệu bao gồm bit parity luôn là số chẵn. Ngược lại tổng số lượng các số 1 trong parity lẻ luôn là số lẻ. Ví dụ, nếu dữ liệu của bạn là 10111011 nhị phân, có tất cả 6 số 1 trong dữ liệu này, nếu parity chẵn được dùng, bit parity sẽ mang giá trị 0 để đảm bảo tổng các số 1 là số chẵn (6 số 1). Nếu parity lẻ được yêu cầu thì giá trị của parity bit là 1. Hình 1 mô tả ví dụ này với parity chẵn được sử dụng. Parity bit không phải là bit bắt buộc và vì thế chúng ta có thể loại bit này khỏi khung truyền (các ví dụ trong bài này tôi không dùng bit parity).
       Stop bits: stop bits là một hoặc các bit báo cho thiết bị nhận rằng một gói dữ liệu đã được gởi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bits là các bits bắt buộc xuất hiện trong khung truyền.
       (Chú ý và gợi ý: khung truyền phổ biến nhất là : 
start bit+ 8 bit data+1 stop bit)
       Sau khi nắm bắt các khái niệm về truyền thông nối tiếp, phần tiếp theo chúng ta sẽ khảo sát cách thực hiện phương pháp truyền thông này trên chip Psoc.

Không có nhận xét nào:

Đăng nhận xét

Lên đầu trang