Page 2 of 9
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 18 Feb 2017, 19:32
by Samtorr
alvikagal wrote:
Стоит ли в БК добавлять "SD card logger"
Для начала лучше сделать отдельное устройство,ибо не всем кому нужен даталоггер, нужен БК. А для того чтоб устройство было закончено, нужно чтоб оно понимало большинство релизов, а для этого надо либо сделать некий конфигуратор (вариантов несколько, от программы, до структуры пакета в еепром), либо открыть исходники. Разумеется запись каждый раз должна вестись в отдельный файл и не пропадать при отключении питания. А когда это все будет, тогда можно и в БК интегрировать. У Вас фат от Чена?
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 18 Feb 2017, 20:17
by alvikagal
Да, от Чена, только GCC ругается на последнюю версию. Много функций нужно дописывать.
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 23 Feb 2017, 03:36
by alvikagal
Пока разбираюсь как создавать файлы (лыжи так и не едут
), сделал пока запись следующим образом:
SD карта 1GB, скинул туда 10 файлов по 74MB и в эти файлы будут писаться логи по очереди макс. длительностью 1 час езды, затем открывается следующий и пишется в него.
Когда файлы закончились, переписывается 1 файл.
При каждом новом включении пишется в следующий файл.
Т.е. возможно записать 10 пусков и максимально 10 часов.
Если включить без карты, затем выключить и вставить карту, то сбрасывается счётчик на первый файл.
Пару дней покатаю, проверю, если будет работать как надо, то выложу в первый пост.
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 23 Feb 2017, 12:50
by Samtorr
Я сделал отдельный файл-счетчик, расположенный на той же карте (который создается если флешка пустая, или модифицируется) в котором хранится индекс последнего файла. При каждом включении он увеличивается на единицу и создается файл лога вида Log_NN.csv, где NN - это индекс хранимый в файле. Сам код работы с фат, если удалить все лишнее:
Code: Select all
char str_buff[STR_SIZE]={'\0'};
char str_name[NAME_SIZE]={'\0'};
FATFS FatFs; /* FatFs work area needed for each volume */
FIL Fil; /* File object needed for each open file */
FRESULT res;
main()
{
UINT bw;
UINT br;
UINT cnt_log_name;
//инициализация
...
//FAT FS
f_mount(&FatFs, "", 0);/* Give a work area to the default drive */
//Создаем и/или модифицируем файл-счетчик
if (f_open(&Fil, "cnt.csv", FA_READ | FA_WRITE | FA_OPEN_ALWAYS) == FR_OK)
{
f_read(&Fil, str_name, 4, &bw);
cnt_log_name=atoi(str_name);
if(cnt_log_name>=0 && cnt_log_name<1000){cnt_log_name++;}
else{cnt_log_name=0;}
sprintf(str_name,"%u\r\n",cnt_log_name);
Fil.fptr=0;
f_write(&Fil, str_name, 4, &bw);
f_close(&Fil);
}
else
{
//что-то пошло не так ))
...
}
for(;;)
{
//пишем строку в файл (по флагу)
if(...) //условие записи (интеррвал, событие)
{
//получаем параметры
...
//загоняем в str_buff текущее имя файла
sprintf(str_buff,"%s%u.csv","log_",cnt_log_name);
//пытаемся записать в него
if (f_open(&Fil, str_buff, FA_WRITE | FA_OPEN_ALWAYS) == FR_OK)
{
unsigned char str_buf_size=0;
// Create a file
res=f_lseek(&Fil,Fil.fsize);
if(res==FR_OK)
{
//очищаем буфер
unsigned char i=0;
for(i=0;i<STR_SIZE;++i)str_buff[i]='\0';
//теперь пишем в str_buff данные
sprintf(str_buff,...);
//определяем размер буфера (реального)
i=0;
for(i=0;i<STR_SIZE;++i)
{
if(str_buff[i]!='\0')str_buf_size++;
}
//пишем в файл только реально использованные символы
f_write(&Fil, str_buff, /*STR_SIZE*/str_buf_size, &bw);
}
f_close(&Fil); // Close the file
if (bw == str_buf_size)
{
// все ок
...
}
else
{
//что-то пошло не так ))
...
}
}
else
{
//что-то пошло не так ))
...
}
}
}//end for
}//end main
При записи строки, каждый раз текущий файл открывается и закрывается - только так можно гарантировать что при отключении питания там останутся все ранее сделанные записи. Но это несколько уменьшает предельную частоту записи в файл. Зато работает четко и без сбоев.
Подробнее можете глянуть в моем проекте
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 06 Mar 2017, 07:45
by LVS
alvikagal надумал и я собрать такое устройство. Вопрос по питанию CD карты, питается она от 3v3 питание берётся от USB 5v ставил стабилизатор или на стабилитроне сделал. Я намечаю стабилизатор поставить. Приведу рисунок разъёмов CD карты, такой подходит. Слот у меня на 10 выводов правда первые два контакты которые замыкаются при вставке CD. И какие фузы выставляются на мегу.
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 06 Mar 2017, 08:19
by alvikagal
Фьюзы я оставлял по умолчанию, которые были в ардуино про мини. Вечером выложу.
Питание понижал стабилизатором 3,3В.
Контакты подключать только те, что на схеме.
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 06 Mar 2017, 19:11
by LVS
На картинке правильно отображены, буду руководствоваться по этому изображению. А фузы буду ждать.
Re: Чёрный ящик на Arduino
Posted: 06 Mar 2017, 19:17
by alvikagal
Это распиновка микроСД, а нужно SD карты.
Верхняя картинка SPI, подключать по ней переходник, а в него вставлять микроСД.
Фьюзы:
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 07 Mar 2017, 06:46
by LVS
За фузы спасибо. Да я микро сразу хочу поставить. У меня есть карт-ридер сломанный там есть слот для микро, если ставить слот для переходника он начинает выходить за габариты корпуса карт-ридера. Твой рисунок переходника что-то не показывается перезагрузи.
Re: Чёрный ящик на Arduino "SD card logger"
Posted: 08 Mar 2017, 08:45
by LVS
Нарисовал плату в ЛАЙ для SD card Logger/ Всё-таки хочу сразу использовать микро SD без переходников. Просьба посмотреть правильно я соединил слот карты с МК. После USB стоят 2 перемычки на это не обращайте внимания просто на помню где на моём шнурке подходит Rxd потом поставлю какую нужно.