Xem mẫu

  1. Thấy các bạn quan tâm nhiều về vấn đề này nên tôi post sơ lượt về nó vậy: SIMPLE SERIAL INTERFACE (Fig.1a) Bởi vì giao tiếp đòi hỏi đi cáp phức tạp, hầu hết các hệ thống VXL phải truyền thông qua các khoảng cách đáng kể bằng cách dùng kỹ thuật truyền nối tiếp. Hình 1 trình bày một giao tiếp nối tiếp đơn giản kết nối 2 VXL 8031 với nhau. Cách làm này tương tự như cách kết nối 2 máy tính với nhau dùng cáp nối tiếp. Tuy nhiên nó cho phép chỉ 2 CPU truyền thông với nhau. Thêm nhiều CPU có nghĩa là phải thêm nhiều cổng nối tiếp hơn. MULTIPLE PROCESSOR SERIAL INTERFACE (Fig.1b) Hình 1b trình bày cách hỗ trợ nhiều hơn 2 CPU. Như bạn thấy, một 8031 master truyền thông với 2 slave. Cổng lái cực thu hở được thêm vào để cho phép sự truyền thông này thực hiện được. Mỗi slave lái tín hiệu nhận của master bằng một cổng lái cực thu hở, có thể thực hiện bằng cổng logic hoặc transistor rời. Khi không có slave nào đang truyền, tín hiệu master nhận là 1 (bởi vì trạng thái tích cực của cổng nối tiếp là 1). Khi có một trong hai slave truyền, master sẽ nhận được tín hiệu. Việc truyền đến slave không đòi hỏi bộ đệm bởi vì những gì master truyền đi thì cả hai slave đều nhận được. Truyền từ master phải được địa chỉ hoá cho từng slave, và slave chỉ truyền chỉ khi có lệnh từ master. Tiến trình này thường được hoàn chỉnh bằng giao thức truyền nhiều byte, trong đó mỗi khung truyền gồm nhiều byte. Ví dụ: • byte 1 - destination (slave 0 or slave 1) • byte 2 - length • byte 3, etc. - data • last byte - checksum Nếu master cần data từ một slave nó phải yêu cầu slave. Slave không thể truyền data khi không có yêu cầu, bởi vì nhiều salve sẽ cố truyền vào cùng thời điểm. Phương pháp truyền thông này có thể dùng cho nhiều CPU cùng nằm trên 1 board, và cho phép CPU truyền thông bằng 2 dây và GND. CPU không cần phải cùng loại, chỉ cần chúng đều hỗ trợ truyền nối tiếp bất đồng bộ. Dĩ nhiên là tất cả các giao tiếp nối tiếp phải được lập trình để hoạt động ở cùng một tốc độ truyền tải. RS-422 SERIAL INTERFACE (Fig.2) Với khoảng cách xa hơn, mạch điện hình 2 thay thế kết nối cực thu hở bằng kết nối RS422. RS422 sử dụng điện áp vi sai, và một RS422 driver có một ngõ vào và 2 ngõ ra. Ngõ vào driver ở mức 1 sẽ làm cho một trong hai ngõ ra
  2. ở mức 1 và ngõ còn lại là mức 0. Ngõ vào driver ở mức 0 sẽ ngược lại. Không so sánh ngõ vào với GND, RS422 receiver sẽ so sánh 2 dây với nhau. Bởi vì hầu hết nhiễu cảm ứng vào cáp là common-mode và tác động lên cả 2 dây như nhau, kỹ thuật vi sai này sẽ miễn nhiễu tốt nhất. Với RS422, slave phải điều khiển driver tắt và mở để ngăn sự tranh chấp. Như bạn thấy trong hình 2a, cần thêm 1 chân port từ mỗi slave. Một slave muốn truyền phải mở RS422 để truyền, và tắt đi khi kết thúc truyền. Tiến trình phức tạp hơn bởi thực tế là hầu hết UART của VXL có một bít báo cho biết khi nào bộ đệm truyền rỗng, nhưng không báo cho biết khi nào byte cuối cùng đã thực sự được dịch ra khỏi thanh ghi dịch. Để giải quyết vấn đề trên, slave phải thiết lập timer lúc bắt đầu truyền byte cuối cùng và tắt driver khi thời gian kết thúc. Thời gian định thời là khoảng thời gian cần cho việc truyền 1 byte. Một giải pháp khác là cho master gửi một xác nhận sau mỗi thông điệp. Nó báo cho slave biết để tắt driver và giải phóng đường dây chung. Điện trở kéo lên / kéo xuống trên dường dây chung dùng để đảm bảo cho đường dây luôn ở trạng thái đúng (1) khi trong trạng thái nghỉ. Phương pháp giao tiếp RS422 cho một sự miễn nhiễu tốt, nhưng ở một cái giá nào đó. Với giao tiếp này, cần đến 4 dây cộng với 1 dây GND. Ngõ vào driver cực đại là +12/-7 V, nhưng với khoảng cách lớn, có thể điện thế đất ở đểm này khác với điểm kia. Một dây đất chung sẽ giúp đảm bảo giá trị điện thế này không bị vượt quá tầm. Khi dây đất chung được dùng, điểm nối đất chỉ được phép gắn vào một điểm cuối. RS-422 PARTY LINE (Fig.2) Hình 2b trình bày phiên bản mở rộng của RS422, cả hai cặp dây truyền và nhận được kết hợp lại trong một cặp dây. Hệ thống dây chung này cho phép nhiều CPU truyền thông với nhau qua 1 cặp dây (cộng thêm dây đất). Cách dùng giao tiếp RS422 với dây truyền và nhận riêng biệt cho phép data đi theo cả hai hướng cùng lúc. Với cách dùng đường dây chung thì ngược lại, chỉ có thể truyền 1 hướng tại một thời điểm. Do đó cái giá phải trả cho hệ thống đơn giản là băng thông bị giảm. Khó khăn thứ 2 với đường dây chung là việc định thời sẽ phức tạp hơn. Mỗi CPU, bao gồm cả master, phải điều khiển bộ đệm truyền tắt và mở. Giống như giải pháp RS422 4 dây, điện trở đầu cuối cần dùng đến để đảm bảo đường dây ở trong trạng thái đúng (1) khi rảnh. Một hạn chế khác là phục vụ ngắt. Nếu tất cả CPU nhận 1 ngắt cho mỗi byte truyền và nhận, bất cứ khi nào CPU đang truyền ở bất cứ thời điểm cho trước nào, sẽ nhận 2 ngắt cho mỗi byte được truyền. Nó nhận một ngắt cho việc truyền và một ngắt khác khi một byte được nhận. Nhưng không tệ như đã nghĩ. Đôi khi bạn có thể tắt một ngắt trong khi đang truyền. Hoặc, bởi vì ngắt không xảy ra cho đến khi byte đã được nhận hoàn tất, bạn có thể dùng ngắt nhận như một chỉ thị tắt bộ đệm truyền. HIGH-VOLTAGE OPEN-COLLECTOR (Fig.3) Hình 3a trình bày một phương pháp truyền thông cực thu hở qua khoảng cách lớn. Như ví dụ trước, có một đường dây chung cho truyền thông 2 hướng. Tất cả các bộ phát lái dây chung với bộ lái cực thu hở. Điều làm cho cách này khác một ít đó là dây này được kéo lên +12 hoặc +24 V, và data nhận được sẽ được đẩu qua bộ so sánh áp tốc độ cao. Biên độ áp rộng hơn (so sánh với TTL) cho phép truyền qua khoảng cách lớn hơn.
  3. Bộ so sánh áp trong mạch này hoạt động như một bộ đệm với mức ngưỡng 6- hoặc 12- V (tương ứng với hoạt động 12- hoặc 24- V). Cách làm này cho phép miễn nhiễu như RS232, nhưng đường dây chung cực thu hở cho phép truyền 2 hướng trên 1 sợi dây đơn. Một điều quan trọng cần được xem xét cẩn thận trong cách làm này đó là giá trị của điện trở kéo lên. Khi hoạt động ở 12- V, điện trở kéo lên 600 Ohm sẽ tiêu thụ công suất 0.25W khi bất cứ bộ phát nào lái đường dây xuống low. Khi hoạt động ở 24- V, điện trở 2400 sẽ tiêu thụ cùng mức như vậy. Bởi vì rise time của dây chung phụ thuộc vào giá trị của điện trở và dung kháng của đường dây, hoạt động 12- V cho phép truyền thông nhanh hơn. Cũng vậy, nếu bạn có kết nối dài, tốc độ truyền cực đại sẽ bị giới hạn, bởi vì trở kháng / dung kháng sẽ giới hạn rise time của tín hiệu. Nhưng cách làm này cho phép truyền thông đa xử lý qua 1 dây chung (với GND). Tất cả các cách này đều phụ thuộc vào master giám sát slave. Đôi khi bạn cần một slave có thể yêu cầu sự chú ý của master. Hình 5b trình bày phương cách cho phép slave thực hiện điều này.
  4. RS485 (Fig.4 + Fig.5)
  5. I2C BUS (Fig.6) Hầu hết các cách làm trên đều phụ thuộc vào port nối tiếp. Nhưng nếu cổng nối tiếp đã được sử dụng hoặc VXL không có port nối tiếp ? Với các ứng dụng như thế này bạn có thể dùng I2C. Như ở hình 6a, bus I2C sử dụng một dây clock được điều khiển bởi master và một dây dữ liệu hai hướng. Tất cả các VXL lái đường data qua bộ đệm cực thu hở. Khung truyền I2C tiêu biểu bao gồm điều kiện bắt đầu theo sau là địa chỉ, kế tiếp là data. Các byte data được xác nhận bởi receiver. Chuẩn I2C có thể tham khảo ở Philip. I2C thường được dùng để giao tiếp với các linh kiện ngoại vi như EEPROM và LDC driver. Hoàn toàn không bất thường nếu thấy một VXL kết nối với vài linh kiện khác qua bus I2C. Trong một hệ thống như thế, một VXL kết nối vào bus như là một slave. Để truyền đi khoảng cách xa qua cáp, bus I2C phải được đệm bằng cách dùng RS422 hoặc RS485. Bạn có thể dùng bộ đệm cực thu hở, nhưng tất cả các ngõ vào phải dùng schmitttrigger để tránh vấn đề nhiễu. Một mặt hạn chế của I2C là cần giám sát (poll) thường xuyên điều kiện bắt đầu. Linh kiện ngoại vi I2C thực hiện điều này bằng phần cứng, nhưng VXL thực hiện giao tiếp bằng phần mềm sẽ lãng phí nhiều thời gian cho việc giám sát điều kiện bắt đầu. Mạch điện trong hình 6b cung cấp một ngõ ra, có thể tạo ra một ngắt khi điều kiện bắt đầu I2C xảy ra. Nhớ rằng điều kiện bắt đầu được chỉ thị bằng cạnh xuống của của SDA khi SCL là mức cao. Mạch điện bắt giữ điều kiện này F-F. Để mạch này làm việc, đường SDA phải không bị nhiễu, có nghĩa là bạn cần RS422 hoặc schmitt trigger ở ngõ vào nếu bạn muốn truyền thông qua cáp. Đường ngắt sẽ lên mức cao khi có cạnh xuống của SDA, và trở về mức thấp khi có cạnh xuống đầu tiên của SCK. Dĩ nhiên là, sử dụng cách này có nghĩa là bạn cần 3 chân thường và 1 chân ngắt. Và bạn cũng cần đáp ứng ngắt thật nhanh để tránh bị mất bít. Điều cần xem xét khi thực hiện I2C bằng phần mềm đó là thông lượng. Bus I2C có thể chạy ở tốc độ lên đến 100 kBps. Nhưng bởi vì mỗi linh kiện trên bus phải nhận và giải mã mỗi thông điệp, tốc độ xung nhịp bị giới hạn ở tốc độ của linh kiện chậm nhất. Nếu bạn thêm vào một slave I2C phần mềm vào thiết kế của bạn, thông lượng tổng thể sẽ bị kéo xuống thấp hơn. Nếu bạn kết hợp kết hợp I2C trên board với kết nối VXL slave bên ngoài qua cáp, bạn cần đệm tín hiệu I2C trước khi cho nó rời khỏi master board. Tuy nhiên có thể linh kiện đệm onboard không thể đảm bảo cho việc truyền qua khoảng cách xa. Cách đơn giản nhất là để cho master kiểm soát các bộ đệm SDA offboard. Master biết linh kiện nào đang nói, do đó nó có thể cho phép bộ đệm offboard khi linh kiện này đang nói. Cách này cần phải có thêm đường tín hiệu kiểm soát từ master đến bộ đệm offboard.
nguon tai.lieu . vn