Thông báo

Collapse
No announcement yet.

cần pro giúp đỡ về pic18f2550 !

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #46
    bạn học hệ nào cũng vậy không quan trọng đại học hay cao đẳng, kiến thức trên trường chỉ là cơ bản bạn muốn hiểu biết nhiều hơn thì phải học nhiều hơn nữa. firmware bạn có thể hiểu nom na là lập trình phụ thuộc vào phần cứng, như cái USB mình đang làm là lập trình cho pic giao tiếp với pc dựa vào các thanh ghi USB mà pic hổ trợ

    Comment


    • #47
      minh_cly chém dữ quá.1 ngày làm xong .xỉu.đòi làm trong 1 ngày.



      ---------------------Mọi thứ hôm nay ta làm được không phải là ta giỏi mà đó là một quá trình một thời gian dài-------------------------
      , , ,

      Comment


      • #48
        Nguyên văn bởi rptdnmqs Xem bài viết
        minh_cly chém dữ quá.1 ngày làm xong .xỉu.đòi làm trong 1 ngày.



        ---------------------Mọi thứ hôm nay ta làm được không phải là ta giỏi mà đó là một quá trình một thời gian dài-------------------------
        Sorry, chém là cái tật của em. Nhưng cái USB ko đến nỗi mấy tháng đâu nhễ.
        Computer Science major - Vietnamese-German University
        Sponsored by

        Comment


        • #49
          Nguyên văn bởi minh_cly Xem bài viết
          Sorry, chém là cái tật của em. Nhưng cái USB ko đến nỗi mấy tháng đâu nhễ.
          bác viết thử firmware cho USB đi rồi biết ^^

          Comment


          • #50
            Nguyên văn bởi thelaxong Xem bài viết
            bác viết thử firmware cho USB đi rồi biết ^^
            Chắc tại bác muốn viết ra cái CCS mới, còn em muốn chộp giật nhanh cho nó nóng. Rồi làm mấy chuyện khác.
            Computer Science major - Vietnamese-German University
            Sponsored by

            Comment


            • #51
              hôm nay đẹp trời ( ở HCM nóng gần chết ), em xin phép viết một bài hướng dẫn về viết firmware cho USB dùng pic18f25550/pic18f4550 ( mong các pro đi trước chỉnh sửa giúp em để em có thể hoàn thiện kiến thức, đừng chém em tội nghiệp em, em cũng chỉ muốn đóng góp công sức vào diễn đàn thôi ).
              Xin nói sơ qua kết quả mình đạt được tại thời điểm này là firmware mình viết ra chỉ mới giao tiếp thành công với PC tức là khi cắm pic18f2550 vào thì PC nó nhận thành công và báo là thiết bị có thể hoạt động ( mình chưa truyền dữ liệu xuống pic được do chưa viết được driver và ứng dụng cho nó ^^ ).
              Mọi việc xin bắt đầu từ đây:
              Trước tiên mình xin nhắc lại một số kiến thức về USB, mình chỉ giới thiệu sơ về các bước ban đầu cần thiết để mô tả thiết bị còn các định nghĩa khác thì các bạn đọc tài liệu sẽ rõ:
              Đầu tiên là về lý thuyết của USB
              1. Để một thiết bị có thể thực hiện giao tiếp USB với Pc thì thiết bị phải gửi thành công các mô tả như: thiết bị, cầu hình, giao diện, endpoint...

              một thiết bị có thể có nhiều giao diện và một giao diện có thể có nhiều endpoint. Trong bài này mình chỉ dùng 1 giao diện và endpoint mặc định là endpoint 0 để thực hiện việc gửi các mô tả ban đầu. Vậy giao diện và endpoint là gì ? giao diện là nơi chứa các endpoint , các enpoint là nơi chứa nội dung để gửi lên host hoặc nhận dữ liệu từ host gửi về.
              2. Bạn phải xác định về loại tốc độ mà thiết bị của bạn sẽ sử dụng như: low-speed, full-speed, high-speed, sau khi xác định loại tốc độ thì bạn phải tìm các bảng mô tả phù hợp với loại tốc độ bạn dùng và các điện trở kéo lên phù hợp với loại tốc độ đó.
              3. 9 bước liệt kê thiết bị của host trong tài liệu usb-in-a-nutshell ( 9 bước này rất quan trọng các bạn nên đọc kỹ ), trong bước 3 host hỏi 64byte mô tả thiết bị đầu tiên các bạn chỉ cần gửi 8 byte chỗ này là được. Lưu ý rằng khi lắp mạch thực, có thể host yêu cầu số lượng byte gửi lên sẽ khác 1 chút so với 9 bước trong usb-in-a-nutshell
              4. Các tài liệu cần phải đọc là: usb-in-a-nutshell, usb 2.0 ( chapter 9 ), datasheet pic18f2550, và cái này http://www.usbmadesimple.co.uk/ums_4.htm tài liệu tham khảo là usb complete
              Đối với pic 18f2550:
              Tất nhiên là phải đọc datasheet của nó rồi, tuy nhiên phải đọc đọc kỹ về các thanh ghi BDSTAT cái thanh ghi này rất rắc rối. Chip 18f2550 hổ trợ 16 endpoint ( 0 -> 15) mỗi endpoint sẽ có 2 BDSTAT, và đi theo mỗi BDSTAT này sẽ có các thanh ghi sau: BDCNT, BDADRL, BDADRH ( tất nhiên các thanh ghi này sẽ tương ứng với số thứ tự của endpoint. ví dụ, endpoint 0 sẽ có 2 nhóm như sau:
              BD0STAT_in, BD0CNT_in, BD0ADRL_in, BD0ADRH_in. BD0STAT_out, BD0CNT_out, BD0ADRL_out, BD0ADRH_out.
              micorochip cho phép ta định nghĩa địa chỉ các thanh ghi này trong khoảng từ 400h tới 4FFh ( tùy vào chế độ ping-pong bạn dùng mà bạn định nghĩa địa chỉ của các thanh ghi này ), vùng RAM của USB từ 500h tới 7FFh bạn dùng chỗ nào thì ghi địa chỉ RAM chứa byte đầu tiên vào 2 thanh ghi BDARL, BDADRH
              về chức năng của các thanh ghi như sau:
              BD0STAT_in là thanh ghi trạng thái của endpoint 0 dùng để gửi dữ liệu, tức là khi bạn muốn gửi dữ liệu thì bạn phải ghi giá trị vào thanh này để gửi dữ liệu
              BD0CNT_in là thanh ghi dùng để báo cho host biết có bao nhiêu byte gửi lên
              BD0ADRL_in là thanh ghi chứa địa chỉ thấp của thanh ghi đầu tiên chứa dữ liệu cần gửi
              BD0ADRH_in là thanh ghi chứa điạu chỉ cao của thanh ghi đầu tiên chứ dữ liệu cần gửi
              Thứ tự các thanh ghi trên để gửi dữ liệu như sau:
              1 kiểm tra BD0STAT_in đang ở có chế độ SIE ko ( CPU là own =0, SIE là own=1 ) ( chế độ SIE cho phép thực hiện chức năng tương ứng là gửi dữ liệu hay copy dữ liệu vào cùng RAM CPU )
              2 ghi địa chỉ vùng RAM chứa byte đầu tiên vào 2 thanh ghi BD0ADRL_in và BD0ADRH, ví dụ: địa chỉ RAM USB đầu tiên để chứa dữ liệu là 0x0508, mình sẽ ghi như sau: BD0ADRL_in=08, BD0ADRH_in=0x05
              3. bạn phải ghi dữ liệu vào vùng RAM USB với địa chỉ RAM ghi byte đầu tiên là 0x0508
              4. ghi số lượng byte cần gửi lên host vào BD0CNT_in, ví dụ cần gửi 8 byte thì BD0CNT_in=8
              5. ghi trạng thái vào thanh ghi BD0STAT_in, ví dụ: gưi dữ liệu lên với kiểu dữ liệu là DATA1 thì BD0STAT_in=0xc8;
              tương tự các bạn sẽ có các chức năng của các thanh ghi BD0STAT_out, BD0CNT_out, BD0ADRL_out, BD0ADRH_out ( out là nhận dữ liệu, in là gửi dữ liệu )
              Thứ tự các thanh ghi để nhận dữ liệu từ vùng RAM USB vào vùng RAM của CPU
              1 kiểm tra BD0STAT_out đang ở có chế độ SIE ko ( CPU là own =0, SIE là own=1 ) ( chế độ SIE cho phép thực hiện chức năng tương ứng là gửi dữ liệu hay copy dữ liệu vào cùng RAM CPU )
              2 copy dữ liệu từ vùng RAM USB vào vùng RAM CPU với độ dài là giá trị của BD0CNT_out
              Cách gửi một vài lệnh đặc biệt lên host
              1.báo ACK lên host
              BD0CNT_in=0;
              BD0STAT_in=0xc8;
              2.báo lỗi lên host
              BD0CNT_out= kích thước tối đa của gói mà bạn dùng; ví dụ mình dùng kích thước tối đa của gói là 8 thì BD0CNT_out=8;
              BD0STAT_out=0x84;
              BD0STAT_in=0x84;

              Hôm nay viết tới đây thôi, mỏi tay rồi ^^ mình viết không được hay bạn nào đọc mà khó hiểu thì cứ hỏi nhé mình sẽ trả lời trong kiến thức mà mình biết. Rất mong nhận được sự ủng hộ của các bạn ^^. bài sau mình sẽ nói về các bước và cách thức để viết code cho pic
              P/s: pro nào cho em hỏi làm sao để tab đầu dòng được vậy ? em làm hoài mà ko dc. Thanks
              Last edited by thelaxong; 26-03-2012, 18:26.

              Comment


              • #52
                mình xin viết tiếp về hướng dẫn lập trình firmware USB cho pic 18f2550. Việc đầu tiên các bạn cần phải có các phần mềm cần thiết để thực hành:
                1 Làm 1 mạch thực về USB
                2 protues 7.8 hoặc các version khác có hổ trợ USB, các bạn có thể bật chức năng debug USB lên bằng cách: chọn debug -> chọn hình con bọ ( configure di... -> nhấn vào dấu " + " chỗ chữ pic chọn dòng USB sau đó click vào full trace hoặc debug sau đó nhấn ok. Mục đích việc này là giúp cho các bạn có thể kiểm soát được chương trình đã đọc được các thanh ghi nào và ghi nội dung gì vào thanh ghi. Theo kinh nghiệm của mình đối với USB protues không chính xác cho lắm, nó chỉ giúp bạn biết được chương trình bạn đi tới đâu và sai chỗ nào, còn khi cắm vào pc thì kết quả nó khác ( chỉ có khi nào code sai thì protues và thực tế là giống nhau )
                3 phần mềm SourceUSB 3.4 đây là phần mềm phân tích các gói tin USB, nó sẽ giúp bạn biết được code của bạn sai hay đúng. Nó rất hữu ích ( còn sử dụng như thế nào thì mình sẽ nói sau, mà cái này mình ko có key hay ***** chỉ xài 30 ngày, để có key 30 ngày bạn cần đăng ký email với nó )
                4 CCS, pickit... phần mềm mà bạn lập trình và nạp file hex cho chip.
                Mọi việc bắt đầu từ đây:
                Mình sẽ nói từng giai đoạn cho các bạn dễ thực hiện, và cung cấp các bảng mô tả khi nào tới phần mô tả. Và đây là các giai đoạn mà bạn sẽ vượt qua để có thể giao tiếp USB với pc:

                Nếu các bạn đi đúng thứ tự từ trên xuống, trừ cái dòng cuối cùng, thì bạn đã mở được cổng USB để giao tiếp. Đầu tiên mình sẽ nói về giai đoạn power và default còn giai đọa attached là giai đoan khi bạn cắm USB vào pc và thiết lập các điện trở kéo lên tương ứng với tốc độ.
                1.CẤU HÌNH CHO USB
                Việc cấu hình cho modul USB chỉ nằm ở 2 thanh ghi đó là: UCON và UCFG, chức năng cụ thể thì các bạn đọc datasheet là rõ như ban ngày. Khi bắt đầu hàm main() các bạn phải cấu hình USB và bật hết các thanh ghi cho phép ngắt, lưu ý là các thanh ghi cho phép ngắt không phải là thanh ghi trạng thái ngắt , vì chỉ dựa vào các ngắt của thanh ghi mới biết được mình nhận được cái gì, và chỉ quan tâm tới thanh ghi trạng thái ngắt không quan tâm tới thanh ghi trang thái ngắt lỗi . Và việc thiết lập này chỉ cần thực hiện 1 lần duy nhất trong các dòng lệnh đầu tiên.
                Sau khi thực hiện việc cấu hình xong, thì bạn đang ở giai đoạn power bạn kiểm tra thanh ghi trạng thái ngắt của USB sẽ thấy được các ngắt được kích hoạt, mỗi ngắt sẽ có tác dụng của nó ( datasheet ) trong đó có 1 ngắt cần quan tâm là ngắt reset, ngắt này báo rằng có 1 tín hiệu reset từ host gửi xuống và bạn cần phải reset các cấu hình cho endpoint trừ endpoint 0 ( vì endpoint 0 là endpoint mặc định để gửi các mô tả ban đầu ) và cấu hình cho endpoint 0 các thanh ghi khác đều =0 ( nếu bạn xài endpoint nào khác thì bạn cấu hình cho nó ), thanh ghi địa chỉ USB ( đây là thanh chứa địa chỉ trên bus USB để giao tiếp ), xóa thanh ghi trạng thái ngắt, bật hết các thanh ghi cho phép ngắt và thanh ghi cho phép ngắt lỗi, xóa cờ ngắt TRNIF bốn lần, đưa địa chỉ vùng RAM USB vào các thanh ghi BDADRL, BDADRH, dùng bao nhiêu endpoint thì đưa vào bấy nhiêu. Ví dụ: mình chỉ dùng endpoint 0 thì đưa địa chỉ như sau:
                BDCNT_out(0)=8;
                BDADRL_out(0)=0x00;
                BDADRH_out(0)=0x05;
                BDSTAT_out(0)=0x88;

                BDADRL_in(0)=0x07;
                BDADRH_in(0)=0x05;
                BDSTAT_in(0)=0x00;
                Và đừng quên là đưa giá trị 0x00 vào thanh ghi địa chỉ bus USB UADDR . sau khi các bạn phát hiện ra cờ ngắt reset và đi vào thực hiện việc reset thì các bạn đã đang nhập vào giai đoạn default.
                THỨ TỰ XỬ LÝ CÁC THANH GHI NHƯ SAU:
                1. SOF xử lý: SOF =0;
                2. STALL xử lý: STALL=0;
                3. IDLEIF xử lý: IDLEIF=0; SUSPND=1;
                4. TRNIF xử lý: thanh ghi báo nhận được 1 yêu cầu nào và cần đi vào xử lý yêu cầu này ( phần này mình sẽ nói sau ), nếu bạn ko nhận được ngắt này thì chắc chắn phần cấu hình hoặc chỗ xử lý ngắt reset có gì đó sai.
                [b] 5. ACTIVIF [b] xử lý: SUSPND=0; ACTIVF=0;
                6. UERRIF xử lý: UEIR=0; UERIF=0;
                7. URSTIF xử lý: đã trình bày ở trên

                P/s: chúng ta chỉ làm việc trên các thanh ghi trạng thái ngắt, ngoài ra ko kiểm bất cứ thanh ghi nào khác. Vậy là các bạn đã đi qua 2 giai đoạn của USB, các bạn nên thực hiện kỹ 2 giai đọan này cấu hình đúng và xử lý các ngắt, nếu không sẽ rất rắc rối cho các giai đọan sau này, khi bạn đi đến giai đoạn nào thì lưu vào 1 biến để cho dễ kiểm soát và trả lời các yêu cầu
                Last edited by thelaxong; 26-03-2012, 18:25.

                Comment


                • #53
                  hình như không ai quan tâm bài viết này thì phải ? chán vậy !

                  Comment


                  • #54
                    Cảm ơn bạn thelaxong, mình đang rất quan tâm tới USB-HID, mình làm board thí nghiệm rồi, nạp mấy cái source trên mạng vẫn chạy được nhưng không hiểu về nó nên việc modify lại cũng khó.
                    Chờ "bài giảng" tiếp theo của bạn!

                    *PS: bạn có ở SG không nhỉ, có thì cho mình giao lưu được không?!
                    Have fun!

                    Comment


                    • #55
                      tuyệt quá đi chứ anh thedaxong

                      anh tiếp tục nha
                      e cũng chưa có time để làm về USB
                      anh post để đàn e học hỏi và thảo luận nha
                      Be quan. Plz contact through email:

                      Comment


                      • #56
                        hay lắm bác thelaxong! Bác tiếp tục viết tiếp nhé, anh em đang chờ bác đây!

                        Comment


                        • #57
                          Nguyên văn bởi designer Xem bài viết
                          Cảm ơn bạn thelaxong, mình đang rất quan tâm tới USB-HID, mình làm board thí nghiệm rồi, nạp mấy cái source trên mạng vẫn chạy được nhưng không hiểu về nó nên việc modify lại cũng khó.
                          Chờ "bài giảng" tiếp theo của bạn!

                          *PS: bạn có ở SG không nhỉ, có thì cho mình giao lưu được không?!
                          Have fun!
                          Hiện tại mình đang ở Tp.HCM bạn có thể liên hệ với mình qua email thelaxhet1989t@gmail.com. Chúc bạn thành công!

                          mình chỉ hiểu dc 1 phần về USB, mình sẽ cố gắng viết dễ hiểu nhất. Hiện tại mình chỉ rãnh vào buổi tối nên sẽ tranh thủ viết các bài còn lại càng nhanh càng tốt để các bạn có thể tiết kiệm thời gian
                          Last edited by thelaxong; 22-05-2012, 11:50.

                          Comment


                          • #58
                            Mình rất vui vì các bạn đã quan tâm đến chủ để USB, và mình xin viết tiếp hướng dẫn về USB dùng pic 18f2550. Mình xin nhắc lại nội dung của 2 bài trước:
                            Bài đầu tiên: giúp các bạn hình dung ra được các tổ chức của giao tiếp USB, các tài liệu liên quan cần phải đọc, tác dụng của các thanh ghi BDxSTAT, BDxCNT, BDxADRL, BDxADRH. Một sô lệnh cần để gửi lên host khi cần thiết, và các bước để có thể ghi hoặc đọc dữ liệu lên vùng RAM USB.
                            Bài thứ hai: giới thiệu với các bạn 1 vài công cụ trước khi bước vào " khai phá" USB, 1 bảng các giai đoạn cần phải vượt qua để có thể giao tiếp USB. Cách để viết code cho USB. Cách giải quyết giai đoạn power, giai đoạn reset, và tổng kết lại các việc cần xử lý khi các ngắt được kích hoạt .

                            P/s: các bạn lưu ý rằng cần phải cấu hình clock cho USB trước khi bước vào thực hiện viết code, vì khi cấu hình clock sai thì USB ko thể hoạt động đúng, nếu cấu hình clock đúng thì các bạn sẽ nhận được các ngắt đúng ở từng giai đoạn, mình cung cấp đoạn code cấu hình clock mà hình dùng như sau:
                            #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CP UDIV1,VREGEN // cau hinh clock cho USB la viec lam dau tien va quan trong nhat
                            #use delay(clock=48000000)
                            một điều cũng cần phải lưu ý là CCS ko định nghĩa các thanh ghi USB sẵn cho bạn vì vậy bạn cần phải định nghĩa lại các thanh ghi của USB với địa chỉ của từng thanh ghi đã có trong datasheet, sau đây là đoạn code mình định nghĩa các thanh ghi USB mà mình dùng ( cái này cũng lấy của người khác thôi nhưng có 1 một số mình định nghĩa thêm ^^) Resister USB.txt sẽ có các thanh ghi các bạn sẽ không dùng đến nhưng mình vẫn để lại cho đầy đủ

                            Các bạn thông cảm khi viết 2 bài trước mình quên mất các điều quan trọng ban đầu ^^ Lúc đó vừa viết xong USB mừng quá quên hết trời đất ( ^^ )

                            Mọi chuyện sẽ tiếp tục từ đây:
                            Sau khi các bạn đăng nhập vào giai đoạn defaut và thoát khỏi giai đoạn này thành công, thì ngay sau đó host sẽ gửi địa chỉ USB cho pic 18f2550 và nội dung của đó nằm trong vùng RAM mà bạn định nghĩa cho BD0STAT_out lúc này bạn đang trong giai đoạn address, bạn cần phải đọc dữ liệu ở BD0STAT_out ( không phải BD0STAT_in vì in là truyền dữ liệu ). Lúc này bạn phải kiểm tra ngắt MCU_TRNIF ( nội dung ngắt này trong datasheet ) nếu có ngắt TRNIF thì bạn vượt qua 2 giai đoạn trước thành công và lúc này bạn cần phải kiểm tra thanh ghi USTAT để biết được nhận gói out hay in và endpoint nào được nhận vì trong trường hợp này endpoint 0 được mặc định là endpoint trong truyền dẫn điều khiển nên không cần kiểm tra endpoint nào dc nhận. Nếu bạn nhận được gói in trong lúc này thì bạn đã sai 1 chổ nào đó, lúc này bạn phải nhận được gói out, vì bạn chưa trả lời 1 yêu cầu nào của host nên việc lúc này là nhận và đọc yêu cầu đó, tiếp theo bạn kiểm tra nhận được token setup hay token out bằng cách đọc giá trị PID trong BD0STAT_out và các bạn đọc được gói token setup là đúng ( kiểm tra trong lý thuyết USB về token ). Tiếp theo bạn đi vào xử lý token setup này, bằng cách đọc yêu cầu mà host gửi xuống, thuật toán đọc dữ liệu như sau ( đây là cách đọc dữ liệu của mình, bạn có thể tự viết cách đọc dữ liệu bằng cách là tạo 1 con trỏ có địa chỉ ở địa chỉ bắt đầu từ vùng RAM USB mà bạn định nghĩa trong khi xử lý ngắt reset ) :
                            1. Định nghĩa 1 biến có địa chỉ là vùng RAM USB bắt đầu của BD0STAT_out
                            2. Đưa địa chỉ của biến trên vào 1 con trỏ
                            3. ghi giá trị 8 vào ( số 8 là độ dài byte ) BD0CNT_out
                            4. ghi giá trị 0 vào BD0STAT_in
                            5. kiểm tra BD0STAT_out, nếu đã nhận được gói data0 thì lần này nhận được gói data1 và ghi giá trị data tương ứng vào BD0STAT_out 0xc8 là gói data0 0x88 là gói data1
                            6. Đọc nội dung trong con trỏ mà bạn đã trở tới địa chỉ ở bước 1, lưu ý là bạn phải đọc 8 byte vì BD0CNT_out=8 đã được ghi vào ở bước 3
                            thứ tự byte sẽ là:
                            bmRequest
                            bRequest
                            wValue_low
                            wValue_high
                            wIndex_low
                            wIndex_high
                            wLength_low
                            wLength_high

                            Sau đó các bạn đọc byte đầu tiên các bạn chỉ cần biết nhận được "standard request hay ko " nếu ko nhận được yêu cầu này thì bạn đã sai, và cần phải kiểm tra lại việc cấu hình các ngắt và đảm bảo rằng các ngắt đã được xử lý đúng và phải qua được 2 giai đoạn trước. Nếu bạn nhận được standard request thì bạn đọc tiếp byte thứ 2, do ta đang trong giai đoạn address nên sẽ được nôi dung của nó sẽ là set address 0x05. Tại đây bạn trả lời ACK lên host ( cách trả lời nói ở bài đầu tiên ) và lưu giá trị địa chỉ USB vào 1 biến, nội dung này nằm trong wValue_low. Sau đó bạn kết thúc kiểm tra các yêu cầu và xoá bit PKTDIS ( ý nghĩa trong datasheet ), sau đó xoá tiếp cớ ngắt MCU_TRNIF.

                            P/s: không được ghi giá trị địa chỉ USB nhận được vào thanh ghi UADDR của pic ngay lúc này vì lúc này chưa thoát khỏi giai đoạn ADDRESS, chỉ đến khi nào bạn lặp lại kiểm tra cờ ngắt MCU_TRNIF và kiểm tra MCU_USTAT nhận được 1 gói "in" thì bạn mới được gán địa chỉ vào UADDR và trả lời " ACK" thì lúc này bạn đã thoát khỏi giai đoạn ADDRESS . Bạn có thể kiểm tra PID sau khi trả lời thành công gói "in", nếu nhận dc nội dung PID là ACK thì bạn có thể chắc chắn là đã thoát khỏi giai đaọn address. Giai đoạn address này khó trả lời nên có thể các bạn sẽ gặp rất nhiều rắc rối ở chỗ này

                            Tổng kết lại, cho bạn dễ hình dung:

                            1. Cấu hình clock USB
                            2. Định nghĩa các thanh ghi USB
                            3. Bật tất cả các ngắt, cấu hình USB với tốc độ USB, điện trở kéo lên.... ( đăng nhập vào giai đoạn power )
                            4. chờ cho tới khi bit SE0 = 0
                            5. xoá bit PKTDIS
                            6. kiểm tra các ngắt, nhận được các ngắt ( thoát khỏi giai đoạn power và rơi vào giai đoạn defaut ), xử lý các ngắt đặc biệt là ngắt reset phải xử lý cho khéo
                            7. kiểm tra các ngắt 1 lần nữa và nhận được ngắt TRNIF ( thoát khỏi giai đoạn reset, đăng nhập vào giai đoạn address )
                            8. Xử lý ngắt TRNIF, bằng cách đọc nội dung yêu cầu host gửi xuống và xử lý yêu cầu "set address", xoá bit PKTDIS ,xoá ngắt TRNIF
                            9. kiểm tra ngắt TRNIF 1 lần nữa, và nhận được gói in " gán địa chỉ USB vào thanh ghi UADDR và trả lời ACK", xoá ngắt TRNIF
                            10. kiểm tra ngắt TRNIF 1 lần nữa, đọc PID nếu là ACK thì thoát khỏi giai đoạn address thành công
                            Last edited by thelaxong; 23-05-2012, 01:29.

                            Comment


                            • #59
                              P/s: thêm 1 cách để các bạn biết được có thoát khỏi giai đoạn address thành công hay không, các bạn chỉ cần đọc yêu cầu host gửi về là gì sau khi trả lời giai đaọn adress nếu là "set address" thì các bạn chưa thoát khỏi giai đoạn address, nếu nhận được yêu cầu là "mô tả, cầu hình..." thì các bạn đã thoát khỏi thành công

                              Comment


                              • #60
                                nhiều thế e đọc mà không hiểu gì hết

                                Comment

                                Về tác giả

                                Collapse

                                thelaxong Tìm hiểu thêm về thelaxong

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X