2010年10月31日 星期日

"又" 復出了

大家好,三年來一直斷斷續續地寫了又停、停了又寫一直沒辦法定期來這裡更新。這次又立志至少每個禮拜寫篇新文章跟大家交流,不知道在現實環境下可以堅持多久?雖然過程中時有間斷,但目標主軸一直都沒變:這個網站就是要引發大家入門各種學科或技術的興趣及降低入門的門檻而已。實際上要如何精通與應用則是要看自己的興趣,當然也歡迎一起交流。

這次計畫將會將USB 中級心法寫好,並修正一下三年前寫的USB初級心法的內容。
同時為了讓大家能夠實際做實驗,這裡將會開闢一個一週入門單晶片系列。讓大家能夠利用手頭上可以找到的任何一顆買得到的微控制器來做USB系統實驗,或當看不懂外面賣的微控制的書時也可以過來瞄一眼看是不是換一種表達方式就容易懂了。

展開卷軸...

2010年2月23日 星期二

手持式頻譜分析儀

這個作品使用了Cypress的無線模組, 只是它並沒有拿來傳資料. 而是利用模組原本的監聽功能來掃描2.4G頻帶內的無線信號.


正體中文翻譯

原文Handheld 2.4 GHz Spectrum Analyzer

Handheld 2.4 GHz Spectrum Analyzer

展開卷軸...

2010年2月19日 星期五

USB分析工具1 - SnoopyPro 和 usbmon

在同時講解USB中級心法時,這裡也會定期介紹USB裝置開發時會用到的工具。今天要介紹的是二個完全免費且開放原始碼的工具。
SnoopyPro和Linux 內建的 usbmon.

SnoopyPro已經好幾年沒有人在維護了,Vista之後的作業系統也不保證可以用。它最大的好處就是使用簡單且完全免費。使用方法如下:

1.執行 SnoopyPro.exe
2.按 F2 打開USB裝置視窗
3.從 File 選單裡選 'Unpack Drivers'
4.從 File 選單裡選 'Install Service'
5.在想要觀察的裝置上按滑鼠右鍵並選擇 'Install and Restart'
6.操縱被觀察的裝置(插拔,操作軟體,按鈕......)
7.作業系統收發的該裝置資料都會被記錄下來供後統分析


另外要介紹的是Linux 2.6. 內建的usbmon, 如果裝的是Ubuntu 9.10 那裝完之後直接可以用,只需在shell視窗裡打 'cat /sys/kernel/debug/usb/usbmon/0u > /tmp/1.mon.out' 再去操縱想要觀察的裝置就會記錄所有系統收發的USB資料。

實際錄下的記錄檔如下:

d187b000 1597420637 S Ci:1:004:0 s 80 06 0100 0000 0012 18 <

d187b000 1597423351 C Ci:1:004:0 0 18 = 12011001 00000008 6d0416c0 40030102 0001

d187b000 1597423501 S Ci:1:004:0 s 80 06 0200 0000 0009 9 <

d187b000 1597424980 C Ci:1:004:0 0 9 = 09021900 010100a0 32


看起來是不是跟USB中級心法前章的資料收掉Transaction和Packet很像呢?

這就是這種軟體監看工具最弱的一環,軟體只能記錄作業系統有辦法看到的資料。所以從主機板的南橋(或USB界面上)驅動程式->南橋晶片(USB卡)->USB cable->USB 周邊晶片 這條路上發生的問題,不論是要錢或免費的軟體工具全部都看不到。

展開卷軸...

2010年2月17日 星期三

USB 中級心法之USB封包解說

今天做了一個解說USB封包的工具,當做是USB中級心法系列的準備。有興趣學習USB的人可以自己先玩一下來熟悉所謂的3*3。(用IE來玩的速度較慢,建議換用其他瀏灠器)

Get Device Descriptor - Index=0 Length=18
SETUP txn - 80 06 00 01 00 00 12 00
SETUP packet
SYNC
00000001
SETUP
0xB4
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA0 packet
SYNC
00000001
DATA0
0xC3
DATA
80 06 00 01 00 00 12 00
CRC16
0x072F

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 12 01 00 02 00 00 00 08
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA1 packet
SYNC
00000001
DATA1
0xD2
DATA
12 01 00 02 00 00 00 08
CRC16
0xEAE7

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 6D 04 16 C0 40 03 01 02
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA0 packet
SYNC
00000001
DATA0
0xC3
DATA
6D 04 16 C0 40 03 01 02
CRC16
0x5ACF

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 00 01
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA1 packet
SYNC
00000001
DATA1
0xD2
DATA
00 01
CRC16
0xFCF1

ACK packet
SYNC
00000001
ACK
0x4B

OUT txn -
OUT packet
SYNC
00000001
OUT
0x87
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA1 packet
SYNC
00000001
DATA1
0xD2
DATA
CRC16
0x0000

ACK packet
SYNC
00000001
ACK
0x4B

Get Configuration Descriptor - Index=0 Length=255
SETUP txn - 80 06 00 02 00 00 FF 00
SETUP packet
SYNC
00000001
SETUP
0xB4
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA0 packet
SYNC
00000001
DATA0
0xC3
DATA
80 06 00 02 00 00 FF 00
CRC16
0x9725

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 09 02 22 00 01 01 00 A0
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA1 packet
SYNC
00000001
DATA1
0xD2
DATA
09 02 22 00 01 01 00 A0
CRC16
0x5019

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 32 09 04 00 00 01 03 01
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA0 packet
SYNC
00000001
DATA0
0xC3
DATA
32 09 04 00 00 01 03 01
CRC16
0xACB2

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 02 00 09 21 10 01 00 01
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA1 packet
SYNC
00000001
DATA1
0xD2
DATA
02 00 09 21 10 01 00 01
CRC16
0x68CE

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 22 34 00 07 05 81 03 04
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA0 packet
SYNC
00000001
DATA0
0xC3
DATA
22 34 00 07 05 81 03 04
CRC16
0xB587

ACK packet
SYNC
00000001
ACK
0x4B

IN txn - 00 0A
IN packet
SYNC
00000001
IN
0x96
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA1 packet
SYNC
00000001
DATA1
0xD2
DATA
00 0A
CRC16
0x7E12

ACK packet
SYNC
00000001
ACK
0x4B

OUT txn -
OUT packet
SYNC
00000001
OUT
0x87
ADDR
0x01
ENDP
0x0
CRC5
0x17

DATA1 packet
SYNC
00000001
DATA1
0xD2
DATA
CRC16
0x0000

ACK packet
SYNC
00000001
ACK
0x4B

展開卷軸...

2010年1月13日 星期三

自製USB 方向盤

這個作品是仿照wii 的方向盤作法,使用加速規來感應方向盤跟地面的夾角。並使用PIC18F2550來實做USB HID搖桿裝置。

正體中文翻譯
原文:Accelerometer Controlled Usb Gamepad and Mouse using PIC18F2550 / PIC18F4550

USB joystick.

展開卷軸...