PDA

View Full Version : USB with 18f4550 and opensource driver


pinochu
26-07-2008, 11:08 PM
Sau một thời gian tìm kiếm, nghiên cứu, tìm hiểu, đào bới sục sạo trên mọi diễn đàn, tui hông thấy (hoặc là tìm hông thấy) bài nào hoàn chỉnh về USB từ đầu tới cuối, mà chỉ có người hỏi, người trả lời thì lấp lửng, hoặc là người trả lời cũng chỉ cung cấp tất cả những gì mình có cho anh em. Tui tổng hợp lại và đã làm ra được 1 device USB bằng chip PIC8F4550, nay post lên cho anh em tham khảo và phát triển. Lưu ý là không phải tôi làm từ đầu, mà là tìm kiếm, làm thành công và post lại thôi. Hi vọng là mọi người cũng làm thành công và phát triển thêm. Tui nghĩ có nhiều người cũng tìm tòi và làm được nhưng giấu nghề, hổng chịu chỉ cho anh em.

Trước tiên là tìm hiểu về USB, tài liệu thì rất là nhiều, nhưng theo các cao thủ đi trước thì anh em khoan nên đọc USB complete, vì chưa làm usb bao giờ mà đọc cuốn đó thì có mà té giếng, tui thấy cũng đúng là té thiệt, và được khuyên là đọc cuốn USB in nutshell trước, cuốn này thì có nhiều người đã post lên rồi, nên tui hông post lại nữa.

- Anh em đọc để hiểu về cách enumuration của usb, quá trình khi cắm device vô, nó sẽ làm gì để nói cho máy tính biết "tui là USB device nè", rồi máy tính làm gì để cấp địa chỉ, reset device..
- Tiếp theo, là đọc firmware của usb, trong này đa số là dân hardware, đa số là dân PIC nên đọc hiểu lẹ, còn tui là dân software chính thống, vì mê hardware nên mới tự nghiên cứu học hỏi, nên đọc firmware hơi lâu, sửa thì sửa được nhưng hiểu thì chưa hiểu. Đọc firmware để biết quá trình initializing của USB device diễn ra như thế nào, làm sao mà để lúc cắm usb vô thì máy tính nó nói "found new hardware.." rồi nó biểu bỏ đĩa vô cài driver. Nếu ai có lòng thì phân tích phụ tui code firmware. Thanks nhiều.
- Kế tới là đọc code driver. À, cái này là chua nhát đây, viết driver là một nghệ thuật, không dễ cho những ai mới biết viết c/c++. Ở đây tui xài driver opensource, phiên bản gốc là libusb viết trên linux, sau đó được port qua windows, gọi là libusb-win32. Download ở đây: http://libusb-win32.sourceforge.net/
. Để build được driver này, phải cần bộ Device Driver Kit, hay còn gọi là DDK. Giờ thì kiếm DDK hơi khó, trên trang microsoft đã phát triển thành WDK (windows driver kit). Thông tin và download WDK ở đây: http://www.microsoft.com/whdc/devtools/wdk/default.mspx (khoảng 300MB, dạng file iso, down về xong, rồi cài đĩa CD ảo vào, mount ra rồi cài, hoặc có thể burn ra CD thật rồi cài).
. Muốn build driver thì download source code về, giải nén, đọc hướng dẫn, ai hông làm đuợc thì vô đây hỏi, tui sẽ chỉ. Ai hông muốn build thì download bản binary được build sẵn về xài.
. Tiếp theo là sơ đồ mạch và firmware. Sơ đồ mạch thì đơn giản, cấp nguồn, thạch anh, firmware này đang xài thạch anh 4MHz. RA0 và RA1 nối vô led vô trở. File zip của tui gồm 2 files zip trong đó, một file là code gốc tui down về, một file là code tui có sửa để dịch đuợc ra file hex, tui có bỏ file hex trong đó luôn.
đây là cái hình chụp lúc làm xong, cắm vào, cài driver xong, nó hiểu có 1 usb device như thế này:

http://i59.photobucket.com/albums/g317/pinochu/untitled.jpg

Trên đây là tài liệu tui tổng hợp được và làm device usb chạy, tức là cắm vô máy tính nó hiểu có device, đòi driver..
À trong attachment, có code để điều khiển 2 cái LEDs, code C dễ hiểu thôi, viết chạy command line, chuyển qua GUI rất dễ. Ai có thắc mắc gì cứ hỏi, tui biết gì sẽ trả lời đó.

phamminhtuan
27-07-2008, 12:57 AM
Quá hay, nghe bạn nói cũng biết bạn là dân software chính thống rồi, mình vẫn còn cay cú vì chưa thể viết được driver chạy trên máy tính, mặc dù tham khảo mấy bài viết khá chi tiết trên codeproject. Còn làm ứng dụng thì mình dùng luôn code của 2 thằng, firmware: CCS - C, cái thư viện này khá được, sửa sơ lại rồi làm ứng dụng gì cũng ok. Còn phần mềm và driver trên máy tính thì dùng Windriver. Mình rất muốn tự viết driver để sử dụng khỏi xài chùa, nhưng firmware thì khốn nỗi, nó viết tối ưu quá, viết lại giống nó là tốt nhất, thế nên ...:D, còn software thì như ...đã nói

pinochu
27-07-2008, 01:49 AM
Driver thì bạn có thể xài opensource, cũng là chùa, nhưng hông crack, chỉ cần bỏ thêm license file của nó vào software package của mình theo quy định của nó là được, bạn có thể thêm xoá sửa và build lại driver theo ý mình, nếu đọc hiểu được ý tưởng của nó, có thể viết lại như vậy thì nó gần như của mình. Đọc code người khác viết mà hiểu được ý tưởng của họ mới là giỏi. Để tập viết driver, bạn cứ làm từ từ theo hướng dẫn của codeproject, cái này cũng cần kiên nhẫn dữ lắm, dịch toàn commandline, sửa lỗi xong phải compile lại, mất thời gian vô cùng, và máy tính có thể bị dump bất cứ lúc nào, mà mỗi lần máy tính bị dump thì hay chửi, he he, nên tui khuyến cáo là nên cài máy ảo để load driver. Nó cũng bày cách load driver bằng OSR, tất nhiên là nếu viết bậy thì cách load nào cũng bị dump, nhưng không sao, trong gian khổ mới thấy chân tình :D. Bạn có thể làm tới đâu rồi?

Cái tui cú nhất là nhiều người hông biết lên hỏi, và nhiều người trả lời nhưng trả lời mập mờ, người thì chỉ kiểu này, người chỉ kiểu khác, không đầu không đuôi, đã biết là người hỏi hông biết mới đi hỏi, mà trả lời bằng cách làm khó cho anh em. Tất nhiên là học môn này không thể nôn nóng muốn làm ra sản phẩm được, mà phải tìm tòi khá nhiều, không để người khác dọn ra cho ăn mà phải tự nấu, nhưng ít nhất họ cũng muốn nhìn thử món ăn nấu ra trông thế nào, có ăn được không, lúc đó họ mới dám bắt tay vô nấu chứ. Còn một dạng khác là vô hỏi, sau đó anh em cũng trả lời, và họ tự tìm được cách giải quyết, và rồi im luôn, xem như bài toán trên forum bị bế tắc.

Tui viết bài này để ai muốn xem thử kết quả trước khi bắt tay vô nghiên cứu thì có thể xem trước, để rồi có quyết định là tiếp tục hay không. Tui có sai sót gì thì mọi người cứ góp ý.

namqn
27-07-2008, 02:01 AM
...
Cái tui cú nhất là nhiều người hông biết lên hỏi, và nhiều người trả lời nhưng trả lời mập mờ, người thì chỉ kiểu này, người chỉ kiểu khác, không đầu không đuôi, đã biết là người hỏi hông biết mới đi hỏi, mà trả lời bằng cách làm khó cho anh em. Tất nhiên là học môn này không thể nôn nóng muốn làm ra sản phẩm được, mà phải tìm tòi khá nhiều, không để người khác dọn ra cho ăn mà phải tự nấu, nhưng ít nhất họ cũng muốn nhìn thử món ăn nấu ra trông thế nào, có ăn được không, lúc đó họ mới dám bắt tay vô nấu chứ. Còn một dạng khác là vô hỏi, sau đó anh em cũng trả lời, và họ tự tìm được cách giải quyết, và rồi im luôn, xem như bài toán trên forum bị bế tắc.

Tui viết bài này để ai muốn xem thử kết quả trước khi bắt tay vô nghiên cứu thì có thể xem trước, để rồi có quyết định là tiếp tục hay không. Tui có sai sót gì thì mọi người cứ góp ý.
Cứ xem như bạn là người biết về USB đi, bạn trả lời những câu hỏi liên quan đến USB đã được đặt trên diễn đàn này ra sao? Chẳng phải bạn cũng bắt đầu bằng việc đọc tài liệu về USB, để tìm hiểu các khái niệm, quá trình enumeration, ... rồi mới tiếp tục với firmware và software trên host PC hay sao.

Đa số những người chưa biết gì về USB đều tưởng rằng USB cũng là một kiểu giao tiếp như cổng COM hay cổng LPT, nên đều cho rằng những đề nghị tìm hiểu về USB thông qua tài liệu là làm khó, hay dấu nghề. Người ta đưa lên mạng hết rồi thì có cái gì mà phải dấu. Làm xong các bài tập của Brad Minch thì có gì hay ho không mà phải dấu.

Bạn thử giải thích quá trình enumeration của thiết bị mà bạn vừa làm thành công cho một người chưa biết gì về USB xem, giải thích trên diễn đàn này nhé.

Thân,

pinochu
27-07-2008, 02:08 AM
cái việc giải thích thì sách báo tài liệu nói quá trời rồi, tui nghĩ mấy anh rành hơn tui nhiều. Lúc nào đó tui rành vụ enumeration tui sẽ post lên tiếp.

namqn
27-07-2008, 02:31 AM
cái việc giải thích thì sách báo tài liệu nói quá trời rồi, tui nghĩ mấy anh rành hơn tui nhiều. Lúc nào đó tui rành vụ enumeration tui sẽ post lên tiếp.
Bạn cũng trả lời như những người khác từng trả lời thôi, với ý cho rằng trong tài liệu có nói chi tiết rồi. Tôi đề nghị bạn giải thích cho những người chưa biết chứ có phải cho những người đã biết đâu mà bạn nói vậy, tôi nghĩ bạn đang có hứng thú nói về vấn đề này thì có lẽ bạn có thể dành thời gian cho nó hơn những người khác (chưa thành công hay không có thời gian).

Tuy nhiên, tài liệu đã có là một chuyện, nhiều (hay rất nhiều) thành viên vẫn muốn được đọc hướng dẫn bằng tiếng Việt, là điều mà tôi đang đề nghị bạn. Bạn sẵn lòng thì cộng đồng được hưởng lợi, chứ bản thân tôi chắc chẳng thu được lợi lộc gì. ntc hay bien_van_khat, cũng như một số thành viên khác đã đi qua chặng đường mà bạn đang đi, nhưng họ không đủ thời gian để viết về nó, bạn đừng cho rằng họ dấu nghề, làm khó, ... Họ cống hiến cho cộng đồng đâu phải chỉ qua các bài viết về USB.

Bạn thử hướng dẫn tường tận về vấn đề này đi, bạn sẽ thấy nó không đơn giản như việc làm thành công bài tập của Brad Minch (vốn là bài tập hiệu quả nhất cho người mới học trong việc tiếp cận USB).

Thân,

pinochu
27-07-2008, 10:02 AM
tui cũng nói ngay từ đầu là tui học software, hoàn toàn không đụng gì tới điện tử, tui tổng hợp hết lại, post lên cho những ai muốn tìm tài liệu, nếu bạn thấy nó không cần thiết thì không sao cả. Tui nghĩ ntc hay bien_van_khat học điện tử ra, kinh nghiệm làm PIC phải hơn tui nhiều. Tui post bài tập của Brad Minch, tui đâu có nói là làm xong bài này sẽ hiểu usb là cái gì, mà mục đích chính là có thể làm thành công, thế thôi. Trước giờ tui đâu thấy ai post một bài tập hoàn chỉnh từ đầu tới cuối, bài nào cũng xài driver close source, chỉ biết driver nó build sẵn vậy, bỏ vô thì nó chạy vậy, còn muốn biết một app muốn giao tiếp với usb device thế nào thì chịu, chỉ biết xài functions nó export ra sẵn.

Hai bài liên tiếp bạn đều nói đến Brad Minch, ok, link tới nguồn đây:
http://pe.ece.olin.edu/ece/projects.html

namqn: link trên đã có thành viên đưa ra ở post #24 luồng sau: http://www.picvietnam.com/forum/showthread.php?t=422

phungtung
27-07-2008, 11:37 AM
Mình cũng đang tìm hiểu rất kỹ về USB. nhưng đang tìm hiểu về mặt nguyên lý. Tức là đi sâu vào tìm hiểu 4 cách thức Transfer USB. Mình đang nghiên cứu sắp xong Control Transfer là cách thức bắt buộc của mỗi thiết bị và là cách thức hết sức quan trọng. Mình muốn làm một thiết bị dựa trên PIC18F4550 với idVendorID và idProductID của chính mình (hơi lạm dụng bản quyền). Nhưng vì thời gian có hạn nên chưa thể tìm hiểu được cách viết Driver, mặc dù trong máy đã có cài DDK của Windows nhưng chưa có thời gian nghiên cứu. Hôm nay gặp được cao thủ Pinochu có nói đã viết được Driver, mong được cùng nhau hợp tác và chia sẽ kinh nghiệm. Mong Pinochu cho biết Số điện thoại và Email để tiện liên lạc.

namqn
27-07-2008, 04:41 PM
tui cũng nói ngay từ đầu là tui học software, hoàn toàn không đụng gì tới điện tử, tui tổng hợp hết lại, post lên cho những ai muốn tìm tài liệu, nếu bạn thấy nó không cần thiết thì không sao cả. Tui nghĩ ntc hay bien_van_khat học điện tử ra, kinh nghiệm làm PIC phải hơn tui nhiều. Tui post bài tập của Brad Minch, tui đâu có nói là làm xong bài này sẽ hiểu usb là cái gì, mà mục đích chính là có thể làm thành công, thế thôi. Trước giờ tui đâu thấy ai post một bài tập hoàn chỉnh từ đầu tới cuối, bài nào cũng xài driver close source, chỉ biết driver nó build sẵn vậy, bỏ vô thì nó chạy vậy, còn muốn biết một app muốn giao tiếp với usb device thế nào thì chịu, chỉ biết xài functions nó export ra sẵn.

Hai bài liên tiếp bạn đều nói đến Brad Minch, ok, link tới nguồn đây:
http://pe.ece.olin.edu/ece/projects.html

namqn: link trên đã có thành viên đưa ra ở post #24 luồng sau: http://www.picvietnam.com/forum/showthread.php?t=422
Đã từ lâu, Microchip cung cấp một framework cho các ứng dụng USB trên PIC, là một giải pháp open source, link hiện thời dưới đây:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2651&param=en534494

Với những nhà phát triển muốn đẩy nhanh tốc độ phát triển sản phẩm, họ có thể dùng các thư viện cho các lớp có sẵn của Microchip, như HID, CDC, mass storage, hay Custom (tức là bạn cung cấp các thư viện chức năng). Tôi cho rằng người dùng PIC hẳn phải nghĩ đến việc khai thác những công cụ mà nhà sản xuất linh kiện đã cung cấp, khi muốn dùng PIC cho ứng dụng của họ.

Việc bạn muốn phát triển từ firmware đến driver trên host PC là tùy bạn, nhưng tôi cho rằng cách làm này không thích hợp với đa số người dùng, vì sẽ khá tốn thời gian và công sức. Chẳng có gì là sai khi dùng các thư viện closed source, nếu chúng đáp ứng được yêu cầu. Không rõ từ trước đến giờ bạn phát triển phần mềm trên Windows ra sao: dùng các API của Windows/thư viện của trình biên dịch hay tự viết mọi thứ?

Thân,

thuongshoo
28-07-2008, 12:51 PM
Theo tui thì hướng nào cũng tốt. Đúng không? Vấn đề là diễn đàn thì thường "ép buộc". ".. Như vầy mới tốt nè! phải như vầy!.... "

Trong khi nhu cầu thực tế thì không phải chỉ có 1. Cũng khó lắm! Thường thì phải ép như vậy có khi diễn đàn lại phát triển. Cóc hiểu !

nguyen.a.tu
01-08-2008, 01:38 PM
Bài viết quá tuyệt . . . diễn đàn cần nhiều bài viết loại này . . . . cho Email cua bạn đi pinochu để anh em tiện liên hệ . . .

cutan
03-08-2008, 02:37 PM
@pinochu : mình mới bắt tay vào nghiên cứu cái này và thấy kiểu bài viết của bạn khá bổ ích với mình. Bạn có thể cho mình xin địa chỉ email hay yahoo ID để tiện liên lạc?

phananhsang
10-08-2008, 11:53 PM
thanks bác một phát nha

kinhcan81
11-08-2008, 12:23 PM
thanks Pinochu

eldest_daica
10-01-2009, 11:02 PM
Sau một thời gian tìm kiếm, nghiên cứu, tìm hiểu, đào bới sục sạo trên mọi diễn đàn, tui hông thấy (hoặc là tìm hông thấy) bài nào hoàn chỉnh về USB từ đầu tới cuối, mà chỉ có người hỏi, người trả lời thì lấp lửng, hoặc là người trả lời cũng chỉ cung cấp tất cả những gì mình có cho anh em. Tui tổng hợp lại và đã làm ra được 1 device USB bằng chip PIC8F4550, nay post lên cho anh em tham khảo và phát triển. Lưu ý là không phải tôi làm từ đầu, mà là tìm kiếm, làm thành công và post lại thôi. Hi vọng là mọi người cũng làm thành công và phát triển thêm. Tui nghĩ có nhiều người cũng tìm tòi và làm được nhưng giấu nghề, hổng chịu chỉ cho anh em.

Trước tiên là tìm hiểu về USB, tài liệu thì rất là nhiều, nhưng theo các cao thủ đi trước thì anh em khoan nên đọc USB complete, vì chưa làm usb bao giờ mà đọc cuốn đó thì có mà té giếng, tui thấy cũng đúng là té thiệt, và được khuyên là đọc cuốn USB in nutshell trước, cuốn này thì có nhiều người đã post lên rồi, nên tui hông post lại nữa.

- Anh em đọc để hiểu về cách enumuration của usb, quá trình khi cắm device vô, nó sẽ làm gì để nói cho máy tính biết "tui là USB device nè", rồi máy tính làm gì để cấp địa chỉ, reset device..
- Tiếp theo, là đọc firmware của usb, trong này đa số là dân hardware, đa số là dân PIC nên đọc hiểu lẹ, còn tui là dân software chính thống, vì mê hardware nên mới tự nghiên cứu học hỏi, nên đọc firmware hơi lâu, sửa thì sửa được nhưng hiểu thì chưa hiểu. Đọc firmware để biết quá trình initializing của USB device diễn ra như thế nào, làm sao mà để lúc cắm usb vô thì máy tính nó nói "found new hardware.." rồi nó biểu bỏ đĩa vô cài driver. Nếu ai có lòng thì phân tích phụ tui code firmware. Thanks nhiều.
- Kế tới là đọc code driver. À, cái này là chua nhát đây, viết driver là một nghệ thuật, không dễ cho những ai mới biết viết c/c++. Ở đây tui xài driver opensource, phiên bản gốc là libusb viết trên linux, sau đó được port qua windows, gọi là libusb-win32. Download ở đây: http://libusb-win32.sourceforge.net/


Mình cũng đang tìm hiểu về giao tiếp qua cổng usb .Mình đã down thư viện lib cho usb trên linux về đọc ,nhưng mà còn nhiều mơ hồ quá .Bạn hãy nói chi tiết hơn về nội dung cuả từng file trong thư viện được không !

vanmanh1988
22-03-2010, 11:28 PM
Cứ xem như bạn là người biết về USB đi, bạn trả lời những câu hỏi liên quan đến USB đã được đặt trên diễn đàn này ra sao? Chẳng phải bạn cũng bắt đầu bằng việc đọc tài liệu về USB, để tìm hiểu các khái niệm, quá trình enumeration, ... rồi mới tiếp tục với firmware và software trên host PC hay sao.

Đa số những người chưa biết gì về USB đều tưởng rằng USB cũng là một kiểu giao tiếp như cổng COM hay cổng LPT, nên đều cho rằng những đề nghị tìm hiểu về USB thông qua tài liệu là làm khó, hay dấu nghề. Người ta đưa lên mạng hết rồi thì có cái gì mà phải dấu. Làm xong các bài tập của Brad Minch thì có gì hay ho không mà phải dấu.

Bạn thử giải thích quá trình enumeration của thiết bị mà bạn vừa làm thành công cho một người chưa biết gì về USB xem, giải thích trên diễn đàn này nhé.

Thân,

chào anh.
tôi thấy anh cũng là người hiểu sâu về usb.vậy anh co thể post bài hướng dẫn cụ thể về vấn đề này được không.nguồn tài liệu, cách thức kết nối phần cứng, mềm.sử dụng mã nguồn mở hay đóng gì cũng được.tôi xem nhiều bài viết trên diễ đàn anh em còn rất mơ hồ về usb.mong anh giúp mọi người về việc này.
thanks

falleaf
23-03-2010, 08:30 AM
http://www.picvietnam.com/forum/showthread.php?t=4733

Nếu bạn muốn bắt đầu với USB, hãy bài này, download về rồi đọc code, vào microchip.com/usb để tìm đọc thêm.

Đó là cách nhanh nhất để học USB.

Chúc vui