Thứ Bảy, 20 tháng 10, 2007

Các chuẩn giao tiếp cổng song song

Các chuẩn giao tiếp cổng song song (Phần cuối)

Cổng song song nâng cao (EPP) được phát minh chung giữa các nhà sản xuất Intel, Xircom và Zenith Data System. Cổng EPP được đưa ra đầu tiên là chuẩn EPP 1.7 và sau đó kể cả chuẩn IEEE 1284 được xuất bản năm 1994.

EPP có hai chuẩn là EPP 1.7 và EPP 1.9. Có sự khác nhau giữa hai chuẩn này mà có thể ảnh hưởng đến sự hoạt động của thiết bị. Gần đây trong các cuộc thảo luận người ta cho rằng chuẩn EPP có thể đạt đến tốc độ 500KB/S đến 2MB/S. Đạt được điều này bởi sự cho phép của phần cứng chứa trong cổng để phát ra tín hiệu bắt tay.

Chuẩn EPP sử dụng nhiều hơn chuẩn ECP. EPP khác ECP, bởi thực tế là cổng EPP phát ra và điều khiển tất cả các tín hiệu truyền đi và nhận lại từ bên ngoài. Cổng ECP trên phương diện khác đòi hỏi bên ngoài phải vượt qua được chiều hướng ngược lại và điều khiển tín hiệu bắt tay. Điều này còn khó hơn cả việc đạt được với mức logic thường, do đó thật sự đòi hỏi phải dành cho bộ điều khiển hay con chip ngoại vi ECP.

Khi sử dụng chuẩn ECP, một điểm khác nhau là đặt cho nhiệm vụ và nhãn cho công việc của mỗi đường. Có một danh sách trong bảng 4 bên dưới. Tên nó thường thấy trong cả chuẩn EPP và cả SPP, tên được thay đổi trong các bảng dữ liệu và trong các tài liệu. Điều này làm cho nó thật sự khó khăn để tập trung vào vấn đề xảy ra một cách chính xác. Do vậy tất cả các tư liệu dưới đây sẽ sử dụng theo tên của chuẩn EPP.

Pin SPP Signal EPP Signal In/Out Function
1 Strobe Write Out Đường này ở mức thấp chỉ ra là ghi, mức cao là đọc
2-9 Data 0-7 Data 0-7 In - Out Bus dữ liệu hai chiều
10 Ack Interupt In Đường ngắt, ngắt xảy ra ở cạnh lên
11 Busy Wait In Dùng cho tín hiệu bắt tay, đối với EPP chu trình có thể bắt đầu khi tín hiệu này ở mức thấp, và kết thúc khi ở mức cao
12 Paper Out/End Spare In Đường này dư không sử dụng trong tín hiệu bắt tay theo chuẩn EPP
13 Select Spare In Đường này dư không sử dụng trong tín hiệu bắt tay theo chuẩn EPP
14 Auto Linefeed Data Strobe Out Đường này ở mức thấp cho biết dữ liệu đường truyền đi
15 Error/Fault Spare In Đường này dư không sử dụng trong tín hiệu bắt tay theo chuẩn EPP
16 Initialize Reset Out Khởi tạo lại, hoạt động ở mức thấp
17 Select Printer Address Strobe Out Khi ở mức thấp chỉ ra rằng chỉ truyền địa chỉ đi
18-25 Ground Ground GND Ground

Các đường Paper Out, Select và Error không được xác định trong tín hiệu bắt tay theo chuẩn EPP. Những đường này có thể được sử dụng trong bất cứ trường hợp nào bởi người sử dụng. Trạng thái của những đường này có thể được xác định ở bất cứ lúc nào bằng cách xem thanh ghi trạng thái SPP. Một điều đáng tiếc là không có đường ra nào dư thừa. Điều này dẫn đến một rắc rối phức tạp thường xảy ra.

Tín hiệu bắt tay EPP

Để mà thực hiện một sự thay đổi giá trị của dữ liệu dùng EPP chúng ta phải tuân theo tín hiệu bắt tay EPP. Do phần cứng làm tất cả các công việc, tín hiệu bắt tay này chỉ yêu cầu để sử dụng cho phần cứng và không sử dụng cho phần mềm đối với SPP. Để bắt đầu một chu kỳ EPP phần mềm chỉ cần thực hiện một hoạt động Vào/Ra để phù hợp với thanh ghi EPP. Để làm rõ vấn đề này ta xem đoạn sau.

Chu kỳ ghi dữ liệu của EPP 1. Chương trình viết ra thanh ghi EPP. (Base + 4) 2. nWrite đang ở mức thấp. Dữ liệu đang nằm trên đường dữ liệu (chân 0–7) 3. nData Strobe được xác nhận nếu chân Wait ở mức thấp (đồng ý thì bắt đầu chu trình). 4. Máy tính báo cho biết là đã nhận được bằng việc chân nWait ở mức thấp (đồng ý thì bắt đầu chu trình). 5. nData Strobe không được xác nhận, hay trả lại trạng thái ban đầu.

Chu kỳ ghi địa chỉ của EPP 1. Chương trình viết địa chỉ ra thanh ghi địa chỉ của EPP. (Base + 3) 2. Write ở mức thấp. (mức thấp chỉ ra hoạt động ở trạng thái ghi) 3. Địa chỉ ở trên đường dữ liệu. (đường D0 – D7) 4. Address Strobe được xác nhận nếu chân Wait ở mức thấp. (đồng ý thì bắt đầu chu trình) 5. Máy tính báo cho biết là đã nhận được dữ liệu bằng việc set chân nWait lên mức cao. (nếu được thì kết thúc chu trình) 6. Chân nAddress Strobe không được xác nhận, hay trả lại trạng thái ban đầu. 7. Chu kỳ ghi địa chỉ EPP kết thúc.

Chu kỳ đọc dữ liệu của EPP 1. Chương trình đọc thanh ghi dữ liệu. (Base + 4) 2. nData Strobe được xác định nếu chân Wait ở mức thấp. (đồng ý thì bắt đầu chu trình) 3. Máy tính chờ báo cho biết là đã nhận được dữ liệu bằng việc set chân nWait lên mức cao. 4. Dữ liệu được đọc từ chân D0 – D7 của cổng song song. 5. Chân tín hiệu nData Strobe không được xác nhận, hay trả lại trạng thái ban đầu. 6. Chu trình đọc dữ liệu của EPP kết thúc.

Chu trình đọc địa chỉ của EPP 1. Chương trình đọc thanh ghi địa chỉ EPP. (Base + 3) 2. nData Strobe được xác định nếu chân Wait ở mức thấp. (đồng ý thì bắt đầu chu trình) 3. Máy tính chờ báo cho biết là đã nhận được bằng việc chân nWait lên mức cao. 4. Dữ liệu được đọc từ chân D0 - D7 của cổng song song. 5. Chân tín hiệu nAddress Strobe không được xác nhận, hay trả lại trạng thái ban đầu. 6. Chu trình đọc địa chỉ của EPP kết thúc.

Chú ý: Nếu thi hành tín hiệu bắt tay theo EPP 1.7 (Pre IEEE 1284) thì đường Data và Address Strobe có thể được xác nhận để bắt đầu một chu trình, bất chấp trạng thái của chân nWait. EPP 1.9 sẽ chỉ bắt đầu một chu trình một lần khi chân Wait ở mức thấp. Cả EPP 1.7 và EPP 1.9 yêu cầu chân Wait phải đưa lên cao để kết thúc chu trình.

Thanh ghi phần mềm của EPP

Cổng EPP cũng có một bộ thanh ghi mới. Tuy nhiên 3 thanh ghi trong số đó là sự kế thừa từ chuẩn cổng SPP (Standard Parallel Port). Bên dưới là một bảng chỉ ra những thanh ghi mới hiện có.

Address Port Name Read/Write
Base + 0 Data Port (SPP) Write
Base + 1 Status Port (SPP) Read
Base + 2 Control Port (SPP) Write
Base + 3 Address Port (EPP) Read/Write
Base + 4 Data Port (EPP) Read/Write
Base + 5 Undefined (16/32bit Transfers) -
Base + 6 Undefined (32bit Transfers) -
Base + 7 Undefined (32bit Transfers) -
Thanh ghi EPP

Bạn có thể nhận thấy rằng 3 thanh đầu tiên giống y hệt như thanh ghi của chuẩn SPP và làm việc tương tự như chức năng của thanh ghi của chuẩn SPP. Do vậy nếu sử dụng cho chuẩn EPP bạn có thể đưa dữ liệu ra ngoài đến đúng địa chỉ Base + 0 một cách chính xác hơn là sử dụng chuẩn SPP (Standard Parallel Port). Nếu nối với máy in và sử dụng kiểu khả năng tương thích thì bạn phải kiểm tra xem nếu cổng đang bận hay không và sau đó xác nhận hay không xác nhận Strobe để dùng cho thanh ghi điều khiển và thanh ghi trạng thái, rồi chờ chân Ack.

Nếu bạn mong muốn liên kết với thiết bị có khả năng tương thích EPP khi đó điều bạn phải làm là đặt bất cứ dữ liệu nào mà bạn muốn gửi ra thanh ghi dữ liệu của EPP ở tại địa chỉ Base + 4 và Card sẽ phát tất cả những yêu cầu tín hiệu bắt tay cần thiết. Cũng như vậy nếu bạn muốn gửi một địa chỉ ra thiết bị, thì bạn phải sử dụng địa chỉ Office + 3.

Cả hai thanh ghi địa chỉ và thanh ghi dữ liệu của EPP đều ở hai trạng thái đọc và viết, do vậy để đọc dữ liệu từ thiết bị bạn có thể sử dụng những thanh ghi tương tự như vậy. Tuy nhiên Card cổng máy in theo chuẩn EPP phải khởi tạo một chu trình đọc khi cả hai chân tín hiệu nData Strobe và thông qua việc sử dụng ngắt và ISR thi hành hoạt động đọc.

Thanh ghi trạng thái có ít nhất một sự thay đổi. Bit 0, bit ngược chiều được đặt trong thanh ghi của chuẩn SPP bây giờ trở thành bit Time-Out của chuẩn EPP. Bit này sẽ được set khi một tín hiệu Time-Out của EPP xảy ra. Điều này xảy ra khi đường nWait không được không xác nhận trong khoảng thời gian xấp xỉ 10us (phụ thuộc vào cổng) của đường IOW (In Out Write) và IOR (In Out Read) đang được xác nhận. Các đường In Out Write và In Out Read là những đường hiện tại trên Bus ISA.

Mode EPP phụ thuộc rất nhiều vào thời gian của Bus ISA. Khi một chu kỳ đọc được thi hành, thì cổng phải có nhiệm vụ dành riêng tín hiệu bắt tay Read/Write và trở về dữ liệu trong vòng một chu kỳ ISA, do vậy cổng này sử dụng IOCHRDY (I/O Channel Ready) trên Bus ISA để đưa vào trạng thái chờ, cho tới khi chu kỳ hoàn thành.

Bây giờ hãy tưởng tượng nếu một chuẩn EPP đọc hay viết thì bắt đầu mà không có một thiết bị ngoại vi nào được kết nối? Cổng này sẽ không bao giờ nhận được sự thừa nhận (nWait), do vậy sự phát ra đòi hỏi phải chờ trạng thái, và chặn đứng máy tính lại. Do vậy cổng EPP thi hành một loại kiểm tra mà Time-Out sau đó xấp xỉ 10us.

Ba thanh ghi Base + 5, Base + 6, Base + 7 có thể được sử dụng cho hoạt động 16 và 32 bit Read/Write nếu có cổng hỗ trợ cho nó. Điều này giúp cho giảm bớt hoạt động cổng In-Out. Cổng song song có thể truyền đi 8 bit vào một thời điểm, mặc dù vậy bất cứ 16 hay 32 bit word được viết ra cổng song song sẽ được chia ra vào trong một byte cỡ một Block và gởi thông qua 8 đường dữ liệu của cổng song song.

Chương trình hoạt động của EPP

Cổng EPP chỉ có hai thanh ghi chính yếu và một cờ trạng thái Time-Out. Trước khi bạn bắt đầu bất kỳ một chu trình EPP bằng việc đọc hay viết ra thanh ghi dữ liệu của EPP và Port địa chỉ, Port phải được định hình một cách cụ thể. Ở trong tình trạng nhàn rỗi. Một cổng EPP nên để cho các đường nAddress Strobe, nData Strobe, nWrite và nReset không hoạt động ở mức cao. Một vài cổng yêu cầu phải set những đường này trước khi bắt đầu bất kỳ một chu trình EPP nào. Do vậy nhiệm vụ đầu tiên của chúng ta là phải khởi tạo giá trị ban đầu cho những đường này sử dụng thanh ghi theo chuẩn SPP. Viết giá trị xxxx0100 cho Port điều khiển để làm việc này.

Trên một vài loại Card, nếu cổng song song đang ở trên mode ngược hướng, một chu trình viết của chuẩn EPP không thể thi hành. Do vậy cũng có sự suy xét để đặt theo mode thuận trước khi sử dụng EPP. Xóa bit thứ 5 thanh ghi điều khiển nên cho một kết quả trong một đoạn chương trình. Bit Time-Out của cổng EPP đã được thảo luận. Khi bit này được set, cổng EPP có thể chức năng không chính xác. Một sự kiện chung là đọc giá trị 0xFF từ một chu trình địa chỉ và chu trình dữ liệu khác. Bit này nên được xóa để đảm bảo cho hoạt động một cách đáng tin cậy và kiểm tra một cách thường xuyên.

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