Hallo,
hat irgendjemand hier im Forum schon mal den SI4700, SI4701 oder SI47xx
zum Laufen gebracht? Ich habe zwar ein Datenblatt, da steht aber nichts
über das Kommunikationsprotokoll drin, und dazu brauche ich dringend
Informationen. Ich versuche gerade über so eine Firmware von Silab den
Code rauszubekommen, leider nutzen die da aber SPI, und nicht I2C, was
ich für meine Applikation benötige. Falls jemand also mir noch
zusätzlich Informationen geben kann, wäre ich sehr dankbar, denn über
google findet man kaum was brauchbares.
Mail: picplayer ät googlemail (dot) com
Gruß
Stampede
Also irgendwie steige ich da nicht ganz durch wie diese I2C mit dem
SI4701 lufen soll. Normalerweise gibt man ja das Register das man
beschreiben möchte an. Hier heißt es jedoch:
"For write operations, the control word and device acknowledge is
followed by an eight bit data word latched
internally on rising edges of SCLK. The device always acknowledges the
data by setting SDIO low on the next
falling SCLK edge. Any number of data bytes may be written and register
addresses are incremented by an
internal address counter, starting with the upper byte of register 02h,
followed by the lower byte of register 02h, and
wrapping back to 00h at the end of the register file."
"For read operations, the control word and device acknowledge is
followed by an eight bit data word shifted out on
falling SCLK edges. The controller IC returns an acknowledge if
additional data will be transferred. Any number of
data bytes can be read and register addresses are incremented by an
internal address counter, starting at the
upper byte of register 0Ah, followed by the lower byte of register 0Ah,
and wrapping back to 00h at the end of the
register file. The transfer ends with the STOP conditions regardless of
the state of the acknowledge."
Ich beginne nun Register 0x02 mit 0x4001 wie im datenblatt vorgeschlagen
zu beschreiben. Dann muss ich 110ms warten. Da stellt sich mir die
Frage, ob ich erst das I2C wieder deaktivieren muss? (ich mache das
nicht). Komischerweise macht das Teil aber gar nicht, noch nicht mal die
GPIO1..3 gehen auf high, wie es ihm vorgeschrieben habe...
Wenn ich das richtig verstehe, startet jeder Schreibvorgang bei Register
0x2, und dann sollen die Folgeregister beschrieben werden. Lustigerweise
sind die letzten 4 Regiser "reserved", und dazu steht: "Any register not
listed is reserved and should not be written. Writing to reserved
registers may result in unpredictable behavior." Wie soll der
Wrap-around denn jemals funktionieren, wenn man da nicht reinschreiben
darf? Man braucht ihn zar auch nie, da Reg0x0 und Reg0x1 Read-Only sind,
trotzdem ist das irgendwie blöd gemacht.
Wenn also jemand noch Erfahrungen mit dem Teil hat bitte posten!
Gruß
Stampede
Kennst Du den hier schon?
http://terraelectronica.ru/files/news/si4700-B15rev1_0.pdf
Ist zwar eigentlich für den Si4700, aber der Si4701 wird dort auch
erwähnt. Dieser Datasheet enthält eine vollständige Erklärung der
Register.
Viel Erfolg!
gruß
daniel
Ich werd wahnsinnig!!! Diesem Scheisschip ist einfach nichts zu
entlocken. Das I2C schmiert schon nach dem Schreiben ab. Weiß einer
woran das liegen könnte?
Ich empfange! Es lag nicht am SI4701, sondern an einem Hardwarebug des
MSSP Modul (sendet einfach keine Stop Condidion). Habe I2C nun in
Software implementiert und ich Kiste läuft :)
Hallo Stampede,
ich steh derzeit vor dem gleichen Problem wie du damals, ich bekomm das
ding mit I2C einfach nicht zum laufen.
Der Ablauf meines Programms entspricht genau dem wie es im Datasheet
spezifiziert is, aber ohne Erfolg.
Kannst du mal die Codesequenz für den Powerup liebenswerter Weise preis
geben?
bzw was für Probleme hattest du noch mit dem Ding und wie hast du sie
behoben?
Gruß der Schnitzler
* also erstmal viel Flussmittel aus so nem Flussmittelstift
* Lötpaste aus so ner Spritzendingsda
* Chip platzieren
* Heißluftfön von unten Platine vorerhitzt
* Heißluftfön von oben bis Lötpaste zu Lötzinn wird
mehr nicht :) geht aber auch mit Lötkolben, sollte allerdings ne
ziemlich gute kleine Spitze haben. Aber des mit dem Heißluftfön ging
gut. Du kannst natürlich auch so nen selbstbau Reflowofen verwenden.
Hallo,
um I2C zu nutzen, muss das Interface korrekt eingestellt sein. Im alten
Modus bedeutet das, dass die GPIO1..3 auf low liegen (bzw. floating),
SEN high, und während des Resets muss SDIO auf low liegen. Alternativ
kann man I2C auch einstellen, indem GPIO3 auf high liegt, und während
des Resets GPIO1 auf high gezogen wird.
Wird diese Abfolge eingehalten, funktioniert das I2C Interface des Chips
ohne Probleme.
1
#pragma udata
2
unsignedcharSI470xdata[31];// Commandopacket für SI4701
SI470xdata[i+StatusRSSI_h]=I2CReceive();// read beginns on register 10
114
I2CAckRx();
115
}
116
for(i=0;i<4;i++)// Array is only 32Byte
117
{// To wrap araound, new read cycle is needed
118
SI470xdata[i]=I2CReceive();
119
I2CAckRx();
120
}
121
I2CReceive();//dummyread without Ack to end transmission
122
I2CNAckRx();
123
I2CStop();
124
}
Löten des Chips ist eingentlich nicht so schwierig, man braucht nur eine
möglichst dünne Spitze (ich habe 0.4mm benutzt).
Ich habe 2 Methoden getestet:
1.Löten mit Heißluft, Lötpaste und Infrarotlampe von unten. Klappt sehr
gut.
2.Rein mit dem Lötkolben, mit Lötpaste durch ein Via von unten. Durch
das seitlich Verlöten der Pads ist diese Methode nix für zittrige Hände,
führt aber auch zum Erfolg.
Gruß
Stampede
Danke
Weißt du wie wichtig dabei das RCL-Glied ist?
Wie wichtig ist die Länge der Antenne? bzw kann man die Antenne als
Leiterschleife realisieren?
Oder sollte man lieber einen si4704/5 mit interner Antenne verwenden?
Hallo
Ich verwende ebenfalls den I2C-Bus um auf meinen si4703 zuzugreifen.
Für die auswahl des I2C-modus verwende ich den Busselectmode 2. Dazu
lege ich die GPIO Pin 1 und 3 mit einen 100kohm Pull-up auf Vcc.
VD, VA und Vio lege ich ebenfalls fix auf Vcc (=3.3V)
Als Clock verwende ich eine Oszilator der bereits eine fertiges
Clocksignal mit 32.768kHz liefert.
Zu Beginn halte ich den Chip im Reset, damit sich die Versorgung
stabiliseren und sich der Oszilator einschwingen kann.
Die SClk-Leitung halte ich bis zur ersten Startbedingung auf high.
Ich kann auf alle Register schreiben und lesen.
Jedoch wenn ich das ENABLE-Bit setze bleibt auch nach 110ms das
FIRMWARE-Bits im ChipId Register 0.
Also außer das Lesen/Schreiben der Register funktionier nichts.
Ich weiss nicht mehr was ich noch falsch machen könnte.
Hat jemand eine Idee oder hatte irgendwer ähnliche Problem?
Hi,
waere es moeglich den Source code zu bekommen oder ueber Source Forge
als Projekt mit einem Schalt/Loetplan zu bekommen? Wuerde gerne
ausprobieren wie es geht und dann weitere Sachen darauf basierend
entwickeln.
Gruesse,
Peter