реклама на сайте
подробности

 
 
> особенности работы FATfs, или SD-CARD?
ar__systems
сообщение Aug 29 2013, 22:24
Сообщение #1


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



обнаружилась странная особенность, что если я оставляю SD-CARD в покое более чем на 0.5 сек(+/-, точно этот предел не устанавливал), следующий вызов обломается. Как будто карта засыпает? Или это MCI засыпает? Чип LPC1788.

т.е. выполняем следующий код:
Код
    
for (int i = 0; i < 20; i++) {
  printf("---------------Attempt: %d\n\r", i);
  dump_file("test1.txt"); // открываем файл и печатаем все содержимое, файл закрываем.
  if ( i < 10 )
     DELAY_Ms(1000);
  else
    DELAY_Ms(500);
};


и получаем следующее на выходе:
Код
---------------Attempt: 0                                                      
READ SD5 0                                                                      
Test File Line 1                                                                
Test File Line 2                                                                
Test File Line 3                                                                
---------------Attempt: 1                                                      
READ SD5 1                                                                      
---------------Attempt: 2                                                      
READ SD5 1                                                                      
---------------Attempt: 3                                                      
READ SD5 1                                                                      
---------------Attempt: 4                                                      
READ SD5 1                                                                      
---------------Attempt: 5                                                      
READ SD5 1                                                                      
---------------Attempt: 6                                                      
READ SD5 1                                                                      
---------------Attempt: 7                                                      
READ SD5 1                                                                      
---------------Attempt: 8                                                      
READ SD5 1                                                                      
---------------Attempt: 9                                                      
READ SD5 1                                                                      
---------------Attempt: 10                                                      
READ SD5 1                                                                      
---------------Attempt: 11                                                      
READ SD5 0                                                                      
Test File Line 1                                                                
Test File Line 2                                                                
Test File Line 3                                                                
---------------Attempt: 12                                                      
READ SD5 0                                                                      
Test File Line 1                                                                
Test File Line 2                                                                
Test File Line 3                                                                
---------------Attempt: 13                                                      
READ SD5 0                                                                      
Test File Line 1                                                                
Test File Line 2                                                                
Test File Line 3                                                                
---------------Attempt: 14                                                      
READ SD5 0                                                                      
Test File Line 1                                                                
Test File Line 2                                                                
Test File Line 3


итд, все последующие вызовы ок. READ SD5 1 -- цифра 1 после SD5, это что возвращает f_open.
Т.е. как только я снижаю паузу между вызовами с 1сек до 500mS все начинает работать.
Полное впечатление, что кто-то засыпает. Worкaround понятен, но хотелось бы понять, что же тут происходит.

Да, сначала я этот сценарий под freeRTOS заметил, грешил на нее, и воспроизвел в точности то же самое поведение без нее. В процессе поиска натолкнулся в инете на страницу, в которой был следующий код:

Код
    rc = f_open(&fil, FilePath, FA_WRITE | FA_OPEN_ALWAYS); /* Create a file on the drive 0 */  
    if(rc)  rc = f_open(&fil, FilePath, FA_WRITE | FA_OPEN_ALWAYS);// try again once


http://letrungthang.blogspot.ca/2011/09/fr...f-fat-file.html

я сначала не придал этому значения, но когда разобрался в природе своего глюка, это место вспомнил. Очень похожу на решение такого же глюка, как у меня. Кто-то может что-то объяснить?

Заранее благодарен!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 21:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016