Walcze i walcze i nie moge poradzic sobie z problemem.
Mam pamiec AT45DB321. Na atmedze 32 dziala ladnie, jak włoże 644p i przekompiluje to nie ma kumunikacji ? To perwszy problem.
Drugi jest taki że wysyłam po uarcie paczki danych po 179bajtów. Tak wygląda podprogram. Oczywiscie pomnialem deklaracje zmiennych , zezwolenia na przerwania. Przedstawilem to co najbardziej istotne i gdzie proc wie wywala
konfiguracja UARTA
**********************
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 200
podprogram
***************************************
Kod: Zaznacz cały
Print "START FLASH ERASING"
Call Erase_flash()
Timeout = 0
Do
Wait 1
Flaga_kasowania = Flash_status()
Incr Timeout
Loop Until Flaga_kasowania = &H80 Or Timeout = 60
If Flaga_kasowania = &H80 Then
Print "FLASH ERASING OK"
Numer_strony = 1
Reset Bluetooth_led
Do
Do
Znak_rx = Waitkey()
Loop Until Znak_rx = &H3E
Flash_part = Waitkey()
Crc1 = Waitkey()
Crc = 0
Select Case Flash_part
Case 1:
Index_bajtu_bufor = 0
Do
If Ischarwaiting() = 1 Then
Znak_rx = Waitkey()
Incr Index_bajtu_bufor
Bufor_flash(index_bajtu_bufor) = Znak_rx
Crc = Crc Xor Znak_rx
Else
Waitms 100
End If
Loop Until Index_bajtu_bufor = 176
Case 2:
Index_bajtu_bufor = 176
Do
If Ischarwaiting() = 1 Then
Znak_rx = Waitkey()
Incr Index_bajtu_bufor
Bufor_flash(index_bajtu_bufor) = Znak_rx
Crc = Crc Xor Znak_rx
Else
Waitms 100
End If
Loop Until Index_bajtu_bufor = 352
Case 3:
Index_bajtu_bufor = 352
Do
If Ischarwaiting() = 1 Then
Znak_rx = Waitkey()
Incr Index_bajtu_bufor
Bufor_flash(index_bajtu_bufor) = Znak_rx
Crc = Crc Xor Znak_rx
Else
Waitms 100
End If
Loop Until Index_bajtu_bufor = 528
End Select
If Flash_part >= 1 And Flash_part <= 3 Then
If Crc = Crc1 Then
Print Str(flash_part);
Print "CRC OK"
If Flash_part = 3 Then
Incr Numer_strony
End If
Else
Print Str(flash_part);
Print "CRC ERROR"
End If
Else
Print "TOTAL ERROR"
End If
Loop Until Numer_strony = 3
Else
Print "FLASH ERASING ERROR"
End If
Problem jest taki że w pętlach do-loop procek się najczęściej sam resetuje. Jak już coś wyśle to wiekszosci przypadkow otrzymuje 1CRC ERROR a czasem nie odbierze nawet 176bajtów i pracuje caly czas w pętli. Nie wiem dlaczego znaki maga byc gubione, przecież bufor seriala juest duzo wiekszy niz paczki danych. Dodałem opuznienia w petlach ---> Waitms 100 ale i tak wgrywa może do 10 strony i wisi a po jakims czasie znowu reset. Juz naprawde nie wiem w czym tkwi problem. Wydaje się ze jest OK, dlaczego wiec raz wgra do 5 strony, raz do 10 a raz już wisi od samego poczatku. . Druga sprawa to to SPI, ciekaw jestem dlaczego na ATMEGA32 dziala a na ATMEGA644p juz nie. Proszę o pomoc