Czesc,
Podlaczam sie do pamieci Atmela AT45DB081D po SPI.
Moge odczytac ID rejestr stanu i wszystko inne ale problem jest z zapisaniem jakichs danych. Ani do bufora ani potem do flasha danych nie moge wpisac w zaden sposob opisany w dokumentacji. Np jesli zeruje flasha i wpisuje mu potem dane to pojawiaja sie jakies zupelnie przypadkowe wartosci. Podobnie jest wpisywaniem do buforow. Ponizej zamieszczam kod ktory probuje wykorzystac
AT45DB081D
void wpisz_flash()
{
int i;
//wpiasnie do bufora 1
//inicjalizacja komunikacji
CHIP_SELECT = 0;
//wpisuje komende zapisu danych do bufora 1 dla bufora 2 jest 0x87
Spi_Write( 0x84 );
//wpisanie nieistotnych bitow i adresu
Spi_Write( 0x00 );
Spi_Write( 0x00 );
Spi_Write( 0x00 );
Spi_Write( 1 );
Spi_Write( 2 );
Spi_Write( 3 );
Spi_Write( 4 );
//zakonczenie komunikacji
CHIP_SELECT = 1;
delay_ms(400);
}
void odczytaj_flash()
{
char dane[300];
int i;
//inicjalizacja komunikacji
CHIP_SELECT = 0;
//wpisuje komende odczytu ciaglego danych dla bufora 2 jest 0x87
//d2
Spi_Write( 0xD4 );
//wpisanie adresu strony z ktorej maja byc odczytane dane
Spi_Write( 0x00 );
Spi_Write( 0x00 );
Spi_Write( 0x00 );
//dummy byte
Spi_Write( 0x00 );
for ( i = 0; i < 4; i++ )
{
dane [ i ] = Spi_Read(0xAA); //zmiana tej wartosci tez nic nie daje
}
CHIP_SELECT = 1;
delay_ms(40);
for ( i = 0; i < 4; i++ )
{
usart_write( dane [ i ] );
}
CHIP_SELECT = 1;
delay_ms(40);
}
Uzyte funkcje pochodza z kompilatora. Z gory dzieki za pomoc. Pozdrawiam!
Podlaczam sie do pamieci Atmela AT45DB081D po SPI.
Moge odczytac ID rejestr stanu i wszystko inne ale problem jest z zapisaniem jakichs danych. Ani do bufora ani potem do flasha danych nie moge wpisac w zaden sposob opisany w dokumentacji. Np jesli zeruje flasha i wpisuje mu potem dane to pojawiaja sie jakies zupelnie przypadkowe wartosci. Podobnie jest wpisywaniem do buforow. Ponizej zamieszczam kod ktory probuje wykorzystac
AT45DB081D
void wpisz_flash()
{
int i;
//wpiasnie do bufora 1
//inicjalizacja komunikacji
CHIP_SELECT = 0;
//wpisuje komende zapisu danych do bufora 1 dla bufora 2 jest 0x87
Spi_Write( 0x84 );
//wpisanie nieistotnych bitow i adresu
Spi_Write( 0x00 );
Spi_Write( 0x00 );
Spi_Write( 0x00 );
Spi_Write( 1 );
Spi_Write( 2 );
Spi_Write( 3 );
Spi_Write( 4 );
//zakonczenie komunikacji
CHIP_SELECT = 1;
delay_ms(400);
}
void odczytaj_flash()
{
char dane[300];
int i;
//inicjalizacja komunikacji
CHIP_SELECT = 0;
//wpisuje komende odczytu ciaglego danych dla bufora 2 jest 0x87
//d2
Spi_Write( 0xD4 );
//wpisanie adresu strony z ktorej maja byc odczytane dane
Spi_Write( 0x00 );
Spi_Write( 0x00 );
Spi_Write( 0x00 );
//dummy byte
Spi_Write( 0x00 );
for ( i = 0; i < 4; i++ )
{
dane [ i ] = Spi_Read(0xAA); //zmiana tej wartosci tez nic nie daje
}
CHIP_SELECT = 1;
delay_ms(40);
for ( i = 0; i < 4; i++ )
{
usart_write( dane [ i ] );
}
CHIP_SELECT = 1;
delay_ms(40);
}
Uzyte funkcje pochodza z kompilatora. Z gory dzieki za pomoc. Pozdrawiam!
