это мое HOWNOTTO получения работы USB в режиме host'а. Я надеюсь, кто-то может повторить успех MohammadAG или по крайней мере узнать, что я сделал неправильно.
Внимание: Это только для специалистов! i2cset может привести к повреждению устройства.
0. Вам понадобятся F/F USB-адаптрер, USB-кабель и n900 с потреблением энергии <200mA.
1. Установленое ядро MohammadAG (с sarahn's patches + power ignore patch + appropriate configuration), i2ctools (i2cset in PATH) и sysklogd.
У меня: установлена прошивка PR1.2, wi-fi включен, bluetooth выключен, сеть 2.5G, autodisconnect включен. Метод работы egoshin'а (будет принимать при подключении к ПК).
2. Включенное устройство с USB-кабелем, но не подключенным(приконектченым) устройством.
3.
pcsuite-enable.sh
дополнительно:
echo USB debug start > /var/log/syslog
и:
echo 10 > /sys/module/musb_hdrc/parameters/debug
4. запустить прилагаемый скрипт
sh host.txt -d
который показывает состояние после каждого шага.
5. сразу же подключить USB-устройство
6. проверить dmesg и /proc/driver/musb_hdrc
7. повторить, отключить USB-устройство,
killall sh; start bme; sleep 2; cat /proc/driver/musb_hdrc
примерно через 30 сек вы увидите:
Status: MHDRC, Mode=Peripheral (Power=20, DevCtl=80)
затем перейти к пункту 4.
Мои результаты: (с -d флагом) start: Mode=Peripheral (Power=20, DevCtl=80)
echo H: Mode=Peripheral (Power=20, DevCtl=82)
echo e: Mode=Peripheral (Power=20, DevCtl=82)
echo F: Mode=Peripheral (Power=60, DevCtl=83)
bme stopped: Mode=Peripheral (Power=60, DevCtl=83)
slept 3sec: Mode=Peripheral (Power=20, DevCtl=80)
i2cset: Mode=Peripheral (Power=f1, DevCtl=99)
later: Mode=Peripheral (Power=e1, DevCtl=99)
для описания power+devctl флага смотрим:
drivers/usb/musb/musb_regs.h
с методом egoshin'а:
Status: MHDRC, Mode=Host (Power=f0, DevCtl=dd)
OTG state: b_peripheral:3; active
dmesg:
[ 1863.465087] musb_restore_ctx_and_resume 435: restoring register context for musb_restore_ctx_and_resume [ 1863.465087] rx51_xceiv_power 1 [ 1863.465698] rx51_xceiv_reset [ 1863.850799] musb_interrupt 1948: ** IRQ peripheral usb0001 tx0000 rx0000 [ 1863.850830] musb_stage0_irq 643: <== Power=e5, DevCtl=99, int_usb=0x1 [ 1863.850860] musb_stage0_irq 829: SUSPEND (b_idle) devctl 99 power e5 [ 1863.874389] musb_interrupt 1948: ** IRQ peripheral usb0001 tx0000 rx0000 [ 1863.874420] musb_stage0_irq 643: <== Power=e1, DevCtl=99, int_usb=0x1 [ 1863.874420] musb_stage0_irq 829: SUSPEND (b_idle) devctl 99 power e1 [ 1871.680358] musb_platform_try_idle 160: b_idle inactive, for idle timer for 7 ms
Что получил MohammadAG после той же команды( его устройство находилось в R&D режиме, для меня это не имеет значения):
Status: MHDRC, Mode=Host (Power=f0, DevCtl=dd)
OTG state: a_host:9; active
с flash plugged in(не влючен) ???
Status: MHDRC, Mode=Host (Power=e0, DevCtl=99)
с bme:
Status: MHDRC, Mode=Host (Power=20, DevCtl=80)
MohammadAG: OTG state: b_idle:1; inactive
Если я сначала применял метот egoshin'а, то получал:
Status: MHDRC, Mode=Host (Power=e1, DevCtl=99)
но снова устройство не обнаруживалось OTG state: b_idle:1; inactive
host.txt