MicroSD stört die ISP-Programmierung

7

Ich habe eine microSD an ein Arduino angeschlossen und kann sie nicht über den ISP programmieren, ohne die SD-Karte zu entfernen. Weiß jemand, wie man verhindert, dass die SD-Karte die ISP-Programmierung stört?

Einzelheiten:

Dies ist der microSD-Ausbruch: https://www.adafruit.com/products/254

Ich verwende einen ATMEGA328P mit 3,3 V und 8 MHz.

Ich verwende keinen Bootloader und kann aus mehreren Gründen die serielle Schnittstelle nicht zum Programmieren verwenden.

Vielen Dank!

März 1980
quelle
1
Haben Sie versucht, einen 10k-Widerstand von CS auf +3,3 V zu setzen? An welchen Pin ist CS gebunden?
frarugi87

Antworten:

3

Da es sich bei der SD-Karte um ein SPI-Gerät handelt, werden dieselben Pins wie bei der ISP-Schnittstelle verwendet. Die einzige Möglichkeit, die SD-Karte nicht mit dem ISP zu stören, besteht darin, die SD-Karte nicht angeschlossen zu haben.

Wie Sie gesehen haben, kann dies durch Entfernen der Karte erreicht werden.

Dies kann auch durch Hinzufügen eines Drei-Zustands-Puffers zwischen der MCU und der Karte erreicht werden, sodass die MCU die Karte nur dann mit dem SPI-Bus verbindet, wenn sie betriebsbereit ist. Im Standardbetrieb wird die Karte getrennt.

Majenko
quelle
Müssen Sie dann den Tristate-Puffer deaktivieren, bevor Sie die MCU programmieren können?
März 1980
Wenn Sie ihn richtig verdrahtet haben, wird der Puffer standardmäßig ausgeschaltet, wenn die MCU ihn nicht mehr aktiv aktiviert.
Majenko
Das hört sich toll an! Danke für den Tipp. (Haben Sie Empfehlungen für welchen Puffer ich verwenden soll?)
März 1980
1
@ChrisStratton Ja, viele (die meisten) SPI-Geräte laufen weiterhin mit erhöhtem CS. Bei keinem anderen SPI-Gerät muss die Uhr mit erhöhtem CS ausgeführt werden . Dies ist ein grundlegender Unterschied zwischen SD-Karten und echten SPI-Geräten, von dem bekannt ist, dass er vor Ort Probleme verursacht. Und dann haben Sie natürlich die Unschärfe der SD-Karten-SPI-Schnittstelle, die von verschiedenen Herstellern mit vielen billigen chinesischen Herstellern unterschiedlich implementiert wird usw. Ich habe einige SD-Karten gesehen, die ihren MISO-Pin nicht einmal dreifach angeben. Als Faustregel habe ich SD-Karten immer auf einen eigenen SPI-Kanal gelegt.
Majenko
1
Das ist ein nützliches Detail - Ihre Antwort wäre viel besser, wenn der eigentliche Text diese Erklärung enthalten würde, warum Sie empfehlen, eine SD-Karte im Gegensatz zu einem normalen SPI-Gerät eindeutig zu handhaben.
Chris Stratton
1

Ich hatte genau das gleiche Problem, auch mit Arduino (Atmega 328P). Ich habe ein SD-Kartenmodul mit einem anderen Layout, aber auch mit einem Level Shifter. Mein Stromkreis läuft mit 5 V (was bei Verwendung eines Pegelumsetzers angemessen ist).

Geben Sie hier die Bildbeschreibung ein

Um das Problem zu beheben, habe ich gerade einen Pullup-Widerstand (10k) auf meiner eigenen Platine an der Chipauswahlleitung des SD-Moduls installiert, wodurch die SD-Karte während der Programmierung der MCU nicht ausgewählt wird. Jetzt funktioniert es.

Geben Sie hier die Bildbeschreibung ein

Es scheint kein Pullup im Modul integriert zu sein. Daher ist der CS während der Programmierung niedrig (ohne Pullup), die SD-Karte ist der Meinung, dass sie die SPI-Befehle beantworten sollte, und stört daher die Kommunikation mit der MCU, weshalb die Programmierung über einen ISP fehlschlägt.

oliver
quelle