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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Пытаясь запустить UsbHostLite для LPC2468 с nxp.com
DpInRock
сообщение Nov 26 2010, 02:07
Сообщение #31


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Эти сигналы можно использовать. Но самое главное - можно не использовать.
В даташите есть схема соединения с формирователем для ontogo.

От себя добавлю. Этот дурацкий пример USB HOST - гадство, конечно. День убил. Пришлось OHCI качать. Обработчик прерываний там неправильный. Из-за него флэшку надо втыкать не как попало, а приноравливаться.
Вот теперь примериваюсь как On-to Go без дополнительных схемных элементов сделать. Хотелось бы иногда и с PC коннектиться, а иногда и флэшку втыкать.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Дмитриос
сообщение Apr 10 2011, 16:48
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 22-04-10
Пользователь №: 56 826



Может быть зря поднимаю тему. Но у меня также проблемы с запуском UsbHostLite на LPC2478. crying.gif
1. Может кто-нибудь поделиться работающими исходниками этого Lite-а?
2. Или посоветуйте пожалуйста ещё какую-нибудь более-менее работоспособную OpenSource-ную реализацию USB host + FAT16
3. Поиск подобных проектов почти ничего не дал, неужели сообщество ничего не написало? или у меня одного не идёт UsbHostLite
4. Например? Есть ли реализация UsbHost под FATFS от мистера Чанга?
В результате разных экспериментов что я обнаружил дополнительно по теме:
1. Совсем недавно UsbHostLite для LPC2478 был доработан вышла версия 1,00
2. Сравнение через SVN даёт то что исходные коды UsbHostLite для LPC2478 и для 1768 за исключением наличия ДВУХ USB ооочень похожи и идентичны
3. Работа же UsbHostLite под LPC1768 идёт отлично как по маслу
что ещё
4. менял тактовую частоту процессора 48....57,6...72 МГц -- без эффекта
5. Смена флешек результата не даёт
6. тестировал LPC2478 как в корпусе BGA так и SOT
7. При работе без отладчика -- проходит процедуру втыкания флешки но первая же функция в процедуре енумерации не проходит
8 При установке брякпоинта в обработчике прерывании и прохождении программы в пошаговом режиме процедура энумерации проходит лишь на половину
Знаю что есть реализации работы с openHCI в Linux, BSD и u-boot(я понял что он тоже на Linux-е основан) -- но они слишком монструозны чтобы их пилить.

Сообщение отредактировал IgorKossak - Apr 11 2011, 07:11
Go to the top of the page
 
+Quote Post
yarunt
сообщение Apr 12 2011, 10:27
Сообщение #33


Местный
***

Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476



Цитата(Дмитриос @ Apr 10 2011, 20:48) *
.



Вот этот работает,только прошил и проверил, кварц 12мгц. Сразу тоже не работал, давно было точно не помню, наверно нужно делитель шины усб выставить.

Сообщение отредактировал IgorKossak - Apr 12 2011, 11:26
Причина редактирования: Бездумное цитирование

Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  USBHostLite.101.zip ( 1.39 мегабайт ) Кол-во скачиваний: 96
 


--------------------
Нельзя впихнуть,невпихуемое?МОЙ БЛОГ
Go to the top of the page
 
+Quote Post
UNKNOWN
сообщение Apr 26 2011, 09:47
Сообщение #34





Группа: Новичок
Сообщений: 1
Регистрация: 26-08-08
Пользователь №: 39 827



Доброго времени суток!
Помогите решить проблему, я использую для LPC17xx USBHostLite, всё работает, но вот непонятно, почему скорость записи на USB флешку вариируется от 200 до 350 кБайт/сек, хотя комп пишет на неё со скоростью 3 МБайта/сек.
Для контроля работы хоста дёргаю отдельной ножкой контроллера, и смотрю осциллографом. Наблюдается следующая картина:
где-то после 7-10 пакетов (передача буферов по 4096 байт происходит по 8 мс) идёт очень длинное ожидание - около 120 мс. Т.е. ~7-мь пакетов без существенной задержки, потом задержка ~120 мс, и так далее.
Вот код где я смотрю задержки на осциллографе:
в функции Host_ProcessTD перед ожиданием ответа от флехи Host_WDHWait() дёргаю ножкой проца, и в функции MS_BulkSend на втором вызове функции Host_ProcessTD иногда происходит задержка ~100 мс. Как увеличить скорость и откуда такие задержки?

CODE

rt_int32_t MS_BulkSend ( rt_uint32_t block_number,
volatile rt_uint8_t *user_buffer,
rt_uint16_t num_blocks)
{
rt_int32_t rc;


Fill_MSCommand(block_number, MS_BlkSize, num_blocks, MS_DATA_DIR_OUT, SCSI_CMD_WRITE_10, 10);

rc = Host_ProcessTD(EDBulkOut, TD_OUT, TDBuffer, CBW_SIZE);
if (rc == OK) {
Host_DelayMS(20);
rc = Host_ProcessTD(EDBulkOut, TD_OUT, user_buffer, MS_BlkSize * num_blocks);
if (rc == OK) {
rc = Host_ProcessTD(EDBulkIn, TD_IN, TDBuffer, CSW_SIZE);
if (rc == OK) {
if (TDBuffer[12] != 0) {
rc = ERR_MS_CMD_FAILED;
}
}
}
}
return (rc);
}


rt_int32_t Host_ProcessTD (volatile HCED *ed,
volatile rt_uint32_t token,
volatile rt_uint8_t *buffer,
rt_uint32_t buffer_len)
{
volatile rt_uint32_t td_toggle;


if (ed == EDCtrl) {
if (token == TD_SETUP) {
td_toggle = TD_TOGGLE_0;
} else {
td_toggle = TD_TOGGLE_1;
}
} else {
td_toggle = 0;
}
TDHead->Control = (TD_ROUNDING |
token |
TD_DELAY_INT(0) |
td_toggle |
TD_CC);
TDTail->Control = 0;
TDHead->CurrBufPtr = (rt_uint32_t) buffer;
TDTail->CurrBufPtr = 0;
TDHead->Next = (rt_uint32_t) TDTail;
TDTail->Next = 0;
TDHead->BufEnd = (rt_uint32_t)(buffer + (buffer_len - 1));
TDTail->BufEnd = 0;

ed->HeadTd = (rt_uint32_t)TDHead | ((ed->HeadTd) & 0x00000002);
ed->TailTd = (rt_uint32_t)TDTail;
ed->Next = 0;

if (ed == EDCtrl) {
LPC_USB->HcControlHeadED = (rt_uint32_t)ed;
LPC_USB->HcCommandStatus = LPC_USB->HcCommandStatus | OR_CMD_STATUS_CLF;
LPC_USB->HcControl = LPC_USB->HcControl | OR_CONTROL_CLE;
} else {
LPC_USB->HcBulkHeadED = (rt_uint32_t)ed;
LPC_USB->HcCommandStatus = LPC_USB->HcCommandStatus | OR_CMD_STATUS_BLF;
LPC_USB->HcControl = LPC_USB->HcControl | OR_CONTROL_BLE;
}

if (DebugValue) LPC_GPIO0->FIOSET = 1<<11;
else LPC_GPIO0->FIOCLR = 1<<11;
DebugValue = !DebugValue;
Host_WDHWait();

// if (!(TDHead->Control & 0xF0000000)) {
if (!HOST_TDControlStatus) {
return (OK);
} else {
return (ERR_TD_FAIL);
}
}


Сообщение отредактировал IgorKossak - Apr 26 2011, 09:50
Причина редактирования: [codebox] !!!


--------------------
ZeeXor
Go to the top of the page
 
+Quote Post
yurmala
сообщение Sep 29 2011, 11:20
Сообщение #35


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Приветствую! А у меня другая проблема.
Объединил UsbHostLite с FATFS.
Чтение проходит на ура. подключаю USB, монтирую диск, читаю список файлов, открываю файл и успешно читаю из него.
Идет подвисание при попытке записи/удаления файла
Зависает в функции MS_BulkSend на строчке
Код
        rc = Host_ProcessTD(EDBulkOut, TD_OUT, user_buffer, MS_BlkSize * num_blocks);

в режиме ожидания Host_WDHWait();

С чем может быть связан подобный висяк?
Go to the top of the page
 
+Quote Post
yurmala
сообщение Sep 30 2011, 07:06
Сообщение #36


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Я вообщем в тупике. Не пойму куда смотреть.
чтение FATFS с USB работает четко, а на записи - висяк.
Вот функция disk_write
Код
DRESULT disk_write(BYTE drv, /* Physical drive number (0..) */
    const BYTE *buff, /* Data to be written */
    DWORD sector, /* Sector address (LBA) */
    BYTE count /* Number of sectors to write (1..255) */
)
{
    DRESULT res;
    int result;

    (void) result;

        if (usb_status & STA_NOINIT) {
            return RES_NOTRDY;
        } else {
            if ( MS_BulkSend( sector, count, (volatile USB_INT08U*) buff ) == OK ) {
                res = RES_OK;
            } else {
                res = RES_ERROR;
                }
            }
        return res;
}


Вот мой тестовый код:
Код
int main(void)
{
BYTE file_deviceID[1];
UINT cnt;

if ((disk_initialize(0)) == FR_OK)  //
    {
    if ((f_mount(0, &fatfs[0])) == FR_OK)
        {
        if ((f_open(&file1, "DEVICE1.TXT", FA_CREATE_ALWAYS | FA_WRITE)) == FR_OK)
            {
            cnt = 1;
            file_deviceID[0] = 'Y';
            f_write(&file1,&file_deviceID,cnt,&cnt);
            f_close(&file1); //                                                        <---------------------- ТУТ ЗАВИСАНИЕ на Host_WDHWait()
            }
        f_mount(0, NULL);
        }
    }

return 0;
}


модули usbhost_lpc2468.c и usbhost_ms.c взяты из проекта USBHostLite (полностью рабочего. в котором все работает с MSREAD.TXT и MSWRITE.TXT)

Буду рад хоть какой-нибудь подсказке, идее...Заранее большое спасибо.

Сообщение отредактировал yurmala - Sep 30 2011, 07:32
Go to the top of the page
 
+Quote Post
yurmala
сообщение Oct 3 2011, 09:11
Сообщение #37


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Товарищи дорогие! Прошу помощи. Так и не могу побороть функцию записи FAT в связки LPC2468 + USBHostLite + FAT FS (Chan's) (см. выше).
Задал подобный вопрос на сахаре. Подобное наблюдается не только у меня.

Если пошагово дойти от моей команды f_write вложено по функциям до зависания, то получается следующее вложение:
Код
1) f_write(&file1,&file_deviceID,cnt,&cnt);
2) fp->sclust = clst = create_chain(fp->fs, 0);    /* Create a new cluster chain */
3) cs = get_fat(fs, ncl);     /* Get the cluster status */
4) case FS_FAT16 : if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)))) break; ...
5) if (disk_write(fs->drv, fs->win, wsect, 1) != RES_OK) /* Write back dirty window if needed */
6) if ( MS_BulkSend( sector, count, (volatile USB_INT08U*) buff ) == OK )....

У кого-то есть реально работающая подобная связка (именно ЗАПИСЬ)?
Блин, все выходные убил на эту хрень (казалось бы)...
Go to the top of the page
 
+Quote Post
Olga83
сообщение Apr 23 2012, 10:37
Сообщение #38





Группа: Новичок
Сообщений: 1
Регистрация: 23-04-12
Пользователь №: 71 517



Хм, у меня полностью аналогичная ситуация. Как то решили проблему?
Go to the top of the page
 
+Quote Post
yurmala
сообщение Nov 6 2012, 04:10
Сообщение #39


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Тут есть полезная информация:
http://www.keil.com/forum/20503/
А именно :
1) the file name must be capital letters
2) the buffer should be placed on the USB RAM. LPC23xx/24xx families have this restriction on DMA by USB controller.
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Nov 6 2012, 18:42
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(yurmala @ Nov 6 2012, 08:10) *
Тут есть полезная информация:
http://www.keil.com/forum/20503/
А именно :
1) the file name must be capital letters
2) the buffer should be placed on the USB RAM. LPC23xx/24xx families have this restriction on DMA by USB controller.

1.Возмите пример HostLite+FatFs+CMSIS у меня с сайта.
FatFs -- никаких ограничений, можно писать даже не только в корневую директорию работает даже с русскими буквами если codepage у вас правильная

2. Драйвер написан у меня так что второе ограничение тоже убрано.

3. Подходит к контроллеру и LPC17xx и к LPC2468




--------------------
Go to the top of the page
 
+Quote Post
yurmala
сообщение Nov 7 2012, 07:29
Сообщение #41


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



SyncLair, я уже разобрался. Потому и дал полезную информацию для остальных, на будущее.
Внимательно нужно быть с передаваемым буфером. Он должен находится в USB RAM.

Поэтому функция disk_write у меня стала выглядить так:

Код
DRESULT disk_write(BYTE drv, /* Physical drive number (0..) */
    const BYTE *buff, /* Data to be written */
    DWORD sector, /* Sector address (LBA) */
    BYTE count /* Number of sectors to write (1..255) */
)
{
    if (usb_status & STA_NOINIT) return RES_NOTRDY;
    
    memcpy((void*)UserBuffer, buff, MS_BlkSize * count);

    if ( MS_BulkSend( sector, count, UserBuffer) == OK )
        return RES_OK;
    else
        return RES_ERROR;

}


Сообщение отредактировал yurmala - Nov 7 2012, 10:59
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Nov 7 2012, 12:52
Сообщение #42


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(yurmala @ Nov 7 2012, 11:29) *
Поэтому функция disk_write у меня стала выглядить так:

Код
    
    memcpy((void*)UserBuffer, buff, MS_BlkSize * count);


Так точно ) у меня также )


--------------------
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 29 2014, 23:33
Сообщение #43


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Убил пару дней на поиск грабли в стоге сена NXP USB host lite. SCSI трансферы более 8 КБ полностью весили юсб-стек. Если допустим флэшка FAT16 с размером кластера 16 КБ или выше. Оказалось реализация OHCI в LPC176x имеет ограничение на размер блока одного Transfer Descriptor. Как раз 8 КБ. В мануале на процессор об этом ни слова. Корректный код, учитывающий эту особенность нашёлся в nxpUSBlib v0.98. Но, как варинт, в хост лайте можно в цикле разбивать длинный Host_ProcessTD(EDBulkIn,...) на 8 КБ или менее (последнюю) транзакции.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


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


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