Hallo,
ich habe ein Problem mit meiner SD-Kartenansteuerung. Es wird keine
Karte erkannt (getestet mit mehreren Karten 16,32 und 64MB)
Verwendet wird die Lib von Roland Riegel in der aktuellen Version.
Hardware-Aufbau (siehe Bild im Anhang):
- ATMega 644P-20 mit 22,11 Mhz bei 5V
- Levelshifter TXB0104 (soll bis 20Mbps gehen)
- 3,3V Spannungsregler
- 100n und 47µF an der SD
- 10k Pullup gegen 3V3 an DO
In der Init-Funktion steigt er immer mit "keine Kartenresponse" aus.
1
**
2
*\ingroupsd_raw
3
*Initializesmemorycardcommunication.
4
*
5
*\returns0onfailure,1onsuccess.
6
*/
7
uint8_tsd_raw_init()
8
{
9
/* enable inputs for reading card status */
10
//configure_pin_available();
11
//configure_pin_locked();
12
13
uart_puts("SD: in init\n");
14
15
/* enable outputs for MOSI, SCK, SS, input for MISO */
16
configure_pin_mosi();
17
configure_pin_sck();
18
configure_pin_ss();
19
configure_pin_miso();
20
21
unselect_card();
22
23
/* initialize SPI with lowest frequency; max. 400kHz during identification mode of card */
24
SPCR=(0<<SPIE)|/* SPI Interrupt Enable */
25
(1<<SPE)|/* SPI Enable */
26
(0<<DORD)|/* Data Order: MSB first */
27
(1<<MSTR)|/* Master mode */
28
(0<<CPOL)|/* Clock Polarity: SCK low when idle */
29
(0<<CPHA)|/* Clock Phase: sample on rising SCK edge */
30
(1<<SPR1)|/* Clock Frequency: f_OSC / 128 */
31
(1<<SPR0);
32
SPSR&=~(1<<SPI2X);/* No doubled clock frequency */
Was habe ich getestet:
- Spannungen 3V3 und 5V sind ok.
- Einzelne Ausgaben auf den Levelshifter werden auf die andere Seite
gegeben
- RS232, SHT11 und Luftdrucksensor funktionieren, ebenso ein an den
1-wire Bus angeschlossener DS18B20
- SD-Karte als erstes in main.c ansprechen (nach RS232 Init und I2C
Init, sollte also genug Startup-Time für die Karte vorhanden sein)
- ISP abgezogen
Leider habe ich kein Oszi, um die SPI Leitungen direkt anzuschauen.
Hm, nach Anschauen des Datenblatts ist es das wohl nicht.
Oder vielleicht stört die LED beim Richtungs-Sensing, und die Karte wird
somit nie aktiviert? Vielleicht klappt's ja, wenn man die mal abklemmt.
Könnte das hier das Problem sein ?
Zitat aus dem Datenblatt:
the TXB0104 should not be used in applications such as I2C, 1-Wire, or
an MMC card
interface where an open-drain driver is connected on the bidirectional
data I/O. For these applications, use a
device from the TI TXS01xx series of level translators.
Hmm, könnte sein. Wenn ich aber ehrlich bin, kann ich die Bedeutung des
o.a. Satzes nicht so ganz nachvollziehen (leichte Wissenslücken :-).
Heisst das eventuell, dass die Ausgänge/Eingänge mit Pullups
ausgestattet werden müssen ?
Habe jetzt den TXB gegen einen TXS ausgetauscht. Hat aber leider nicht
geholfen.
Werd' noch mal den 10K pullup an DO gegen einen 330k tauschen (hab
keinen kleneren hier)
Muss wohl woanders der Wurm drin sein ...
Pete K. wrote:
> Habe jetzt den TXB gegen einen TXS ausgetauscht. Hat aber leider nicht> geholfen.>> Werd' noch mal den 10K pullup an DO gegen einen 330k tauschen (hab> keinen kleneren hier)>> Muss wohl woanders der Wurm drin sein ...
So, jetzt sind parallel zwei 330k (165k) an DO als Pullup, leider keine
Veränderung.
Ein Aufbau mit Widerständen als Spannungsteiler funktioniert wunderbar.
Die nächste Platine wird also ohne TXS0104 Levelschifter gebaut.
Schon mal gut zu wissen, dass es nicht an der Software liegt.
Falls doch noch jemand einen Tipp hat, wie man den TXS0104 zur Mitarbeit
bewegen kann, bitte melden ...
Pete K. schrieb:> Ein Aufbau mit Widerständen als Spannungsteiler funktioniert wunderbar.> Die nächste Platine wird also ohne TXS0104 Levelschifter gebaut.>> Schon mal gut zu wissen, dass es nicht an der Software liegt.>> Falls doch noch jemand einen Tipp hat, wie man den TXS0104 zur Mitarbeit> bewegen kann, bitte melden ...
Es funktioniert, wenn man an den DO-Pin der SD-Karte einen Pullup
Widerstand einsetzt, der einen Stromfluss von mindestens 2mA (1k5)
zulässt.
Datenblatt:
"Input Driver Requirements
Typical IIN vs VIN characteristics of the TXB0104 are shown in Figure 2.
For proper operation, the device driving
the data I/Os of the TXB0104 must have drive strength of at least ±2
mA."
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.