12.15.2006

ISP 1582/3 debuging..

Mode Register 的PWRON ,描述上雖說是LED pin control,實際上是設定chip always poweron 的bit(reference Unlock register 的說明)。

Isp 1582/3 在一時間 (很短) timeout後 ,就會進入suspend,default setting 在suspend 中,register 只可以read,不能write,所以write 動作都會無效。
若要作write 動作,要先作unlock (write 0xAA37 進入unlock register)。

設定Mode Register的 PWRON,可以讓 ISP1582/3 不要作" timeout 進入suspend" 的動作。

另外,reset 後,chip 需要一段時間才能initialize OK,可以用read chip id 來判斷是否initialize OK。
(但是在未intialize OK前 對chip 作read 動作好像會干擾chip 的動作)

另外一個bit : WKUPCS,是設定對ISP1582/3 的任何動作,都會讓chip 維持wakeup 。
當set時,要持續對chip read/write 才能讓chip alive,否則一下子就進入suspend。

現象: 當設定softct 後,量測D+. D- 只有25ns的 pulse,但是在softct後立即對chip read

USB hardware 相關:

D+. D- pin 很敏感,有時候可以用oscillator 量測,有時候會因此干擾到Pc host 的反應,所以當量測到 D+,D- 有2ms 的pulse 後,就可以確認device 的動作正常,pc host應該要送出setup message。
(如果沒有,就把oscallator 移除,再試一次,正常時,pc 約在 2 sec 內發出 "不認識的usb 裝置" 訊息)。

device 送出2ms的D+ pulse後,host緊接著送出messasge (D+ 不到500mv),約100ms的message。
總共有3個message。
很奇怪的是,第一個message開始的3.3V 2ms pulse確認是device發出的。第二,三個message開頭一樣有3.3V的pulse,不知道是host還是device產生的。
int register state change
  • VBUS, SUSP
  • RESM
  • SUSP
  • RESM
  • BRST
  • HS_STA
  • SOF
  • RESM, SUSP
  • repeat BRST - 2 times
  • SUSP
可以看到BRST 三次: detection of a bus reset。

12.14.2006

About USB. hardware pin

USB 有四個pin : VBUS, GND,D+, D-

D+,D- 平時host 有1.5k 到GND的電阻,所以host detect both 0V。

接上device時,device 要把D+ 加到3.3V (維持2ms ?),host 偵測到這個"Pulse" ?
就會從D+, D- 送出SETUP Command ,

SETUP 的8 bytes data內含request command,

然後是一個IN packet,要求device把descriptor送上來。

如果用oscillator 量D+, D- 的波形,可以看到...
  1. 沒接device時,0V,
  2. 接上device時,會有一個pulse - 放電 的波形 (chip defect ?),
  3. 然後device送出一個2ms 的3.3V pulse。
  4. 然後約1sec以內host 會送出一連串 high-low,然後維持high。等device送出data。
所以...偵測

12.10.2006

在main loop 中 處理:
  • suspend. : receive suspend command, INT。
    處理 : 設mode register,suspend 1-0
  • REQUESTPROC
    處理host送來的request..
  • CONTROLOUTDON
    依照該ENDPOINT狀太,設定endpoint register的stall bit.
  • bulk_out
    處理CBW command
USB Host 的request 可以分為三類:
  • STANDARD
  • CLASS
  • VENDOR

Standard 的request 用一個index來選取以下服務:
沒有implement的就用StallEP0
  • GetStatus
  • ClearFeature
  • StallEP0
  • SetFeature
  • StallEP0
  • SetAddress
  • GetDescriptor
  • StallEP0
  • GetConfiguration
  • SetConfiguration
  • GetInterface
  • SetInterface
  • StallEP0
Class 的request 只有一個
  • Reserved
Vendor 有15個,但是沒有implement,所以都是StallEP0

Request type, and Request index 是在 USB 的SETUP封包中。

SETUP 封包的內容是:
 struct _device_request{
char bmRequestType;
char bRequest;
unsigned short wValue;
unsigned short wIndex;
unsigned short wLength;
} DEVICE_REQUEST;
.當USB插入host後,host會送這個OUT Token (封包的一種),給device的ENDPOINT0。

Device

12.08.2006

ISP1582 sample code

PCI Sample code :
  • 先unlockdeive : *(0x7C) = 0xAA37; 由suspend mode喚醒,對任何register 動作前要對 unlock register寫入AA37。
  • testmodereg 寫入0x10 : *(0x84) = 0x10 ; FORCEFS - force Full Speed.
  • mode register, clear SOFTCT (soft-connect) ,也就是將D+ pullup 移除(變成full speed)。
  • 對interrupt register 寫入0xFFFFFF,將所有interrupt source 清除。 *(0x18) = 0xFFFFFFFF.
    interrupt register register 代表目前產生interrupt的原因,對該bit寫入1可以將該source clear。
Register Reading: - debug 才需要
  • 對scratch register寫入0xAA55,讀出確認OK。
  • Interrupt Config (0x10)
  • Interrupt mast L.H (x014, 0x16)
  • Interrupt register L.H (0x18, 0x1A)
  • DMA config (0x38)
  • DMA counter L.H (0x34,0x36)
  • Current Frame Number (0x74)
  • Mode (0x0C)
  • Address (0x00)
Install ISR

Read Chip ID 0x70.74.76

開始connect USB:
 Address Enable : *(0x00) = 0x80;
Mode : *(0x0C) = 0x08 | 0x01 | 0x80 | 0x200; GLINTENA, SOFTCT, CLKAON, 0x200
Test : *(0x84) = 0x00; exit test mode
IntConfig: (0x10) = 0x40 | 0x10 | 0x04; cdbgmod_as,ddbgmodin_a, ddbgmodout_asy,
control interrupt : on ack,stall
in interrupt : ack only
out interrupt : ack and stall
IntEnableLow :*(0x14) = 0x0001 | 0x0008 | 0x0010 | 0x0020 | 0x0100 | 0x0080
0x0400 | 0x0800 | 0x1000 | 0x2000 | 0x4000 | 0x8000 ;
butreset,susp,resume,hs_state,ep0set,
vbus,ep0rx, ep0tx, ep1rx, ep1tx,
ep2rx, ep2tx.
IntEnableHi : *(0x16) = 0x00;


Config Endpoint
先將7個endpoint的tx,rx type 都設為0

12.04.2006

something about NAND Flash

NAND Flash 依照每個cell 所能儲存的位元數,可以分為SLC和MLC兩種。
可以猜到,MLC除了price外,比起SLC來,沒有其他的優點。

但是市場還是以價格導向,所以2006以後,MLC的產品大出現,許多SLC的廠家也將轉換至MLC。

目前MCU直接支援MLC的還是很少(還沒做出來),所以市場對SLC的需求還是大宗。
(迫不得已)

有鑑於此,一些公司就推出使用MMC (SD)介面的MLC,因為直接支援 SLC 的MCU通常也都有SD 介面,所以可以利用這個介面存取MLC,這類MLC+MMC controller的產品,算是過度時期的產品,當MCU將SLC NAND Flash interface改為MLC後,這類產品就失去價值。
但在目前MLC price 約為SLC 50%的現況來說,一些price critica 的大容量需求產品,還是很有新引力。
預測,在大多數供應商將SLC轉為MLC後,SLC的價格將會升高,對比MLC逐漸下降的趨勢,SLC極有可能退出市場。
另外,將多組MLC加上IDE controller後,成為HD的替代品,這類產品也漸漸成熟。
雖然最終不可能達到和HD一樣的價格,但是耗電量,防震,溫度和速度的優勢以足以吸引一定的產品類別。
車用 ?
對於某些需求高速access time的mcu,有一種NOR+NAND type的產品,據說interface是NOR,所以可以符合XIP的需求。同時又具有NAND 大容量,低價格的優點。

12.03.2006

排毒?

食材能夠不煮就不煮,盡量生吃。
到時候吃下一些寄生蟲,在腸子中寄生。
再用灌腸液把他灌出來。

?

12.02.2006

La Fonera.. Setup OK

真的收到了.. La Fonera.



馬上就照著說明...去註冊,然後...把Fonera 插上 hub...等三個綠燈都亮了...
打開NB,搜尋.....

只有出現MyPlace.. 沒有FON_AP!!
所以follow 說明,連到MyPlace,連是連上了,但是出不去..

大概是我家裏的網路配置太複雜了吧..
我在說明書上有看到,如果沒見到FON_AP,就要設定一下網路...
有空的時候在試試看吧。

update :

設定成功!
和一般 的ap一樣,要自己設定internet連線方式。在我家是用static。
然後重開機就可以。

他還很聰明的知道分成wan,lan,internet三部份。

因為家裏的網路配置很複雜..

所以剛拿到的Fonera接上去後不能直接用。Fonera沒有 ethernet hub ,所以也不能用來替換internet的ipshare+hub。只好放在最末端。

這樣,他就要經過一個AP的轉換,IpShare,才到internet。

由於中間的AP--AP途徑,有些裝置無法取得dhcp 位址。(目前只有Windows系統可以取得)。
所以大部分經過 AP-HUB途徑的裝置都要設定static IP。

Fonera也一樣。
Fonera會broadcast兩個SSID : MyPlace,FON_AP。

MyPlace 這個SSID,就像是一般的AP一樣,是可以自己使用的,private network (說明書上寫是經過encrypt),FON_AP這個SSID,就是給FON 網路的public SSID,會經過FON 管理。要login FON 後才能使用。

所以FON_AP 這個SSID要在Fonera連到internet後,才會出現。
如果你的Fonera沒有出現FON_AP這個SSID,就要check一下Fonera到internet的path是不是OK。

設定Fonera的internet 參數要進入管理頁面。
  1. 連上MyPlace。- 需要S/N作password。
  2. browser : http://192.168.10.1
  3. user/password : admin/admin
  4. status : 可以看看目前的狀態
  5. Advance : internet,可以選dhcp, static,我的例子就要選static,然後設定為家中ipshare的一個client。gateway, dns 都要設對。
  6. 可以設定public, wan, private 間的互通關係。public -- wan default 是deny。很奇怪的是,deny 的話,fonera沒辦法連上internet,要先"allow"一下。
  7. 還有,和一般的ap一樣,設定完static後,要重新開機。
  8. NB重新搜尋AP,就出現FON_AP了。
接著,就可以follow 一般Fonera的設定動作,到Fon 網站註冊你的fonera router type,位置。

完成後,記得回到設定中,把public-- wan 設回deny,否則,以我加的網路設定,經由FON_AP進入的client,可以和家中所有client溝通,很危險的喔。

Fonera很有趣,即使在自己家中要連上FON_AP這個SSID,都要先進入FON login,在FON 網站,自己的管理頁面,還可以看到有那些人利用過你的 router,使用的流量是多少。

還會紀錄你使用過哪些router,當作是你"travel"的紀錄。

還是實際操作比較容易了解FON的作業方式,原來,和一般的Wifi provider一樣,連線進入FON後,都要login,才能到internet,username/password可以到FON註冊。

可以買點數或是買Fonera(變成linus),取得連線的credit。

像我有一台fonera(感謝hemi),並且設定成Linus,所以用我的username/password 可以login任何人的FON_AP。
任何有FON account的人也可以login我的fonera。

真有趣。


若是說有什麼不方便的地方,大概是要在google map上設定自己的位置,很難設,因為住在小地方,google map 解析度沒那麼高,所以很難設定精確。