Có 2 application notes về master và slave được M cung cấp khá chi tiết, 734, 735 thì phải, không nhớ chính xác là cái nào, bạn có thể tìm hiểu thêm về nó.
Tutorial về I2C bằng MPASM thì Phạm Đức Mạnh đã cung cấp rồi thì phải, bạn tìm lại bài viết của mafd47a. Chúc vui. |
Vâng! Đúng như Bác F nói !! Hà đã load tài liệu ASM về I2C này ở đây:
http://www.microchip.com/stellent/id...t6_NextRow=101 +Tài liệu AN735 nói về Master. +Tài liệu AN734 nói về Slave. Theo Hà nghĩ, mình có thể dùng tài liệu này để tham khảo tự viết lệnh I2C mới trong CCS C thì rất tốt. Chương trình viết hay lắm!! Bạn tham khảo đi ! |
|
Anh oi, em chua hieu ve I2C lam va tren dien dan lai chang thay ai noi ve chuyen nay. Trong giao thuc I2C trong CCS co ham i2c_read(), nhung ham do chi la ham doc tu master truyen xuong slave dung ko a? Cai ma tui em dang can la nhu vay: master truyen xuong 10byte (10byte nay chua gia tri la vi tri muon dieu khien dong co rc), sau do slave se doc 10 byte do va xuat gia tri dieu khien cho tung dong co ung voi tung byte da duoc truyen tu master. Nhung em ko thay ai noi ve chuyen nay va co thac mac nhu sau, anh chi dum em nhe
- Du lieu tu master truyen xuong se vao dau trong slave(eeprom?),neu trong eeprom thi lam sao de con slave co the lay ra va su dung cac gia tri do? |
Trích:
Linh viết bài này có một số vấn đề truyền tải chưa được rõ lắm do cách dùng câu chữ mà thôi. F viết lại đôi chút như sau: trong giao tiếp I2C, có thể có (1 master và 1 slave) hoặc (1master và nhiều slave). Đây là giao thức chuẩn. Tuy nhiên, cải tiến giao thức này một chút, chúng ta sẽ có mạng I2C (nhiều master, mỗi con thay phiên làm master).. Chúng ta chỉ đề cập giao tiếp I2C ở dạng chuẩn, tức là có duy nhất 1 master trong mạng. Khi muốn dữ liệu truyền từ A tới B. Có nhiều trường hợp xảy ra như sau: A là master, B là slave: khi đó A sẽ gửi một loạt dữ liệu có định dạng sẵn (các bạn xem lại định dạng I2C), thì trong định dạng đó có bao gồm mấy thông tin như sau (master muốn đọc hay muốn ghi? địa chỉ của slave là bao nhiêu? master có muốn kiểm tra bằng xung ACK, tức là xung báo đã truyền nhận đầy đủ hay không? và nội dung dữ liệu (nếu master muốn ghi), và địa chỉ thanh ghi của slave (nếu master muốn đọc một thanh ghi nào đó trong slave). Nếu A là slave, thì slave không được quyền muốn. Khi nào master kêu nhận thì phải nhận, khi nào master kêu gửi, thì phải gửi. Slave thì không được quyền muốn. Nếu muốn thì làm nô tì I-Sau-ra :D. Còn nếu cả A và B đều là slave, khi master cần truyền dữ liệu từ A sang B, thì Master phải yêu cầu A gửi cho master, nhận xong, master gửi lại cho B. Như vậy vấn đề học giao tiếp I2C, chỉ đơn giản là học cách định dạng dữ liệu trong frame truyền của I2C (mô tả sơ bộ ở trên), và học cách nối mạng giữa mạng điện áp thấp và điện áp cao (vd: một thiết bị I2C 3.3V, kết nối với thiết bị 5V thì làm thế nào?).. kiểu như vậy thôi là các bạn đã có thể thiết kể rất nhiều ứng dụng với I2C, và làm việc với rất nhiều thiết bị rồi. Chúc vui. |
tức là con tớ hoàn toàn bị động trong trường hợp này sao? Nó không thể nào lấy tí thông tin nào đem bán cho các điệp viên để kiếm chút cháo sao? Buồn vậy! Vậy theo anh làm sao giải quyết bài toán mà tụi em đang gặp phải nhỉ:
Một con chủ truyền 10 byte cho con tớ và con tớ có toàn quyền sử dụng 10 byte này?? anh cho em xin ý kiến nhé |
Trích:
|
Trích:
Em vừa đọc cái SPI, thấy con tớ đọc dữ liệu trong thanh ghi SSPBUF ( được master truyền xuống) sau đó xuất ra port B. file: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf Nó làm em nghĩ rằng ko biết mình có thể làm tương tự với i2c ko?? cao huynh nào rành i2c cho ý kiến nhé |
Trích:
Các bạn lưu ý rằng, F nói trường hợp nâng cao, thì chúng ta hoàn toàn có quyền sử dụng mạng Multi Master. Khi bạn setup chip ở chế độ Slave, thì nó thụ động. Nhưng hãy thử nghĩ, tôi làm slave cho mạng này, và làm master của một mạng khác, vậy thì có được không? Vì tôi có tới 40 chân chứ không phải 2 chân. Vậy nếu tôi làm master cho một mạng khác, mà trong đó slave của tôi lại là master của cái mạng mà tôi làm slave :). Hoàn toàn được. Nhưng vấn đề nâng cao ở chỗ nữa, nếu làm như vậy, tôi phải tốn 4 dây để làm 2 mạng. Vấn đề trước đây hình như F đặt ra cho Linh, nhưng Linh chưa giải quyết xong, đó là Multi Master trong một mạng dùng 2 dây thôi. Vấn đề này F tiếp tục treo ở đây chờ người giải quyết. Chúc vui. |
Trích:
Chúc vui. |
Trích:
Em nghĩ rằng dữ liệu truyền từ master sang slave sẽ được lưu tạm trong thanh ghi SSPBUF. Nếu mình lấy ra xài đúng lúc thì sẽ giải quyết được câu hỏi mà em đang đặt ra, được ko anh? |
Anh nói là em đọc lại bài tutorial và frame truyền!
Em chưa đọc kỹ cái bài bạn Thanh Hà gửi về hai cái app mà anh giới thiệu sao? Chúc vui. |
2 Attachment(s)
hình như mình vẫn chưa hiểu nhau (:)) anh Falleaf nhi?
Như anh đã nói việc truyền và đọc là do con chủ ra lệnh Cũng như anh đã nói là dữ liệu sẽ được nằm trong thanh ghi SSPBUF của con tớ ( 1thanh ghi ! ?????) Quan sát hai khung truyền ta thấy rằng việc truyền hay nhận nhiều byte từ master là chuyện nhỏ. Nhưng chuyện không nhỏ ( hay quá nhỏ không ai để ý ) là dữ liệu chạy đi đâu trong con tớ. Khi thằng chủ đưa 10 cô em sang nhà thằng tớ chơi, nhưng thằng tớ nhà nghèo chật hẹp chỉ chứa được một cô thôi, vậy 9 cô kia ở đâu? Không hiểu sao mà khi chủ gọi về thì vẫn đủ 10 cô ?? ( chắc có di động gọi nhau ) Chắc là mấy cô dẫn nhau ra quán Sinh Viên trên đường Bửu Long ngồi đây. Nếu ta biết địa chỉ đường Bửu Long thì hay quá nhỉ :D . Anh Falleaf có biết đường BL nằm đâu ko ? //sau khi đọc application À, thì ra nó nằm trong RXbuff, vậy mà sao anh ko nói sớm |
Khi slave nhận ra địa chỉ của mình thì nó cần đảm bảo xử lý ở mức nhanh nhất để không bị mất dữ liệu, nghĩa là nhận được byte nào thì nó chuyển ngay byte đó ra khỏi bộ đệm. Ngoài ra, nó còn được phép kéo dài xung clock (clock stretching), và gửi NACK để báo hiệu là nó chưa sẵn sàng. Với PIC thì các phần này được xử lý bằng phần cứng. Bạn chịu khó đọc thêm tài liệu đi.
Thân, |
cám ơn trưởng lão
|
Múi giờ GMT. Hiện tại là 08:13 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam