Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9XXXXX-S3E
работа с USB-флешками (без Linux!)
Valentinus
Добавлено 11.03.2010 21:42 Редактировалось 15.03.2010 16:05
0
Сообщение: 1
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
вот какая проблема: пишу систему сбора данных на kit`е, данные накапливаются на SD-карте, а затем периодически должны забираться на USB-флешке.
сначала пытался написать это дело на Linux, но там при записи данных на SD-карту нарушается периодичность опроса датчиков.
поэтому повернул оглобли в сторону stand-alone программ.

но столкнулся с тем, что не могу найти пример для работы с USB-флешками.
в библиотечке at91lib только примеры работы с SD-картами, и как организовать сам kit в виде mass storage (используя внутр/внеш флешпамять), то есть в режиме хоста.

А мне бы надо записать файл на USB-флешку, в какой-нибудь "популярной" файловой системе, типа FAT.

очень прошу тех, кто сталкивался с такими задачами или встречал решения (библиотеки и т.д.) откликнуться!!!!
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 11.03.2010 23:28 Сообщение: 2
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
А что - кроме linux никаких ОС не существует ? Я бы на вашем месте поискал - проще чем с нуля все делать...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 11.03.2010 23:39 Сообщение: 3
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
Цитата
сначала пытался написать это дело на Linux, но там при записи данных на SD-карту нарушается периодичность опроса датчиков.


Кстати - понизить приоритет для прерыаний от mci не пробовали ?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 11.03.2010 23:46 Сообщение: 4
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
но столкнулся с тем, что не могу найти пример для работы с USB-флешками.
А мне бы надо записать файл на USB-флешку, в какой-нибудь "популярной" файловой системе, типа FAT.

раз десять перечитал сообщение, но так и не понял, что собственно требуется?
то ли как работать с USB флешкой, то ли проблема с ФАТ..
если решен вопрос и стандалоне общается сама с флешкой, то снимаю шляпу - на мой взгляд это подвиг
если же проблема с ФАТ, то можно например, попробовать прицепить вот такую (на электрониксе народ цеплял, но жаловались на скорость):
ссылка на ELM
ну или обточить до нужного результата :)

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 12.03.2010 16:05 Редактировалось 12.03.2010 16:07 Сообщение: 5
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
Цитата
А что - кроме linux никаких ОС не существует ? Я бы на вашем месте поискал - проще чем с нуля все делать...


если и искать то однозначно в стороне realtime OS.
но в связи с сжатыми сроками разработки (господи, бывают ли иные?!) тут нужна ось, которую можно очень быстро освоить, т.е. портированную на АРМ, хорошо документированную, стабильную и бесплатную.
опять же скажем FreeRTOS - это насколько я понял чисто ядро планировщика задач, т.е. функции работы с переферией там не реализованы.
prex на примете держу, как запасной вариант.

с другой стороны в написании stanl-alone программ нет ничего страшного или сложного - в принципе библиотека at91lib реализует почти все- ну вот кроме работы с USB-флешками.

Цитата
Цитата
сначала пытался написать это дело на Linux, но там при записи данных на SD-карту нарушается периодичность опроса датчиков.


Кстати - понизить приоритет для прерыаний от mci не пробовали ?


да, такое приходило в голову, в самое ближайшее время попробую. вот только как это конкретно делать - не знаю. в принципе сбор данных делает драйвер, по прерыванию от ТС, так что наверное если понизить приоритет основной программы, которая обрабатывает и записывает данные, то может это поможет.
в идеале, конечно, нужно опрос датчиков возложить на ПЛИС`ину, с FIFO-буфером, но силенок пока не хватает :)

Цитата
Цитата
но столкнулся с тем, что не могу найти пример для работы с USB-флешками.
А мне бы надо записать файл на USB-флешку, в какой-нибудь "популярной" файловой системе, типа FAT.

раз десять перечитал сообщение, но так и не понял, что собственно требуется?
то ли как работать с USB флешкой, то ли проблема с ФАТ..
если решен вопрос и стандалоне общается сама с флешкой, то снимаю шляпу - на мой взгляд это подвиг
если же проблема с ФАТ, то можно например, попробовать прицепить вот такую (на электрониксе народ цеплял, но жаловались на скорость):
ссылка на ELM
ну или обточить до нужного результата :)

так в том-то и проблема, что не знаю как подружить стандалоне с флешкой, и уж тем более как писать на нее в FAT.
FATFS видел, в софтпаке at91lib даже есть пример как писать через нее на SD-карту. Но мне-то нужно USB-flash!
"Обточить" - мне не по зубам, я в ARM`ах еще новичок.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 12.03.2010 18:15 Сообщение: 6
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
Код
да, такое приходило в голову, в самое ближайшее время попробую. вот только как это конкретно делать - не знаю.


А ничего сложного нет. Смотрим arch/arm/mach-at91/at91sam9260.c

Код

/*
* The default interrupt priority levels (0 = lowest, 7 = highest).
*/
static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {
7, /* Advanced Interrupt Controller */
7, /* System Peripherals */
1, /* Parallel IO Controller A */
1, /* Parallel IO Controller B */
1, /* Parallel IO Controller C */
0, /* Analog-to-Digital Converter */
5, /* USART 0 */
5, /* USART 1 */
5, /* USART 2 */
0, /* Multimedia Card Interface */
2, /* USB Device Port */
6, /* Two-Wire Interface */
5, /* Serial Peripheral Interface 0 */
5, /* Serial Peripheral Interface 1 */
5, /* Serial Synchronous Controller */
0,
0,
0, /* Timer Counter 0 */
0, /* Timer Counter 1 */
0, /* Timer Counter 2 */
2, /* USB Host port */
3, /* Ethernet */
0, /* Image Sensor Interface */
5, /* USART 3 */
5, /* USART 4 */
5, /* USART 5 */
0, /* Timer Counter 3 */
0, /* Timer Counter 4 */
0, /* Timer Counter 5 */
0, /* Advanced Interrupt Controller */
0, /* Advanced Interrupt Controller */
0, /* Advanced Interrupt Controller */
};


И видим что у mci и так самый низкий приоритет как и у TC :) Так что тут нужно у TC тогда по максиму сделать в разумных пределах.
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 12.03.2010 20:18 Редактировалось 12.03.2010 20:19 Сообщение: 7
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
Цитата

А ничего сложного нет. Смотрим arch/arm/mach-at91/at91sam9260.c
...

И видим что у mci и так самый низкий приоритет как и у TC :) Так что тут нужно у TC тогда по максиму сделать в разумных пределах.


sasamy - ОГРОМАДНОЕ СПАСИБО!
то есть нужно поправить этот файлик и ядро пересобрать?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 12.03.2010 20:32 Редактировалось 12.03.2010 20:34 Сообщение: 8
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
За что спасибо если вы еще не попробовали :) может и не поможет это, хотя должно судя по всему. У at91sam9260 приоритеты аппаратно обрабатываются, 8 уровней вложенности. На этапе инициализации ядра значения из этого массива записываются в соответствующие регистры SMR соответствующие ID. Это в файле arch/arm/mach-at91/irq.c
Код

*
* Initialize the AIC interrupt controller.
*/
void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS])
{
unsigned int i;

/*
* The IVR is used by macro get_irqnr_and_base to read and verify.
* The irq number is NR_AIC_IRQS when a spurious interrupt has occurred.
*/
for (i = 0; i < NR_AIC_IRQS; i++) {
/* Put irq number in Source Vector Register: */
at91_sys_write(AT91_AIC_SVR(i), i);
/* Active Low interrupt, with the specified priority */
at91_sys_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]);

set_irq_chip(i, &at91_aic_chip);
set_irq_handler(i, handle_level_irq);
set_irq_flags(i, IRQF_VALID | IRQF_PROBE);

/* Perform 8 End Of Interrupt Command to make sure AIC will not Lock out nIRQ */
if (i < 8)
at91_sys_write(AT91_AIC_EOICR, 0);
}

/*
* Spurious Interrupt ID in Spurious Vector Register is NR_AIC_IRQS
* When there is no current interrupt, the IRQ Vector Register reads the value stored in AIC_SPU
*/
at91_sys_write(AT91_AIC_SPU, NR_AIC_IRQS);

/* No debugging in AIC: Debug (Protect) Control Register */
at91_sys_write(AT91_AIC_DCR, 0);

/* Disable and clear all interrupts initially */
at91_sys_write(AT91_AIC_IDCR, 0xFFFFFFFF);
at91_sys_write(AT91_AIC_ICCR, 0xFFFFFFFF);
}


Да - ядро править и пересобирать надо. Возможно есть более прямой способ но я его не знаю.
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 15.03.2010 16:02 Редактировалось 16.03.2010 23:34 Сообщение: 9
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
ну все, трындец , поломал все нафиг :-(
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 05.04.2010 10:09 Редактировалось 06.04.2010 09:55 Сообщение: 10
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
наконец-то восстановил работоспособность платы, поправил приоритеты в исходниках ядра (2.6.28), прошил, запускаю..

УВЫ! НЕ ПОМОГЛО! :(((((

поставил ТС0 приоритет седьмого уровня (у всего остального ниже, выше только контроллер прерываний), но все равно- как только параллельно пишу на SD-карту- периодичность срабатывания ТС0 нарушается напрочь :((((
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9XXXXX-S3E