Đề tài Thiết kế core I2C

MỤC LỤC i

DANH MỤC CÁC BẢNG BIỂU iii

DANH MỤC CÁC HÌNH VẼ iii

DANH MỤC CÁC TỪ VIẾT TẮT iii

LỜI NÓI ĐẦU vi

CHƯƠNG 1: NGÔN NGỮ VERILOG VÀ PHẦN MỀM THIẾT KẾ, MÔ PHỎNG 1

1.1 Giới thiệu sơ lược về ngôn ngữ lập trình Verilog [4] 1

1.1.1 Mô tả 1

1.1.2 Tại sao sử dụng Verilog ? 1

1.1.3 Một số qui ước thiết kế [1] 2

1.1.3.1 Cấu trúc chương trình: 3

1.1.3.2 Các kiểu dữ liệu và vùng nhớ: 3

1.1.3.3 Toán tử 4

1.1.3.4 Các cấu trúc điều khiển 6

1.1.3.5 Điều khiển theo sự kiện 7

1.1.3.6 Sự kết hợp giữa nhiều module 8

1.2 Phần mềm thiết kế vi mạch Quartus II [4] 9

1.2.1 Giới thiệu về phần mềm Quartus II 9

1.2.2 Chức năng của phần mềm Quartus II 9

1.2.2.1 Design Entry (Thiết kế ban đầu) 9

1.2.2.2 Tổng hợp (Synthesis) 10

1.2.2.3 Nối dây và định vị các phần tử-Fitting (Placement and Routing) 10

1.2.2.5 Programing and Configuration 10

1.3. Phần mền mô phỏng Modelsim Altera [4] 10

CHƯƠNG 2: CHUẨN GIAO TIẾP I2C VÀ BỘ ĐIỀU KHIỂN BUS I2C PCF8584 11

2.1 Chuẩn giao tiếp I2C [3] 11

2.1.1 Giới thiệu chung về chuẩn giao tiếp I2C 11

2.1.2 Đặc điểm giao tiếp I2C 11

2.1.2.1 Điều kiện START và STOP (START and STOP conditions) 14

2.1.2.2 Định dạng dữ liệu truyền 15

2.1.2.3 Định dạng địa chỉ thiết bị 16

2.1.2.4 Truyền dữ liệu trên bus I2C, chế độ Master - Slave 17

2.1.2.5 Chế độ MultiMaster 19

2.2 Bộ điều khiển bus I2C PCF8584 20

2.2.1 Đặc điểm [2] 20

2.2.2 Sơ đồ và chức năng các chân 22

2.2.3 Miêu tả các thanh ghi [2] 23

2.2.3.1 Thanh ghi địa chỉ nội S0’ 23

2.2.3.2 Thanh ghi đồng hồ S2 23

2.2.3.3 Thanh ghi vector ngắt S3 24

2.2.3.4 Thanh ghi dịch/đệm (shift register/read buffer) dữ liệu S0 25

2.2.4 Truy cập các thanh ghi 28

2.2.5 Giản đồ định thì ở các chế độ hoạt động 29

2.2.6 RESET và STROBE: 31

2.2.7 Cách chọn chế độ giao tiếp 31

2.2.8 Sơ đồ giao tiếp với các vi điều khiển/vi xử lý 33

CHƯƠNG 3: THIẾT KẾ VÀ MÔ PHỎNG LÕI IP CORE MỀM ĐIỀU KHIỂN BUS I2C 34

3.1 Giới thiệu tính năng 34

3.2 Sơ đồ chân 35

3.3 Sơ đồ khối 36

3.3.1 Mô tả chức năng và mục đích các khối 37

3.3.2 Mô tả các thanh ghi 37

3.4 Thiết kế và phân tích các khối 39

3.4.1 Khối cpu_interface 39

3.4.1.1 Tính năng 39

3.4.1.2 Sơ đồ chân 42

3.4.1.3 Mô tả chân 43

3.4.1.4 Giản đồ định thời 45

3.4.2 Khối control 46

3.4.2.1 Tính năng 46

3.4.2.2 Sơ đồ chân 46

3.4.2.3 Mô tả chân 47

3.4.2.4 Quá trình hoạt động : 48

3.4.2.5 Lưu đồ hoạt động của từng trạng thái: 51

3.4.3 Khối i2c_interface 51

3.4.3.1 Tính năng: 51

3.4.3.2 Mô tả chân 52

3.4.3.3 Các trạng thái hoạt động của khối: 54

3.4.3.4 Mô tả hoạt động từng trạng thái: 54

3.4.3.5 Các loại mạch được sử dụng trong khối i2c_interface 56

3.4.3.6 Giản đồ timing hoạt động của khối: 58

3.4.4. Khối compare 60

3.4.4.1 Mô tả chân 60

3.4.4.2 Hoạt động chi tiết của khối compare 61

3.4.5. Khối clock_generator 62

3.4.5.1 Mô tả chân 62

3.4.5.2 Tính năng 63

3.4.6. Khối interrupt 64

3.4.6.1 Mô tả chân 64

3.4.6.2 Mục đích 65

3.4.6.3 Thực hiện 65

3.5 Kết quả mô phỏng 65

3.5.1 Chủ truyền – Tớ nhận (Master Transmitter – Slave Receiver) 65

3.5.2 Chủ nhận – Tớ truyền (Master Receiver - Slave Transmitter) 66

3.5.3 Tiếp tục trao đổi dữ liệu sau khi phát lệnh Stop: 67

3.5.3 Restart khi đang trao đổi dữ liệu: 72

3.5.4 Bus lỗi: 74

CHƯƠNG 4: KẾT LUẬN CHUNG VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 76

4.1 Nhận xét chung 76

4.1.1 Những kết quả đạt được 76

4.1.2 Những giới hạn tồn tại 76

4.2 Hướng phát triển 77

TÀI LIỆU THAM KHẢO 77

 

DANH MỤC CÁC BẢNG BIỂU

Bảng 2.1 Sơ đồ và chức năng chân PCF8584 [2] 22

Bảng 2.2 Thiết lập giá trị đường SCL bằng các bit S21,S20 [2] 24

Bảng 2.3 Giá trị các bit S24, S23, S22 tương ứng với giá trị tần số đồng hồ ở chân CLK [2] 24

Bảng 2.4 Thanh ghi điều khiển/trạng thái S1 [2] 26

Bảng 2.5 Giá trị bit STA-STO 27

Bảng 2.6 Cách truy cập các thanh ghi của PCF8584 29

Bảng 2.7 Các tín hiệu tự động cài đặt bởi PCF8584 khi giao tiếp với vi điều khiển / vi xử lý [2] 32

Bảng 3.1 Sơ đồ chân I2C Core 35

Bảng 3.2 Các thanh ghi 37

Bảng 3.3 Chức năng các bit của thanh ghi S1 control (S1c) 37

Bảng 3.4 Chức năng các bit của thanh ghi S1 status (S1s) 38

Bảng 3.5 Thanh ghi data_buffer (S0d) 39

Bảng 3.6 Mô tả chân khối cpu_interface 43

Bảng 3.7 Giải mã địa chỉ các thanh ghi 44

Bảng 3.8 Mô tả chân khối control 47

Bảng 3.9 Mô tả chân khối i2c_interface 52

Bảng 3.10 Bảng lựa chọn giữa gen_clko và scli 578

Bảng 3.11 Mô tả chân khối compare 601

Bảng 3.12 Mô tả chân khối clock_generetor 623

Bảng 3.13 Bảng chia tần số đường SCL 63

Bảng 3.14 Bảng chia tần số clock hoạt động của Core 634

Bảng 3.15 Mô tả chân khối interrupt 645

 

 

 

doc85 trang | Chia sẻ: lethao | Lượt xem: 2066 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế core I2C, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
n (Standard mode) và chế độ nhanh (Fast mode) [3] Mỗi dây SDA hay SCL đều được nối với điện áp dương của nguồn cấp thông qua một điện trở kéo lên (pullup resistor). Sự cần thiết của các điện trở kéo này là vì chân giao tiếp I2C của các thiết bị ngoại vi thường là dạng cực máng hở (opendrain hay opencollector). Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp, thường dao động trong khoảng 1KΩ đến 4.7KΩ. Trở lại với hình 3.1, ta thấy có rất nhiều thiết bị (ICs) cùng được kết nối vào một bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thiết bị, bởi mỗi thiết bị sẽ được nhận ra bởi một địa chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thời gian kết nối. Mỗi thiết bị có thể hoạt động như là thiết bị nhận hoặc truyền dữ liệu hay có thể vừa truyền vừa nhận. Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó là chủ (master) hay tớ (slave). Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất) để phân biệt, nó còn được cấu hình là thiết bị chủ hay tớ .Tại sao lại có sự phân biệt này ? Đó là vì trên một bus I2C thì quyền điều khiển thuộc về thiết bị chủ . Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa hai thiết bị chủ-tớ giao tiếp thì thiết bị chủ có nhiệm vụ tạo xung đồng hồ và quản lý địa chỉ của thiết bị tớ trong suốt quá trình giao tiếp. Thiết bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong viêc giao tiếp. Hình 2.3 Truyền nhận dữ liệu giữa chủ/tớ [3] Nhìn hình trên ta thấy xung đồng hồ chỉ có một hướng từ chủ đến tớ, còn luồng dữ liệu có thể đi theo hai hướng, từ chủ đến tớ hay ngược lại tớ đến chủ. Về dữ liệu truyền trên bus I2C, một bus I2C chuẩn truyền 8bit dữ liệu có hướng trên đường truyền với tốc độ là 100 kbit/s – Chế độ chuẩn (Standard mode). Tốc độ truyền có thể lên tới 400 kbit/s -Chế độ nhanh (Fast mode) và cao nhất là 3,4 Mbit/s – Chế độ cao tốc (High speed mode). Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau: - Một chủ một tớ (one master – one slave) - Một chủ nhiều tớ (one master – multi slave) - Nhiều chủ nhiều tớ (Multi master – Multi slave) Dù ở chế độ nào, một giao tiếp I2C đều dựa vào quan hệ chủ/tớ. Giả thiết một thiết bị A muốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện như sau: -Thiết bị A (Chủ) xác định đúng địa chỉ của thiết bị B (tớ), cùng với việc xác định địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị tớ -Thiết bị A gửi dữ liệu tới thiết bị B - Thiết bị A kết thúc quá trình truyền dữ liệu Khi A muốn nhận dữ liệu từ B, quá trình diễn ra như trên, chỉ khác là A sẽ nhận dữ liệu từ B. Trong giao tiếp này, A là chủ còn B vẫn là tớ. Chi tiết việc thiết lập một giao tiếp giữa hai thiết bị sẽ được mô tả chi tiết trong các mục dưới đây. 2.1.2.1 Điều kiện START và STOP (START and STOP conditions) START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốn thiết lập giao tiếp với một thiết bị nào đó trên bus I2C. START là điều kiện khởi đầu, báo hiệu bắt đầu của giao tiếp, còn STOP báo hiệu kết thúc một giao tiếp. Hình dưới đây mô tả điều kiện START và STOP. Ban đầu khi chưa thực hiện quá trình giao tiếp, cả hai đường SDA và SCL đều ở mức cao (SDA = SCL = HIGH). Lúc này bus I2C được coi là rỗi (“bus free”), sẵn sàng cho một giao tiếp. Hai điều kiện START và STOP là không thể thiếu trong việc giao tiếp giữa các thiết bị I2C với nhau. Hình 2.4 Điều kiện START và STOP của bus I2C [3] Điều kiện START: một sự chuyển đổi trạng thái từ cao xuống thấp trên đường SDA trong khi đường SCL đang ở mức cao (cao = 1; thấp = 0) báo hiệu một điều kiện START Điều kiện STOP: Một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường SDA trong khi đường SCL đang ở mức cao. Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệu START, bus I2C coi như đang trong trang thái làm việc (busy). Bus I2C sẽ rỗi, sẵn sàng cho một giao tiếp mới sau tín hiệu STOP từ phía thiết bị chủ. Sau khi có một điều kiện START, trong quá trình giao tiếp, khi có một tín hiệu START được lặp lại thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng thái bận. Tín hiệu START và lặp lại START (Repeated START) đều có chức năng giống nhau là khởi tạo một giao tiếp. 2.1.2.2 Định dạng dữ liệu truyền Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền đi tại mỗi cạnh lên của xung đồng hồ trên dây SCL, quá trình thay đổi bit dữ liệu xảy ra khi SCL đang ở mức thấp. Hình 2.5 Quá trình truyền 1 bit dữ liệu [3] Mỗi byte dữ liệu được truyền có độ dài là 8 bit. Số lượng byte có thể truyền trong một lần là không hạn chế. Mỗi byte được truyền đi theo sau là một bit ACK để báo hiệu đã nhận dữ liệu. Bit có trọng số cao nhất (MSB) sẽ được truyền đi đầu tiên, các bit sẽ được truyền đi lần lượt. Sau 8 xung clock trên dây SCL, 8 bit dữ liệu đã được truyền đi. Lúc này thiết bị nhận, sau khi đã nhận đủ 8 bít dữ liệu sẽ kéo SDA xuống mức thấp tạo một xung ACK ứng với xung clock thứ 9 trên dây SDA để báo hiệu đã nhận đủ 8 bit. Thiết bị truyền khi nhận được bit ACK sẽ tiếp tục thực hiện quá trình truyền hoặc kết thúc. Hình 2.6 Dữ liệu truyền trên bus I2C [3] Hình 2.7 Bit ACK, Not-ACK trên bus I2C [3] Một byte truyền đi có kèm theo bit ACK là điều kiên bắt buộc, nhằm đảm bảo cho quá trình truyền nhận được diễn ra chính xác. Khi không nhận được đúng địa chỉ hay khi muốn kết thúc quá trình giao tiếp thiết bị nhận sẽ gửi một xung Not-ACK(SDA ở mức cao) để báo cho thiết bị chủ biết, thiết bị chủ sẽ tạo xung STOP để kết thúc hay lặp lại một xung START để bắt đầu quá trình mới. 2.1.2.3 Định dạng địa chỉ thiết bị Mỗi thiết bị ngoại vi tham gia vào bus I2C đều có một địa chỉ duy nhất, nhằm phân biệt giữa các thiết bị với nhau. Độ dài địa chỉ là 7 bit, điều đó có nghĩa là trên một bus I2C ta có thể phân biệt tối đa 128 thiết bị. Khi thiết bị chủ muốn giao tiếp với ngoại vi nào trên bus I2C, nó sẽ gửi 7 bit địa chỉ của thiết bị đó ra bus ngay sau xung START. Byte đầu tiên được gửi sẽ bao gồm 7 bit địa chỉ và một bít thứ 8 điều khiển hướng truyền. Hình 2.8 Cấu trúc byte dữ liệu đầu tiên [3] Mỗi một thiết bị ngoại vi sẽ có một địa chỉ riêng do nhà sản xuất ra nó quy định. Địa chỉ đó có thể là cố định hay thay đổi. Riêng bit điều khiển hướng sẽ quy định chiều truyền dữ liệu. Nếu bit này bằng “0” có nghĩa là byte dữ liệu tiếp theo sau sẽ được truyền từ chủ đến tớ, còn ngược lại nếu bằng “1” thì các byte theo sau byte đầu tiên sẽ là dữ liệu từ con tớ gửi đến con chủ. Việc thiết lập giá trị cho bit này do con chủ thi hành, con tớ sẽ tùy theo giá trị đó mà có sự phản hồi tương ứng đến con chủ. Hiện nay có thể đánh địa chỉ các thiết bị trên bus I2C dưới dạng 10bit địa chỉ.Việc thực hiện đánh dấu địa chỉ theo khung 10bit được thực hiện nếu sau lệnh START ta gửi chuỗi 11110 (số nhị phân) ra đường SDA. [4] 2.1.2.4 Truyền dữ liệu trên bus I2C, chế độ Master - Slave Việc truyền dữ liệu diễn ra giữa con chủ và con tớ. Dữ liệu truyền có thể theo 2 hướng, từ chủ đến tớ hay ngược lại. Hướng truyền được quy định bởi bit thứ 8 R/W trong byte đầu tiên (byte địa chỉ ) được truyền đi. Hình 2.9 Quá trình truyền dữ liệu [3] • Truyền dữ liệu từ chủ đến tớ (ghi dữ liệu): Thiết bị chủ khi muốn ghi dữ liệu đến con tớ, quá trình thực hiện là: - Thiết bị chủ tạo xung START - Thiết bị chủ gửi địa chỉ của thiết bị tớ mà nó cần giao tiếp cùng với bit R/= 0 ra bus và đợi xung ACK phản hồi từ con tớ - Khi nhận được xung ACK báo đã nhận diện đúng thiết bị tớ, con chủ bắt đầu gửi dữ liệu đến con tớ theo từng byte một. Theo sau mỗi byte này đều là một xung ACK. Số lượng byte truyền là không hạn chế. -Kết thúc quá trình truyền, con chủ sau khi truyền byte cuối sẽ tạo xung STOP báo hiệu kết thúc. Hình 2.10 Ghi dữ liệu từ chủ đến tớ [3] • Truyền dữ liệu từ tớ đến chủ (đọc dữ liệu): Thiết bị chủ muốn đọc dữ liệu từ thiết bị tớ, quá trình thực hiện như sau: - Khi bus rỗi, thiết bị chủ tạo xung START, báo hiệu bắt đầu giao tiếp - Thiết bị chủ gửi địa chỉ của thiết bị tớ cần giao tiếp cùng với bit R/= 1 và đợi xung ACK từ phía thiết bị tớ - Sau xung ACK từ con tớ, thiết bị tớ sẽ gửi từng byte ra bus, thiết bị chủ sẽ nhận dữ liệu và trả về xung ACK. Số lượng byte không hạn chế -Khi muốn kết thúc quá trình giao tiếp, thiết bị chủ gửi xung Not ACK và tạo xung STOP để kết thúc. Hình 2.11 Đọc dữ liệu từ thiết bị tớ [3] • Quá trình kết hợp ghi và đọc dữ liệu: giữa hai xung START và STOP, thiết bị chủ có thể thực hiện việc đọc hay ghi nhiều lần, với một hay nhiều thiết bị. Để thực hiện việc đó, sau một quá trình ghi hay đọc, thiết bị chủ lặp lại một xung START và lại gửi lại địa chỉ của thiết bị tớ và bắt đầu một quá trình mới. Hình 2.12 Quá trình phối hợp đọc/ghi dữ liệu [3] Chế độ giao tiếp MasterSlave là chế độ cơ bản trong một bus I2C, toàn bộ bus được quản lý bởi một master duy nhất. Trong chế độ này sẽ không xảy ra tình trạng xung đột bus hay mất đồng bộ xung clock vì chỉ có một con chủ (master) duy nhất có thể tạo xung clock. 2.1.2.5 Chế độ Multi Master Trên bus I2C có thể có nhiều hơn một con chủ điều khiển bus. Khi đó bus I2C sẽ hoạt động ở chế độ Multi Master. 2.2 Bộ điều khiển bus I2C PCF8584 Hình 2.13 Hình dạng và sơ đồ chân bộ điều khiển bus I2C PCF8584 [2] 2.2.1 Đặc điểm [2] - Chế tạo theo công nghệ CMOS, hoạt động ở tần số 1.5MHz. - Chuyển đổi từ bus song song sang bus I2C và giao tiếp. - Có thể là chủ hay tớ, có khả năng hoạt động ở chế độ nhiều chủ (Multi-Master), giao tiếp ở chế độ khoảng cách xa (long-distance mode, 4 dây). - Thích hợp với các vi xử lý giao tiếp dạng song song như 8049, 8051, 6800, 68000, and Z80. Khi giao tiếp với vi xử lý họ nào thì việc chọn bus sẽ được thực hiện tự động. - Có chứa các vector ngắt khả lập trình. - Điện áp hoạt động từ 4.5-5.5V, nhiệt độ hoạt động từ -40 – 85oC. Hình 2.14 Sơ đồ khối PCF8584 [2] 2.2.2 Sơ đồ và chức năng các chân Sơ đồ chân xem hình 3.13 Bảng 2.1 Sơ đồ và chức năng chân PCF8584 [2] Tên chân Số thứ tự Input /Ouput Chức năng CLK 1 I Xung đồng hồ (điện trở kéo lên nội). SDA/SDA OUT 2 I/O Chân dữ liệu vào/ra của I2C- bus, chân dữ liệu ra ở chế độ long-distance SCL or SCL IN 3 I/O Chân vào/ra của đường SCL(ở chế độ long-distance thì chỉ là chân vào) IACK or SDA IN 4 I Chân vào xác nhận ngắt, ngõ vào dữ liệu ở chế độ long-distance INT or SCL OUT 5 O Chân ra ngắt, chân Ngõ ra xung clock ở chế độ long-distance A0 6 I Chân vào chọn thanh ghi DB0 7 I/O PORT 0 bus 8 bit hai chiều (song song) DB1 8 I/O PORT 1 bus 8 bit hai chiều (song song) DB2 9 I/O PORT 2 bus 8 bit hai chiều (song song) VSS 10 - Nối đất DB3 11 I/O PORT 3 bus 8 bit hai chiều (song song) DB4 12 I/O PORT 4 bus 8 bit hai chiều (song song) DB5 13 I/O PORT 5 bus 8 bit hai chiều (song song) DB6 14 I/O PORT 6 bus 8 bit hai chiều (song song) DB7 15 I/O PORT 7 bus 8 bit hai chiều (song song) RD (DTACK) 16 I/O RD chân vào điều khiển đọc cho các vi xử lý họ 80XX và Z80, DTACK chân ra điều khiển truyền dữ liệu cho họ 68XXX CS 17 I Chân vào chọn chip WR (R/W) 18 I WR chân vào điều khiển ghi cho họ 80XX,chân vào điều khiển R/W cho họ 68XXX RESET/STROBE 19 I/O Ngõ vào reset, ngõ ra xung strobe Vdd 20 - Nguồn cấp điện 2.2.3 Miêu tả các thanh ghi [2] PCF8584 có tổng cộng 5 thanh ghi, chi tiết như sau: 2.2.3.1 Thanh ghi địa chỉ nội S0’ Chứa giá trị địa chỉ riêng của PCF8584. Ngay cả khi PCF8584 đóng vai trò là chủ thì S0’ cũng phải được gán một địa chỉ xác định. Khi cài đặt ban đầu cho PCF8584 thì thanh ghi này phải được gán một giá trị cho dù sau đó nó có được sử dụng hay không. Khi nhận địa chỉ này (giá trị 2 thanh ghi S0 và S0’ được so sánh với nhau) thì bit AAS trong thanh ghi S1 trạng thái sẽ bằng 1. Chú ý là giá trị S0 và S0’ bù nhau từng bit một,chẳng hạn gán giá trị địa chỉ cho PCF8584 là 8’h55 thì giá trị địa chỉ thật sự của PCF8584 là 8’hAA. 2.2.3.2 Thanh ghi đồng hồ S2 Thiết lập giá trị tần số đồng hồ nội và tần số đường SCL Hình 2.15 Thanh ghi đồng hồ S2 [2] Bảng 2.2 Thiết lập giá trị đường SCL bằng các bit S21,S20 [2] Bảng 2.3 Giá trị các bit S24, S23, S22 tương ứng với giá trị tần số đồng hồ ở chân CLK [2] 2.2.3.3 Thanh ghi vector ngắt S3 Chứa giá trị vector ngắt 8 bit có khả năng lập trình được, dùng khi giao tiếp với các vi điều khiển có vector ngắt. Giá trị vector ngắt này sẽ được gửi đến bus song song (DB0-DB7) khi có tín hiệu xác nhận ngắt và bit ENI trong thanh ghi điều khiển S1 được bật (= 1). Giá trị mặc định của thanh ghi ngắt S3 là 00h (ở chế độ giao tiếp với họ 80XX) hoặc 0Fh (ở chế độ giao tiếp với họ 68000). Khi reset, giá trị mặc định của S3 là 00h do chế độ giao tiếp mặc định là với họ 80XX. 2.2.3.4 Thanh ghi dịch/đệm (shift register/read buffer) dữ liệu S0 Hình 2.16 Thanh ghi dịch/đệm (shift register/read buffer) dữ liệu S0 [2] Việc đọc và ghi dữ liệu với bus I2C được thực hiện qua thanh ghi này. S0 bao gồm một thanh ghi dịch và một thanh ghi đệm. Dữ liệu song song được ghi vào thanh ghi dịch, đọc từ thanh ghi đệm. Dữ liệu trao đổi qua bus I2C luôn được dịch vào hay ra thanh ghi dịch. Khi nhận: Dữ liệu từ thanh ghi dịch được sao chép vào thanh ghi đọc, khi đó SCL được giữ mức thấp để không tiếp nhận thêm dữ liệu mới cho tới khi nó được đọc. Khi truyền: Dữ liệu được truyền vào bus I2C ngay khi nó được ghi vào S0 nếu giao tiếp nối tiếp được kích hoạt (bit ES0 trong thanh ghi điều khiển S1 bằng 1). Khi hoạt động ở tần số 8 hay 12 Mhz thì giữa các lần truy cập liên tiếp trên bus song song phải cách nhau 6 chu kỳ đồng hồ, thời gian này sẽ giảm xuống 3 chu kỳ đồng hồ khi hoạt động ở các tần số khác. Để chuyển từ ghi sang đọc ngay lập tức thì phải đọc giá trị byte đầu tiên trong thanh ghi S0 (giá trị địa chỉ con tớ) để phát lệnh nhận byte đầu tiên trong S0. Sau khi có xác nhận thì byte này sẽ được chuyển từ thanh ghi dịch vào thanh ghi đọc, lần đọc tiếp theo mới chuyển chính xác giá trị byte dữ liệu đầu vào bus vi điều khiển. Quá trình này được gọi là “dummy read”. [2] 2.2.3.5 Thanh ghi điều khiển/trạng thái S1 Đây là thanh ghi điều khiển hoạt động của PCF8584 cũng như cho biết trạng thái hiện tại của bus I2C. S1 bao gồm hai thanh ghi 8 bit: Thanh ghi điều khiển chỉ viết và thanh ghi điều khiển chỉ đọc. Bảng 2.4 Thanh ghi điều khiển/trạng thái S1 [2] Control/ Status BITS Mode Control PIN ESO ES1 ES2 ENI STA STO ACK Write only Status PIN 0 STS BER AD0/LRB AAS LAB BB Read only Chi tiết các bit trong thanh ghi S1 Thanh ghi điều khiển S1 - Khi bit này bằng 1 thì tất cả các bit trong S1 trạng thái sẽ bằng 0, có thể coi như reset bằng phần mềm - ESO (Eable Serial Ouput): Bật tắt giao tiếp nối tiếp theo chuẩn I2C (bằng 0 là tắt, bằng 1 là bật). Khi bit này bằng 1, PCF8584 có thể giao tiếp với một thiết bị khác qua bus I2C. - ES1 và ES2: Dùng để chọn thanh ghi mong muốn bằng cách gán các giá trị thích hợp cho 2 bit này. Chi tiết xem bảng 3.6 - ENI: Kích hoạt chân ra ngắt ngoài INT, khi bit PIN trong S1 trạng thái bằng 0, nếu ta gán bit này bằng 1 thì chân INT sẽ gửi tín hiệu ngắt mức thấp ra ngoài. - STA và STO: Điều khiển việc phát lệnh START, REPEATED START và STOP trên bus I2C. Bảng 2.5 Giá trị bit STA-STO STA STO Chế độ hiện tại Chức năng Hoạt động 1 0 Tớ nhận START Phát byte địa chỉ, nếu bit R/W=0 thì chuyển sang chủ truyền, R/W=1 thì chuyển sang chủ nhận (1) 1 0 Chủ truyền REPEATED START Phát byte địa chỉ, nếu bit R/W=0 thì chuyển sang chủ truyền, R/W=1 thì chuyển sang chủ nhận 0 1 Chủ nhận/chủ truyền STOP READ/ STOP WRITE Phát lệnh STOP và chuyển về chế độ tớ truyền 1 1 Chủ DATA CHAINING Phát lệnh STOP, START và byte địa chỉ sau frame dữ liệu cuối cùng mà không phát lệnh STOP(2) 0 0 Bất kỳ NOP Không làm gì cả Bit R/W là bit có trọng số nhỏ nhất (LSB) trong byte địa chỉ Một frame dữ liệu = 8bit dữ liệu +ACK/Not-ACK. - ACK: Điều khiển việc gửi ACK hay Not-ACK ra bus I2C. ACK=1 tự động gửi ACK ra I2C bus sau mỗi byte dữ liệu nhận được, ACK=0 thì gửi Not-ACK sau byte dữ liệu nhận được. Thanh ghi trạng thái S1 - PIN(Pending Interrupt Not): Dùng để kiểm tra đã nhận hay truyền xong 1 byte dữ liệu hay chưa. Bit này bằng 1 khi: + Đọc dữ liệu từ thanh ghi S0 hay ghi dữ liệu lên thanh ghi S0. + STA bằng 1 thì PIN bằng 1. Bit này bằng 0 khi: + Nhận/truyền thành công một byte. + Khi bus lỗi hay khi có điều kiện STOP trên bus I2C (khi PCF8584 là tớ). - STS: Ở chế độ tớ nhận, bit này bằng 1 khi có điều kiện STOP xuất hiện trên bus I2C. - BER: Bằng 1 khi bus lỗi, bus lỗi khi điều kiện START/STOP xuất hiện không đúng chỗ. Khi bit này bằng 1 thì BB bằng 1 và PIN bằng 0. - LRB/AD0: Bit này chỉ có giá trị khi bit PIN bằng 0 + LRB (Last Received Bit): Chứa giá trị bit nhận được cuối cùng trên bus I2C khi AAS bằng 0 (chính là bit ACK). Dùng để kiểm tra ACK hay Not-ACK từ thiết bị nhận. + AD0(Address 0 (General call) ): Khi bit AAS =1, bit này được hiểu là bit AD0, có giá trị là 1 nếu địa chỉ của tớ là 00H (General Call), là 0 nếu tớ có địa chỉ riêng. - AAS (Addressed As Slave): Chỉ có giá trị khi PIN=0. Ở chế độ tớ nhận AAS=1 khi địa chỉ nhận được trùng với địa chỉ riêng lưu trong thanh ghi S0’ hoặc khi nhận được địa chỉ 00H. - LAB (Lost Arbitration): Bit này bằng 1 khi quyền điều phối bus I2C bị mất sang một con chủ khác khi hoạt động ở chế độ nhiều chủ (Multi-Master). - BB (Bus Busy): Đây là cờ chỉ đọc, nó xác định rằng bus I2C đang được sử dụng. Giá trị 1 là bus đang bận và ngược lại. Bit này được set(về 0)/reset (lên 1) bởi điều kiện START/STOP. 2.2.4 Truy cập các thanh ghi Khi thiết lập các giá trị thích hợp ở chân A0 và thanh ghi điều khiển S1 (3 bit ESO, ES1 và ES2) ta có thể truy cập đến thanh ghi mong muốn. Bảng 2.6 Cách truy cập các thanh ghi của PCF8584 Địa chỉ thanh ghi nội A0 ES1 ES2 IACKx Chức năng ESO = 0 ; bus I2C off 1 0 X 1 R/W S1 0 0 0 1 R/W S0’ 0 0 1 1 R/W S3 0 1 0 1 R/W S2 ESO = 1 ; bus I2C on 1 0 X 1 W S1 1 0 X 1 R S1 0 0 0 1 R/W S0 0 0 1 1 R/W S3 X 0 X 0 R S3 Ghi chú: R(READ) đọc,W(WRITE) ghi 2.2.5 Giản đồ định thì ở các chế độ hoạt động Hình 2.17 Giản đồ định thì chế độ chủ truyền [2] Hình 2.18 Giản đồ định thì chế độ chủ nhận [2] Hình 2.19 Giản đồ định thì chế độ tớ truyền [2] Hình 2.20 Giản đồ định thì chế độ tớ nhận [2] 2.2.6 RESET và STROBE: Khi áp xung mức thấp độ dài tối thiểu là 30tclk.vào chân RESET thì PCF8584 sẽ được reset : Tất cả các bit của thanh ghi S1 đều có giá trị là 0 trừ bit PIN và bit BB (có giá trị là 1), các thanh ghi S0’, S3 có giá trị là 00H. Hình 2.21 Định thì RESET (tw4>=30tclk) [2] Ngoài ra chân RESET còn dùng làm ngõ ra STROBE (độ dài khoảng 8tclk). STROBE xuất hiện khi PCF8584 nhận được địa chỉ riêng của nó (hoặc địa chỉ 00H) và theo sau là một lệnh STOP. Hình 2.22 Chu kì STROBE (tw5=8tclk) [2] 2.2.7 Cách chọn chế độ giao tiếp PCF8584 có thể giao tiếp trực tiếp với các vi điều khiển của INTEL như 80XX, hay các vi điều khiển của MOTOROLA như 68000.Việc chọn lựa chế độ giao tiếp (với INTEL hay MOTOROLA) được thực hiện qua việc điều khiển các chân CS, RW(R/W), DTACK. Bảng 2.7 Các tín hiệu tự động cài đặt bởi PCF8584 khi giao tiếp với vi điều khiển/vi xử lý [2] Hình 2.23 Chọn lựa chế độ giao tiếp: (1) Giao tiếp với họ MOTOROLA;(2) giao tiếp với họ INTEL [2] 2.2.8 Sơ đồ giao tiếp với các vi điều khiển/vi xử lý Hình 2.24 Sơ đồ giao tiếp với vi điều khiển 8051/8048 [2] Hình 2.25 Sơ đồ giao tiếp với vi điều khiển 68000 [2] CHƯƠNG 3: THIẾT KẾ VÀ MÔ PHỎNG LÕI IP CORE MỀM ĐIỀU KHIỂN BUS I2C 3.1 Giới thiệu tính năng I2C sử dụng 2 đường truyền tín hiệu 2 chiều (một đường xung đồng hồ SCL và một đường dữ liệu SDA). Lập trình hoạt động ở 4 chế độ : Master Transceiver (Chủ truyền) Master Receiver (Chủ nhận) Slave Transceiver (Tớ truyền) Slave Receiver (Tớ nhận) Hỗ trợ 2 cấp tốc độ tương thích với những dòng chip bus I2C controller ( PCF8584…): 100Kbit/s (standard mode), 400Kbit/s (fast mode). Mỗi thiết bị nối đến bus được định địa chỉ bởi một địa chỉ duy nhất (địa chỉ 7 bit). Và trong mọi thời điểm luôn tồn tại mối quan hệ chủ-tớ (master-slave).Master (con chủ) có thể hoạt động ở chế độ master transmitter hoặc master receiver. Có thể giao tiếp CPU theo chuẩn Intel với độ rộng bus data (dữ liệu) là 8 bit. 3.2 Sơ đồ chân Hình 3.1 Sơ đồ chân I2C Core Mô tả chân: Bảng 3.1 Sơ đồ chân I2C Core Chân Kiểu Mô tả reset_x input Reset hệ thống ( bất đồng bộ) clk input Clock hệ thống cs_x input Chip select a0 input Địa chỉ để truy xuất các thanh ghi của i2c rd_x input Cho phép đọc dữ liệu từ bus song song wr_x input Cho phép ghi dữ liệu lên bus song song iack input Tín hiệu xác nhận ngắt, giải mã địa chỉ các thanh ghi datai[7:0] input Data input scli input SCL input (serial clock ) sdai input SDA input (serial data) datao[7:0] output Data output sclo output SCL output sdao output SDA output irq_x output Tín hiệu báo ngắt về CPU cpu_data_en_o output Cho phép xuất data về CPU i2c_sdao_en output Cho phép xuất data ra bus I2C i2c_sclo_en output Cho phép xuất xung clock ra bus I2C 3.3 Sơ đồ khối Hình 3.2 Sơ đồ khối I2C IP Core 3.3.1 Mô tả chức năng và mục đích các khối cpu_interface: Giao tiếp với CPU, vi điều khiển. Nhiệm vụ chính: đọc và ghi data hoặc lệnh vào các thanh ghi của I2C. i2c_interface: Khối điều khiển bit dùng để giao tiếp với bus I2C. interrupt: Khối tạo tín hiệu ngắt báo về cpu. clock_generator: Tạo xung clock cấp cho bus I2C. control: Nhận lệnh từ thanh ghi lệnh. Sau đó điều khiển khối tất cả các khối còn lại hoạt động đồng thời với quá trình chuyển data từ song song sang nối tiếp và ngược lại. compare: Ở mode slave, khối có chức năng so sánh địa chỉ nhận được từ master với địa chỉ của chính nó chứa trong thanh ghi. 3.3.2 Mô tả các thanh ghi Bảng 3.2 Các thanh ghi Tên thanh ghi Giá trị sau reset Tính năng Mô tả S0d 00H R/W Thanh ghi đệm S0a 00H W Thanh ghi địa chỉ byte S1c 00H W Thanh ghi lệnh S1s 00H R Thanh ghi trạng thái S2 00H W Thanh ghi xung clock Bảng 3.3 Chức năng các bit của thanh ghi S1 control (S1c) Bit Tên Mô tả Tích cực 7 PIN Set bit PIN trong S1s lên mức 1 “1” 6 ESO Cho phép bus I2C “1” 5 : 4 [ES1 :ES2] Định địa chỉ các thanh ghi 3 ENI Cho phép ngắt về CPU “1” 2 STA Tạo trạng thái START hoặc repeated START “1” 1 STO Tạo trạng thái STOP “1” 0 ACK Gửi ACK hoặc Not-ACK Các bit STA, STO, ACK sẽ tự động được xóa khi thực hiện xong 1 lệnh (truyền hoặc nhận 1 byte). Bình thường, các bit này có giá trị 0. Bảng 3.4 Chức năng các bit của thanh ghi S1 status (S1s) Bit Tên Mô tả Tích cực 7 PIN Trạng thái ngắt “0” 6 T/R Trạng thái bus I2C ở mode transmitter(“1”) hay receiver(“0”) 5 STS Nhận điều kiện STOP (slave mode) “1” 4 BER Bus lỗi “1” 3 LRB/AD0 Xác nhận địa chỉ slave nhận đúng khi ASS = 1 Bit ACK nhận được khi ASS = 0. “1” 2 ASS Đang nhận byte địa chỉ từ master. “1” 1 LAB Mất điều phối bus I2C “1” 0 BB Báo trạng thái bus I2C đang bận. “0” Bảng 3.5 Thanh ghi data_buffer (S0d) Bit Mô tả 7:1 Data [7:1] 0 - Trong trường hợp truyền data, đây là bit LSB của data - Trong trường hợp truyền địa chỉ slave, nó là bit RW: ‘1’ : đọc từ slave ‘0’ : ghi vào slave 3.4 Thiết kế và phân tích các khối 3.4.1 Khối cpu_interface 3.4.1.1 Tính năng Khối cpu_interface được dùng để giao tiếp với vi xử lí, vi điều khiển. Mục đích của khối là thiết lập dữ liệu cần phát ra bus I2C cũng như thiết lập các bit điều khiển quá trình hoạt động của bus I2C. Trong quá trình hoạt động, vi điều khiển có thể đọc được dữ liệu mà nó nhận được từ bus I2C cũng như đọc thanh ghi trạng thái để biết được trạng thái hoạt động hiện tại của IC giao tiếp. Khối cpu_interface cũng nhận những tín hiệu như : bus lỗi, bus bận, báo ngắt, mode hoạt động hay data và bit ACK nhận được… Đồng thời khối này cũng truyền các tín hiệu điều khiển xuống các khối bên dưới như: các lệnh START, STOP, tín hiệu xóa ngắt, cho phép bus I2C hoạt động hay truyền các thông số về địa chỉ của bus I2C, tần số hoạt động hay data cần phát ra bus I2C. Khối cpu_interface chứa các thanh ghi S0d, S0a, S1c, S1s, S2. Dữ liệu datai[7:0] sẽ nối trực tiếp đến ngõ vào các thanh ghi: S0d, S0a, S1c, S2. Mỗi thanh ghi sẽ có 1 đường tín hiệu cho phép (en) riêng. Các đường tín hiệu cho phép này là ngõ ra của 1 bộ giãi mã (decoder), trong 1 thời điểm chỉ có 1 tín hiệu cho phép tích cực. Ngõ vào của bộ giải mã này là các tín hiệu: a0, cs_x, wr_x và các bit ES0, ES1, ES2. Dữ liệu datao[7:0] sẽ nối trực tiếp đến ngõ vào các thanh ghi: S0d, S1s. Mỗi thanh ghi sẽ có 1 đường tín hiệu cho phép (en) riêng. Các đường tín hiệu cho phép này là ngõ ra của 1 bộ giãi mã (decoder), trong 1 thời điểm chỉ có 1 tín hiệu cho phép tích cực. Ngõ vào của bộ giải mã này là các tín hiệu: a0, cs_x, rd_x và các bit ES0, ES1, ES2. Hình 3.3 Bộ giải mã các thanh ghi 3.4.1.2 Sơ đồ chân Hình 3.4 Sơ đồ chân khối cpu_interface Mô tả chân Bảng 3.6 Mô tả chân khối cpu_interface Chân Kiể

Các file đính kèm theo tài liệu này:

  • docLuan van tot nghiep_Thi_t k_ 1(cu).doc