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

 
 
 
Reply to this topicStart new topic
> USB device на TE-AM1705, не получается
Viciouspriest
сообщение Mar 24 2014, 08:20
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 24-08-12
Пользователь №: 73 242



Всем здравствуйте.
Операционная система - Linux, ядро 3.2.1. Как хост работает отлично, флешки читает. Теперь задача запустить как девайс, чтобы при подключении к компутеру хотя бы работал как виртуальный ком-порт (программа минимум). Из дата-шита становится понятно, что у проца есть ножка OTG, которой и определяется режим работы усб. Но не тут то было - в реальности эта ножка отсустсвует( и ряд других). Теперь режим работы усб задается записью волшебных циферок в специальный регистр. Тут-то и начинается веселье.

Сначала пытался переключить процессор в режим гаджета с помощью записи в регистр CFGCHIP2 в поле USB0OTGMODE значения 2. (Для этого был написан отдельный маленький модуль ядра.)
В этом случае видимого эффекта не наблюдалось, т.е. плата продолжала видеть флешку, а при соединении с компьютером просто ничего не происходило.

После этого попробовал включить режим гаджета при инициализации (без своего вспомогательного модуля). Для этого в файле board-da830-evm.c в функции da830_evm_usb_init() вместо установки CFGCHIP2_FORCE_HOST сделал установку CFGCHIP2_FORCE_DEVICE.
В результате плата загружается, но при соединении с компютером по USB плата виснет.

Конфигурация ядра такая:

DeviceDrivers -> Inventra Highspeed Dual Role Controller
DeviceDrivers -> USB Gadget Support
DeviceDrivers -> USB Gadget Support -> USB Pripheral Controller -> Inventra...
DeviceDrivers -> USB Gadget Support -> USB Pripheral Controller -> USB Gadget Drivers -> Serial Gadget...

Вот лог, если о чем-нибудь скажет
Код
Unable to handle kernel NULL pointer dereference at virtual address 00000004    
pgd = c0004000                                                                  
[00000004] *pgd=00000000                                                        
Internal error: Oops: 17 [#1] PREEMPT                                          
Modules linked in:                                                              
CPU: 0    Not tainted  (3.2.1-MAK4M-18.12.13-13:09+ #158)                      
PC is at musb_g_giveback+0x8/0x90                                              
LR is at musb_g_ep0_irq+0x1b8/0x900                                            
pc : [<c020db34>]    lr : [<c020cae4>]    psr: 80000093                        
sp : c03efe90  ip : 00000000  fp : 00000001                                    
r10: 00000001  r9 : c04459f4  r8 : fee00400                                    
r7 : fee00500  r6 : c1812328  r5 : fee00500  r4 : ffffffd8                      
r3 : c181239c  r2 : 00000000  r1 : ffffffd8  r0 : c1812354                      
Flags: Nzcv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel            
Control: 0005317f  Table: c1bc8000  DAC: 00000017                              
Process swapper (pid: 0, stack limit = 0xc03ee270)                              
Stack: (0xc03efe90 to 0xc03f0000)                                              
fe80:                                     c18120f0 fee00500 c1812328 c020cae4  
fea0: 00000002 06800093 00000100 c0030040 00000002 c18120f0 00000008 00000099  
fec0: 00000099 00000000 00000000 c020bd6c 0acd0000 00989680 c18120f0 fee00000  
fee0: 40000093 00000228 00000000 c04459f4 c03fc080 c0211580 c1882940 c1882940  
ff00: 00000000 00000000 0000003a c0051c70 20000093 0000001f b357dd0b c03fc080  
ff20: c1882940 00000000 c03effa4 c0004000 41069265 c03e21c0 00000000 c0051e1c  
ff40: 00000000 c03fc080 0000003a c0054628 c04054d8 c0051588 000000f5 c0009c8c  
ff60: c0009db0 60000013 febfd000 c0009038 00000000 0005317f 0005217f 60000013  
ff80: c03ee000 c0416c64 c03f38f0 c03f3a74 c0004000 41069265 c03e21c0 00000000  
ffa0: 600000d3 c03effb8 c0009da4 c0009db0 60000013 ffffffff c0009d84 c0009fb4  
ffc0: c03ee000 c03f08dc c03e357c c04b91c0 c03f38e8 c03c6734 c03c6164 00000000  
ffe0: 00000000 c03e357c 00053175 c03f0014 c03e3578 c0008040 00000000 00000000  
[<c020db34>] (musb_g_giveback+0x8/0x90) from [<c020cae4>] (musb_g_ep0_irq+0x1b8)
[<c020cae4>] (musb_g_ep0_irq+0x1b8/0x900) from [<c020bd6c>] (musb_interrupt+0x1)
[<c020bd6c>] (musb_interrupt+0x114/0x8a8) from [<c0211580>] (da8xx_musb_interru)
[<c0211580>] (da8xx_musb_interrupt+0xec/0x1f8) from [<c0051c70>] (handle_irq_ev)
[<c0051c70>] (handle_irq_event_percpu+0x50/0x1ac) from [<c0051e1c>] (handle_irq)
[<c0051e1c>] (handle_irq_event+0x50/0x78) from [<c0054628>] (handle_edge_irq+0x)
[<c0054628>] (handle_edge_irq+0x94/0x180) from [<c0051588>] (generic_handle_irq)
[<c0051588>] (generic_handle_irq+0x2c/0x40) from [<c0009c8c>] (handle_IRQ+0x30/)
[<c0009c8c>] (handle_IRQ+0x30/0x84) from [<c0009038>] (__irq_svc+0x38/0x8c)    
[<c0009038>] (__irq_svc+0x38/0x8c) from [<c0009db0>] (default_idle+0x2c/0x30)  
[<c0009db0>] (default_idle+0x2c/0x30) from [<c0009fb4>] (cpu_idle+0xd0/0xfc)    
[<c0009fb4>] (cpu_idle+0xd0/0xfc) from [<c03c6734>] (start_kernel+0x2b4/0x30c)  
Code: e8bd8010 c04464ac e92d4070 e1a04001 (e591302c)                            
---[ end trace 97082fc892390b45 ]---                                            
Kernel panic - not syncing: Fatal exception in interrupt                        
[<c000d864>] (unwind_backtrace+0x0/0xf0) from [<c02ca01c>] (panic+0x60/0x198)  
[<c02ca01c>] (panic+0x60/0x198) from [<c000c144>] (die+0x150/0x200)            
[<c000c144>] (die+0x150/0x200) from [<c000e818>] (__do_kernel_fault+0x64/0x84)  
[<c000e818>] (__do_kernel_fault+0x64/0x84) from [<c000e984>] (do_page_fault+0x1)
[<c000e984>] (do_page_fault+0x14c/0x1f0) from [<c0008608>] (do_DataAbort+0x30/0)
[<c0008608>] (do_DataAbort+0x30/0x9c) from [<c0008fd8>] (__dabt_svc+0x38/0x60)  
Exception stack(0xc03efe48 to 0xc03efe90)                                      
fe40:                   c1812354 ffffffd8 00000000 c181239c ffffffd8 fee00500  
fe60: c1812328 fee00500 fee00400 c04459f4 00000001 00000001 00000000 c03efe90  
fe80: c020cae4 c020db34 80000093 ffffffff                                      
[<c0008fd8>] (__dabt_svc+0x38/0x60) from [<c020db34>] (musb_g_giveback+0x8/0x90)
[<c020db34>] (musb_g_giveback+0x8/0x90) from [<c020cae4>] (musb_g_ep0_irq+0x1b8)
[<c020cae4>] (musb_g_ep0_irq+0x1b8/0x900) from [<c020bd6c>] (musb_interrupt+0x1)
[<c020bd6c>] (musb_interrupt+0x114/0x8a8) from [<c0211580>] (da8xx_musb_interru)
[<c0211580>] (da8xx_musb_interrupt+0xec/0x1f8) from [<c0051c70>] (handle_irq_ev)
[<c0051c70>] (handle_irq_event_percpu+0x50/0x1ac) from [<c0051e1c>] (handle_irq)
[<c0051e1c>] (handle_irq_event+0x50/0x78) from [<c0054628>] (handle_edge_irq+0x)
[<c0054628>] (handle_edge_irq+0x94/0x180) from [<c0051588>] (generic_handle_irq)
[<c0051588>] (generic_handle_irq+0x2c/0x40) from [<c0009c8c>] (handle_IRQ+0x30/)
[<c0009c8c>] (handle_IRQ+0x30/0x84) from [<c0009038>] (__irq_svc+0x38/0x8c)    
[<c0009038>] (__irq_svc+0x38/0x8c) from [<c0009db0>] (default_idle+0x2c/0x30)  
[<c0009db0>] (default_idle+0x2c/0x30) from [<c0009fb4>] (cpu_idle+0xd0/0xfc)    
[<c0009fb4>] (cpu_idle+0xd0/0xfc) from [<c03c6734>] (start_kernel+0x2b4/0x30c)

Очень надеюсь на помощь, тк что делать дальше совершенно не представляю...
Go to the top of the page
 
+Quote Post
gormih
сообщение Mar 24 2014, 09:20
Сообщение #2


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Viciouspriest @ Mar 24 2014, 12:20) *
задача запустить как девайс, чтобы при подключении к компутеру хотя бы работал как виртуальный ком-порт (программа минимум).

Можно пояснить? Что хочется добиться в конечном итоге? Сделать любой абы-какой usb-device, который лишь бы определялся в другой системе?


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Viciouspriest
сообщение Mar 24 2014, 09:31
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 24-08-12
Пользователь №: 73 242



Цитата(gormih @ Mar 24 2014, 13:20) *
Можно пояснить? Что хочется добиться в конечном итоге? Сделать любой абы-какой usb-device, который лишь бы определялся в другой системе?


Ну я же написал, что нужно хотя бы сделать рабочий СОМ-порт... Понять, как из линукс-устройства сделать девайс.

Сообщение отредактировал Viciouspriest - Mar 24 2014, 09:31
Go to the top of the page
 
+Quote Post
gormih
сообщение Mar 24 2014, 09:40
Сообщение #4


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Viciouspriest @ Mar 24 2014, 13:31) *
Ну я же написал, что нужно хотя бы сделать рабочий СОМ-порт... Понять, как из линукс-устройства сделать девайс.

Ну в данном случае я бы делал так:
1) Через конфиг ядра нашел бы, какие модули в него добавились.
2) В эти модули понатыкал побольше диагностических kprint

И еще вопрос - там у вас это serial модулем включено в ядро? (M) или (*) ?


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Viciouspriest
сообщение Mar 25 2014, 02:27
Сообщение #5





Группа: Участник
Сообщений: 14
Регистрация: 24-08-12
Пользователь №: 73 242



Цитата(gormih @ Mar 24 2014, 13:40) *
Ну в данном случае я бы делал так:
1) Через конфиг ядра нашел бы, какие модули в него добавились.
2) В эти модули понатыкал побольше диагностических kprint

И еще вопрос - там у вас это serial модулем включено в ядро? (M) или (*) ?


Включено как (*).
Я еще не могу понять, почему контроллер никак не реагирует на запись битов в управляющий регистр... Как переключать режимы работы на лету?
Go to the top of the page
 
+Quote Post
gormih
сообщение Mar 25 2014, 07:14
Сообщение #6


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Viciouspriest @ Mar 25 2014, 06:27) *
Включено как (*).

Так не пойдет. Сделайте (М)
Цитата(Viciouspriest @ Mar 25 2014, 06:27) *
Я еще не могу понять, почему контроллер никак не реагирует на запись битов в управляющий регистр... Как переключать режимы работы на лету?

Вам не помешало бы изучить архитектуру ядра, в том числе что такое spinlock и.т.д. Для начала. Рекомендую книгу Роберата Лава. ISBN 5-8459-1085-1


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Viciouspriest
сообщение Mar 25 2014, 07:42
Сообщение #7





Группа: Участник
Сообщений: 14
Регистрация: 24-08-12
Пользователь №: 73 242



Цитата(gormih @ Mar 25 2014, 11:14) *
Так не пойдет. Сделайте (М)

Вам не помешало бы изучить архитектуру ядра, в том числе что такое spinlock и.т.д. Для начала. Рекомендую книгу Роберата Лава. ISBN 5-8459-1085-1


Вы бы не могли пояснить, почему в данном случае (*) не подходит и причем здесь spinlock?
Go to the top of the page
 
+Quote Post
gormih
сообщение Mar 25 2014, 08:41
Сообщение #8


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Viciouspriest @ Mar 25 2014, 11:42) *
Вы бы не могли пояснить, почему в данном случае (*) не подходит

Потому что не все модули ядра поддерживают статический режим загрузки.
Для начала его нужно пробывать загрузить через modprobe, и лишь потом при особом желании делать статическим.
Цитата(Viciouspriest @ Mar 25 2014, 11:42) *
и причем здесь spinlock?

Забудьте :-) Это к слову. Я же не знаю, откуда Вы пытаетесь писать в регистры.


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
KES
сообщение Mar 28 2014, 04:11
Сообщение #9





Группа: Новичок
Сообщений: 1
Регистрация: 28-03-14
Пользователь №: 81 125



Всем привет!

С зависанием ядра разобрались. Проблема была в том, что по умолчанию режим USB был MUSB_UNDEFINED. Из-за этого не проводились нужные инициализации, и ядро падало на вызове list_del(&req->list); в musb_g_giveback() (musb_gadget.c). После добавления pdata->mode = MUSB_OTG; в da8xx_probe() (da8xx.c) режим гаджета заработал - на контроллере появилось устройство /dev/ttyGS0, а при соединении с хостом на хосте появляется /dev/ttyACM0. Запускаю и там, и там minicom и убеждаюсь, что данные передаются как в одну, так и в другую сторону. Но я сомневаюсь, что такая инициализация режима USB - корректная.

Таким образом, сейчас на повестке дня sm.gif два вопроса:
- Где и как корректно инициализировать режим USB?
- Как переключать режим USB (gadget mode <-> host mode) в процессе работы?

PS. Конечно, я сейчас и сам буду гуглить, читать документацию и т.д. Но, если кто-то уже в теме и сможет поделиться знаниями, то это будет здорово!
Go to the top of the page
 
+Quote Post
Слёзкин
сообщение Oct 21 2014, 06:57
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 26-10-11
Пользователь №: 67 951



--- (удалите, пожалуйста)

Сообщение отредактировал Слёзкин - Oct 21 2014, 11:27
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 22:45
Рейтинг@Mail.ru


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