C USARTD0 als SPI?

@Dirk
Danke für die ganze Mühe. Klappt leider auch nicht. Versuche es jetzt mal mit dem ASF..
 
Wenn Du Atmel Studio benutzt:

File -> New -> ExampleProject
nach
AT45DBX DataFlashExample1 - XMEGA A3BU Explained
suchen.

Das ist ein Beispielprogramm für Dein Board, um den Flash-Chip zu benutzen.
Damit könntest Du zumindest feststellen, ob er in Ordnung ist.

Das habe ich getan. Das Programm kommt nicht mal bis ans Ende (dort wo die LED eingeschaltet werden soll..) also doch gegrillt?



CodeBox C
int main(void)
{
   uint16_t i;
   sysclk_init();

   // Initialize the board.
   // The board-specific conf_board.h file contains the configuration of the board
   // initialization.
   board_init();
   at45dbx_init();

   // Prepare half a data flash sector to 0xAA
   for(i=0;i<AT45DBX_SECTOR_SIZE/2;i++) {
       ram_buf[i]=0xAA;
   }
   // And the remaining half to 0x55
   for(;i<AT45DBX_SECTOR_SIZE;i++) {
       ram_buf[i]=0x55;
   }

   at45dbx_write_sector_open(TARGET_SECTOR);
   at45dbx_write_sector_from_ram(ram_buf);
   at45dbx_write_close();

   // Read back this sector and compare to expected values
   at45dbx_read_sector_open(TARGET_SECTOR);
   at45dbx_read_sector_to_ram(ram_buf);
   at45dbx_read_close();
   for(i=0;i<AT45DBX_SECTOR_SIZE/2;i++) {
       if (ram_buf[i]!=0xAA) {
           test_ko();
       }
   }
   for(;i<AT45DBX_SECTOR_SIZE;i++) {
       if (ram_buf[i]!=0x55) {
           test_ko();
       }
   }

   // Write one data flash sector to 0x00, 0x01 ....
   for(i=0;i<AT45DBX_SECTOR_SIZE;i++) {
       ram_buf[i]=i;
   }
   at45dbx_write_sector_open(TARGET_SECTOR);
   at45dbx_write_sector_from_ram(ram_buf);
   at45dbx_write_close();

   // Read one data flash sector to ram
   at45dbx_read_sector_open(TARGET_SECTOR);
   at45dbx_read_sector_to_ram(ram_buf);
   at45dbx_read_close();
   for(i=0;i<AT45DBX_SECTOR_SIZE;i++) {
       if ( ram_buf[i]!=(i%0x100) ) {
           test_ko();
       }
   }

[B]   gpio_set_pin_low(DATA_FLASH_LED_EXAMPLE_1);[/B]
   while (1);
}
 
Tja, da hilft dann wohl nur konsequent bei Null anzufangen.
Testprogramm schreiben, das nur diese LED blinken läßt...
(um auszuschließen, daß die LED kaputt ist)
 
Wenn ich den Code für den Flashspeicher raus nehme, leuchtet die LED zum Schluss. Also Hardware (vill. Bis aus den Flash) ist inordnung.
 
In dem Fall würde ich als nächstes den Flash tauschen, was bei dem fertigen Board natürlich nicht so einfach ist...
 
Es gibt natürlich noch viele andere Möglichkeiten. Um nur eine zu erwähnen: hast Du mal in der Nähe gelötet?
Vielleicht ist etwas Lötzinn auf das Board gespritzt und schließt zwei Leiterbahnen kurz.
 
Es gibt natürlich noch viele andere Möglichkeiten. Um nur eine zu erwähnen: hast Du mal in der Nähe gelötet?
Vielleicht ist etwas Lötzinn auf das Board gespritzt und schließt zwei Leiterbahnen kurz.

Habe an dem Board überhaupt nichts gemacht, geschweige denn irgendetwas gelötet. Habe bis jetzt immer nur die Stiftleisten genutzt.
Kann ich den Flash denn irgendwelche Daten geschickt haben, was ich nicht wollte, woraufhin er jetzt nicht mehr mit mir sprechen möchte?

Solch ein Phänomen habe ich mal bei einer RTC gehabt (I2C). Dort habe ich ein paar Sachen debuggt, und irgendwann hat das Teilchen nicht mehr mit mir geredet (Habe keine Gewalt bei dem kleinen angewandt..) :p
 
Ob das vielleicht der Grund für die Abkündigung ist?

upload_2017-6-12_7-42-33.png
 
Ob das vielleicht der Grund für die Abkündigung ist?

Für was, weil der auf deinem Board möglicherweise kaputt ist? ;)

Als Atmel noch Atmel war, haben sie die Dataflash Sparte an Adesto (http://www.adestotech.com) verkauft.
Adesto hat den 642 überarbeitet, der nennt sich nun AT45DB641E. Dieser ist nicht mehr hundertprozentig kompatibel zum alten 642, sollte aber nicht der Grund sein, warum er bei dir nicht antwortet.

Dirk :ciao:
 
Für was, weil der auf deinem Board möglicherweise kaputt ist? ;)

Als Atmel noch Atmel war, haben sie die Dataflash Sparte an Adesto (http://www.adestotech.com) verkauft.
Adesto hat den 642 überarbeitet, der nennt sich nun AT45DB641E. Dieser ist nicht mehr hundertprozentig kompatibel zum alten 642, sollte aber nicht der Grund sein, warum er bei dir nicht antwortet.

Dirk :ciao:

Das ist mir bewusst. Ich meinte auch eher das sie ihn nicht mehr Produzieren. Gibt es vill. gab es vermehrte Ausfälle von den Flashs.. Hm wer weiß :)
 
Gibt es da noch irgendwelche Ersatztypen die man noch erwerben kann? Habe jetzt nur die AT25xx gefunden..
 
Der Grund für die Abkündigung liegt vermutlich eher darin, daß fast alle anderen Speicher (Flash, EEPROM, F-RAM etc.) eine andere, einheitliche Pinbelegung haben.

Auf Deinem Board ist (unbestückt) auch ein Platz für die gängigere Pinbelegung. Da der CS an beide gleichzeitig geht, darf natürlich nur einer bestückt sein.
Im Schaltplan stehen für jeden Platz rund ein halbes Dutzend alternative Chips (von Atmel natürlich, andere passen aber auch, zumindest bei der gängigeren Pinbelegung).
 
Habe jetzt einen SST26VF016B´gefunden. Werde den alten mal runter pusten und schauen ob der neue mir antwortet.
 
Was soll ich sagen.. Die Pinbelegung ist anders, wie Mikro23 schon gesagt hat, gibt es daneben (neben der alten Flash Bestückpositon) eine andere, wo eine kompatible Bestückposition vorhanden ist. Dort habe ich den Flash (siehe obigen Post) drauf gelötet.
Hier ist das Status Register auf 0x05.. Es kommt wieder keine Antwort.. Habe es mit @Dirk seiner Software SPI versucht...
 
Okaay..
Jetzt habe ich für MISO mal den PullUp aktiviert..


CodeBox C
void SPI_Init(void)
{ 

DISPLAY_CONTROL_PORT.OUTSET = 1<<DISPLAY_SIGNAL_CS;

DISPLAY_CONTROL_PORT.DIRSET = 1<<DISPLAY_SIGNAL_CS; // CS: Output, high

DISPLAY_SPI_PORT.OUTSET = (1<<DISPLAY_SPI_MOSI) | (1<<DISPLAY_SPI_SCK); // MOSI, SCK: Output, high


DISPLAY_SPI_PORT.DIRSET = (1<<DISPLAY_SPI_MOSI) | (1<<DISPLAY_SPI_SCK);

DISPLAY_SPI_PORT.DIRCLR = 1<<DISPLAY_SPI_MISO; // MISO: Input, high impedance state


DISPLAY_SPI_PORT.OUTCLR = 1<<DISPLAY_SPI_MISO;


[B]DISPLAY_SPI_PORT.PIN2CTRL = PORT_OPC_WIREDANDPULL_gc;[/B]


}


Auf einmal habe ich Signale die aussehen wie ein Rechteck. Waaahnsinn.
 
Sehe ich das richtig, dass wenn ich dem Flash 0x00 sende, 0x53 zurück kommen müsste?
upload_2017-6-12_15-11-50.png


Diese Informationen konnte ich jetzt korrekt auslesen..
upload_2017-6-12_15-13-19.png
 
Okaay..
Jetzt habe ich für MISO mal den PullUp aktiviert..
Auf einmal habe ich Signale die aussehen wie ein Rechteck. Waaahnsinn.
So auf die Schnelle hab ich in den beiden Datenblättern nichts gefunden, daß die ICs Open Collector SOs haben...
Aber Du hattest doch beim AT-Flash in #36 den Pullup gehabt?!
Sehe ich das richtig, dass wenn ich dem Flash 0x00 sende, 0x53 zurück kommen müsste?
???
Wenn Du ihm den Commandcode/Opcode/Instruction/Command Cycle (keine Ahnung, warum das hier Comman Cycle heißt) 0x00 sendest, führt der nach Table 5-1 ein NOP aus.
Der Commandcode zum lesen aus dem SFDP ist 0x5A. Danach wird eine 24Bit-Adresse erwartet (3 Bytes) und weitere ach Dummy-Bits (1 Byte).
Nach diesen 40 Bits (5 Bytes) Taktet der IC das gewählte Register aus (und inkrementiert anschließend die Adresse - Du kannst also so mehrere Register sequentiell lesen... bis /CS wieder freigegeben wird.

Du müßtest also folgendes senden:
/CS aktivieren
[0x5A][0x00][0x00][0x00][Dummy][Dummy]
/CS freigeben
bis inklusive erstem Dummy sollte MISO (vom IC her) tristate sein, während des zweiten Dummy müßte LSB der SFDP--Signature ausgetaktet werden (0x53). Wenn Du vor dem freigeben von /CS noch drei weitere Dummies überträgst, erhältst Du auch die höherwertigeren Bytes der Signatur.
 
/CS aktivieren
[0x5A][0x00][0x00][0x00][Dummy][Dummy]
/CS freigeben

Müsste ich nicht folgendes senden..


CodeBox C
[0x5A][0x00][0x01][0x02[0x03][DUMMY_BYTE]


Und dann müsste ich den "SFDP" Header auslesen können, sehe ich das richtig?upload_2017-6-12_18-2-30.png
 
Nach dem Kommando 0x5A
folgt die 24 bit Adresse (3 Byte) des Parameters, ab dem Du die Jedec-ID auslesen willst
danach ein Dummy-Byte
danach für jedes zu lesende Byte ein weiteres Dummy-Byte
solange bis Du aufhören willst mit lesen oder alle Parameter gelesen sind
 
Wenn ich jetzt den SFDP 1st DWord auslesen will. Sind das ja 4 Bytes..
Was genau muss ich ihm senden, um dieses erste Word aus zu lesen?
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)