Cypress Wireless USB modul (CYWM6935)
-
Robert-
Nálam tesztprogrem:
[/code]
Kód: Egész kijelölése
$crystal = 14745600 'Sebesseg
$regfile = "M48def.dat" 'Chip
$baud = 9600
'Cypress
Dim O As Byte
Dim M As Byte
Dim Ut As Byte
Dim Cim(2) As Byte
Dim A As Byte
Dim Adat As Byte
Dim Hx As String * 2
Config Portb.2 = Output 'SS
Config Portb.3 = Output '24-kék- Data out MOSI
Config Pinb.4 = Input '25- szürke- Data input MISO
Config Portb.5 = Output '26-rózsa- SPI CLK
Config Portb.0 = Output '27-zöld- rf /reseet
Config Portd.7 = Output '28-sárga- rf /powedown
Config Pind.3 = Input ' 4-lila- IRQ
Irq Alias Pind.3
Be Alias Pinb.4
Clk Alias Portb.5
Rfreset Alias Portb.0
Rfpwr Alias Portd.7
Cs Alias Portb.2 '23-fehér- /Chip select
' Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = None , Clock = Portb.5
Config Spi = Hard , Master = Yes , Polarity = Low , Clockrate = 64 , Noss = 1
Enable Interrupts
Enable Int1
do
Print "Cypress modul teszt..."
Reset Rfreset
Set Rfreset
Set Rfpwr
Spiinit
Set Cs
Input "Olvas <0> Ir <1> ?" , Ut
Input " hexa parancs :" , Hx
Cim(1) = Hexval(hx)
If Ut = 0 Then
Reset Cs
Spiout Cim(1) , 1
Spiin A , 1
Set Cs
Print Hex(cim(1)) ; " cimen adat=" ; A ; " " ; Hex(a)
End If
If Ut = 1 Then
Input "Adat? " , Cim(2)
Cim(1) = Cim(1) + 128
Reset Cs
Spiout Cim(1) , 2
Set Cs
Print Cim(1) ; " cimre írt adat=" ; Cim(2)
End If
loop
-
Robert-
Kipróbáltam a teszt progit amit küldtél (HW SPI-vel)!
Regiszterek kiolvasásánál a következő eredményt kapom:
H00 regiszter: H07
H01 regiszter: H00
H02 regiszter: H4A
H03 regiszter: H00
H04 regiszter: H00
H05 regiszter: H01
H06 regiszter: H03
Ezek az értékek a bekapcsolás után vannak! Ezután megpróbáltam írni őket (05ös és 06os regiszterrel próbálkoztam), de mindig az előbb leírt eredményt kaptam vissza függetlenül attól, hogy mit írtam bele! Ezek szerint az SPI busz rendesen kommunikál a modullal, de akkor miért nem tudom írni a regisztereket???
Regiszterek kiolvasásánál a következő eredményt kapom:
H00 regiszter: H07
H01 regiszter: H00
H02 regiszter: H4A
H03 regiszter: H00
H04 regiszter: H00
H05 regiszter: H01
H06 regiszter: H03
Ezek az értékek a bekapcsolás után vannak! Ezután megpróbáltam írni őket (05ös és 06os regiszterrel próbálkoztam), de mindig az előbb leírt eredményt kaptam vissza függetlenül attól, hogy mit írtam bele! Ezek szerint az SPI busz rendesen kommunikál a modullal, de akkor miért nem tudom írni a regisztereket???
Bocsi hogy belepofázok, de nekem így müxik (igaz vagy csak az adás, vagy csak a vétel, ha váltok akkor még van valami probléma):
'Atmega128 + Cypress USB olvasas program
'PB7 Nss_port
'PB4 IRQ
'PB6 Npd_port
'PB5 Reset
'PB2 MOSI
'PB3 MISO
'PB1 CLK
$regfile = "m128def.dat" 'regiszterfájl definíció
$crystal = 11059200
$baud = 9600
$lib "glcdKS108.lbx"
$include "font8x8.font"
Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2
Config Spi = Hard , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16
Spiinit
Dim Azonosito As Byte
Dim Ch As Byte
Dim Datain(10) As Byte
Dim Utasitas As Byte
Dim Numdatain As Byte
Dim Be_adat As Byte
Dim Slave_cim As Byte
Dim Master_cim As Byte
Dim Sajat_cim As Byte
Declare Sub Wspi(byval Aaddr As Byte , Byval Vaalue As Byte)
Declare Function Rspi(byval Aaddr As Byte) As Byte
Declare Sub Rf_kuldes(master_cim As Byte , Slave_cim As Byte , Adat As Byte)
Declare Sub Rx_init(byval Csatorna As Byte)
Declare Sub Tx_init(byval Csatorna As Byte)
Declare Sub Rf_vetel()
Config Portb.7 = Output
Config Portb.4 = Input
Config Portb.6 = Output
Config Portb.5 = Output
Config Portb.2 = Output
Config Portb.1 = Output
Config Portb.3 = Input
Config Porte.0 = Input
Config Porte.1 = Output
Nss_port Alias Portb.7
Irq_port Alias Portb.4
Irq_pin Alias Pinb.4
Npd_port Alias Portb.6
Mosi Alias Portb.2
Miso Alias Portb.3
Clk Alias Portb.1
Nreset Alias Portb.5
Reset Npd_port
Set Nss_port
Mosi = 0
Miso = 1
Clk = 0
Nreset = 1
Irq_port = 0
'===============================================================================
Set Npd_port
Waitus 5000
'====================== inicializalas ==========================================
Azonosito = 12
Utasitas = 15
Sajat_cim = 0
Setfont Font8x8
Cls
Do
Call Rf_vetel
Lcdat 1 , 1 , "Csat" , 0
Lcdat 2 , 8 , Azonosito , 0
Lcdat 1 , 40 , "Be1" , 0
Lcdat 2 , 44 , Slave_cim , 0
Lcdat 1 , 72 , "Be2" , 0
Lcdat 2 , 80 , Master_cim , 0
Lcdat 1 , 104 , "Be3" , 0
Lcdat 2 , 108 , Be_adat , 0
Waitms 25
'Call Rf_kuldes(sajat_cim , Azonosito , Utasitas)
Waitms 100
Loop
Sub Wspi(byval Aaddr As Byte , Byval Vaalue As Byte)
Dim W(2) As Byte
W(1) = Aaddr
W(2) = Vaalue
W(1) = W(1) Or &B10000000
Reset Nss_port
Spiout W(1) , 2
Set Nss_port
End Sub
Function Rspi(byval Aaddr As Byte) As Byte
Dim R(2) As Byte
R(1) = Aaddr
R(2) = &B00000000
Reset Nss_port
Spiout R(1) , 2
Rspi = Spdr
Set Nss_port
End Function
Sub Rf_kuldes(master_cim As Byte , Slave_cim As Byte , Adat As Byte)
Dim O As Byte
Dim Dataout(5) As Byte
Dataout(1) = 64
Dataout(2) = 65
Dataout(3) = Master_cim
Dataout(4) = Slave_cim
Dataout(5) = Adat
'While Irq_pin = 0
'Wend
Call Tx_init(40)
For O = 1 To 5
Ch = Rspi(&H1d)
Call Wspi(&H0d , &B00000001)
Call Wspi(&H03 , &B01000000)
Call Wspi(&H0f , Dataout(o))
Do
Loop Until Irq_pin = 1
Call Wspi(&H0d , &B00000010)
Do
Loop Until Irq_pin = 1
Call Wspi(&H03 , &H00)
Waitms 25
Next O
Dataout(1) = 0
Dataout(2) = 0
Dataout(3) = 0
Dataout(4) = 0
Dataout(5) = 0
End Sub
Sub Rf_vetel()
Dim I As Byte
Dim K As Byte
Dim F As Byte
Dim J As Byte
Be_adat = 0
Slave_cim = 0
Master_cim = 0
Call Rx_init(40)
Numdatain = 1
Do
If Irq_pin = 1 Then
Datain(numdatain) = Rspi(&H09)
Incr Numdatain
End If
Loop Until Numdatain = 6
For I = 1 To 5
If Datain(i) = 65 Then
If I = 1 Then
K = 4
F = 3
J = 2
End If
If I = 2 Then
K = 5
F = 4
J = 3
End If
If I = 3 Then
K = 1
F = 5
J = 4
End If
If I = 4 Then
K = 2
F = 1
J = 5
End If
If I = 5 Then
K = 3
F = 2
J = 1
End If
Be_adat = Datain(k)
Slave_cim = Datain(f)
Master_cim = Datain(j)
End If
Next I
End Sub
Sub Tx_init(csatorna As Byte)
Call Wspi(&H06 , &B00001011)
Call Wspi(&H10 , &B11111111)
Call Wspi(&H24 , &B01000000)
Call Wspi(&H1c , &H01)
Ch = Rspi(&H1d)
Call Wspi(&H23 , &B00000111)
Call Wspi(&H21 , Csatorna)
End Sub
Sub Rx_init(csatorna As Byte)
Call Wspi(&H06 , &B00001011)
Call Wspi(&H10 , &B00000000)
Call Wspi(&H24 , &B01000000)
Call Wspi(&H1c , &H01)
Ch = Rspi(&H1d)
Call Wspi(&H21 , Csatorna)
Call Wspi(&H03 , &B10000000)
Waitus 250
Call Wspi(&H07 , &B00000001)
End Sub
End
'Atmega128 + Cypress USB olvasas program
'PB7 Nss_port
'PB4 IRQ
'PB6 Npd_port
'PB5 Reset
'PB2 MOSI
'PB3 MISO
'PB1 CLK
$regfile = "m128def.dat" 'regiszterfájl definíció
$crystal = 11059200
$baud = 9600
$lib "glcdKS108.lbx"
$include "font8x8.font"
Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2
Config Spi = Hard , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16
Spiinit
Dim Azonosito As Byte
Dim Ch As Byte
Dim Datain(10) As Byte
Dim Utasitas As Byte
Dim Numdatain As Byte
Dim Be_adat As Byte
Dim Slave_cim As Byte
Dim Master_cim As Byte
Dim Sajat_cim As Byte
Declare Sub Wspi(byval Aaddr As Byte , Byval Vaalue As Byte)
Declare Function Rspi(byval Aaddr As Byte) As Byte
Declare Sub Rf_kuldes(master_cim As Byte , Slave_cim As Byte , Adat As Byte)
Declare Sub Rx_init(byval Csatorna As Byte)
Declare Sub Tx_init(byval Csatorna As Byte)
Declare Sub Rf_vetel()
Config Portb.7 = Output
Config Portb.4 = Input
Config Portb.6 = Output
Config Portb.5 = Output
Config Portb.2 = Output
Config Portb.1 = Output
Config Portb.3 = Input
Config Porte.0 = Input
Config Porte.1 = Output
Nss_port Alias Portb.7
Irq_port Alias Portb.4
Irq_pin Alias Pinb.4
Npd_port Alias Portb.6
Mosi Alias Portb.2
Miso Alias Portb.3
Clk Alias Portb.1
Nreset Alias Portb.5
Reset Npd_port
Set Nss_port
Mosi = 0
Miso = 1
Clk = 0
Nreset = 1
Irq_port = 0
'===============================================================================
Set Npd_port
Waitus 5000
'====================== inicializalas ==========================================
Azonosito = 12
Utasitas = 15
Sajat_cim = 0
Setfont Font8x8
Cls
Do
Call Rf_vetel
Lcdat 1 , 1 , "Csat" , 0
Lcdat 2 , 8 , Azonosito , 0
Lcdat 1 , 40 , "Be1" , 0
Lcdat 2 , 44 , Slave_cim , 0
Lcdat 1 , 72 , "Be2" , 0
Lcdat 2 , 80 , Master_cim , 0
Lcdat 1 , 104 , "Be3" , 0
Lcdat 2 , 108 , Be_adat , 0
Waitms 25
'Call Rf_kuldes(sajat_cim , Azonosito , Utasitas)
Waitms 100
Loop
Sub Wspi(byval Aaddr As Byte , Byval Vaalue As Byte)
Dim W(2) As Byte
W(1) = Aaddr
W(2) = Vaalue
W(1) = W(1) Or &B10000000
Reset Nss_port
Spiout W(1) , 2
Set Nss_port
End Sub
Function Rspi(byval Aaddr As Byte) As Byte
Dim R(2) As Byte
R(1) = Aaddr
R(2) = &B00000000
Reset Nss_port
Spiout R(1) , 2
Rspi = Spdr
Set Nss_port
End Function
Sub Rf_kuldes(master_cim As Byte , Slave_cim As Byte , Adat As Byte)
Dim O As Byte
Dim Dataout(5) As Byte
Dataout(1) = 64
Dataout(2) = 65
Dataout(3) = Master_cim
Dataout(4) = Slave_cim
Dataout(5) = Adat
'While Irq_pin = 0
'Wend
Call Tx_init(40)
For O = 1 To 5
Ch = Rspi(&H1d)
Call Wspi(&H0d , &B00000001)
Call Wspi(&H03 , &B01000000)
Call Wspi(&H0f , Dataout(o))
Do
Loop Until Irq_pin = 1
Call Wspi(&H0d , &B00000010)
Do
Loop Until Irq_pin = 1
Call Wspi(&H03 , &H00)
Waitms 25
Next O
Dataout(1) = 0
Dataout(2) = 0
Dataout(3) = 0
Dataout(4) = 0
Dataout(5) = 0
End Sub
Sub Rf_vetel()
Dim I As Byte
Dim K As Byte
Dim F As Byte
Dim J As Byte
Be_adat = 0
Slave_cim = 0
Master_cim = 0
Call Rx_init(40)
Numdatain = 1
Do
If Irq_pin = 1 Then
Datain(numdatain) = Rspi(&H09)
Incr Numdatain
End If
Loop Until Numdatain = 6
For I = 1 To 5
If Datain(i) = 65 Then
If I = 1 Then
K = 4
F = 3
J = 2
End If
If I = 2 Then
K = 5
F = 4
J = 3
End If
If I = 3 Then
K = 1
F = 5
J = 4
End If
If I = 4 Then
K = 2
F = 1
J = 5
End If
If I = 5 Then
K = 3
F = 2
J = 1
End If
Be_adat = Datain(k)
Slave_cim = Datain(f)
Master_cim = Datain(j)
End If
Next I
End Sub
Sub Tx_init(csatorna As Byte)
Call Wspi(&H06 , &B00001011)
Call Wspi(&H10 , &B11111111)
Call Wspi(&H24 , &B01000000)
Call Wspi(&H1c , &H01)
Ch = Rspi(&H1d)
Call Wspi(&H23 , &B00000111)
Call Wspi(&H21 , Csatorna)
End Sub
Sub Rx_init(csatorna As Byte)
Call Wspi(&H06 , &B00001011)
Call Wspi(&H10 , &B00000000)
Call Wspi(&H24 , &B01000000)
Call Wspi(&H1c , &H01)
Ch = Rspi(&H1d)
Call Wspi(&H21 , Csatorna)
Call Wspi(&H03 , &B10000000)
Waitus 250
Call Wspi(&H07 , &B00000001)
End Sub
End
-
Robert-
-
Robert-
Lehet nem vártad ki a beírás idejét? eléggé gyors ám a SPI busz....
A NoSS azt jelenti, hogy TE kezeled a SS (SlaveSelect lábat). Szóval nem igazán befolyásolhat....
De meglesem M48/88/168/8 chipekkel is. Az M48/88/168 esetén egy-két dolog érdekes...
Pl. a I2C szoftveres emuláció, ha HW lábakon van M48/88/168 esetén hibázik. A HWes libraryt használva teljesen jó.
Illetve meglesem a fellelhető Bascomok alatt is (1.11.7.4, 7.5, 7.9, 8.1, 8.3/8.3R2).
Ez hétvégén tud bekövetkezni...
A NoSS azt jelenti, hogy TE kezeled a SS (SlaveSelect lábat). Szóval nem igazán befolyásolhat....
De meglesem M48/88/168/8 chipekkel is. Az M48/88/168 esetén egy-két dolog érdekes...
Pl. a I2C szoftveres emuláció, ha HW lábakon van M48/88/168 esetén hibázik. A HWes libraryt használva teljesen jó.
Illetve meglesem a fellelhető Bascomok alatt is (1.11.7.4, 7.5, 7.9, 8.1, 8.3/8.3R2).
Ez hétvégén tud bekövetkezni...
Hali!
Elsőnek szeretném megköszönni Robert munkáját (forráskód+5V->3.3V "kapcsolási rajz" - ez utóbbi megspórolt nekem egy figyelmetlenségből leégetést
). A forráskód kiváló volt tesztelni, hogy rendben van-e a hardverem (M48 + CYWUSB6935). Működnek 
Másodsorban kíváncsi lennék, hogy ti hogy használjátok a SERDES_CTL regisztert (0x06), mert nekem nem tiszta, hogyha byte-serial módban vagyok, akkor DIO/DIOVAL-t kéne használnom (amit nem is tudok, mert a boardra nincs kivezetve ez a két pin), viszont a gyári default értéke a regiszternek 0x03, vagyis ki van kapcsolva a SERDES használata. Be kéne kapcsolni?
Más: tresholdoknak egymás komplementereinek kell lenniük (high és low)? Ha nem, akkor melyik a domináns?
A válaszokat előre is köszi:
Visko
UI: assemblyben kell írnom a programot, mert házi lesz, ennek ellenére nagyon hasznos ez az egész site, gratulálok!
Elsőnek szeretném megköszönni Robert munkáját (forráskód+5V->3.3V "kapcsolási rajz" - ez utóbbi megspórolt nekem egy figyelmetlenségből leégetést
Másodsorban kíváncsi lennék, hogy ti hogy használjátok a SERDES_CTL regisztert (0x06), mert nekem nem tiszta, hogyha byte-serial módban vagyok, akkor DIO/DIOVAL-t kéne használnom (amit nem is tudok, mert a boardra nincs kivezetve ez a két pin), viszont a gyári default értéke a regiszternek 0x03, vagyis ki van kapcsolva a SERDES használata. Be kéne kapcsolni?
Más: tresholdoknak egymás komplementereinek kell lenniük (high és low)? Ha nem, akkor melyik a domináns?
A válaszokat előre is köszi:
Visko
UI: assemblyben kell írnom a programot, mert házi lesz, ennek ellenére nagyon hasznos ez az egész site, gratulálok!
