Nokia 770从入手到精通(六)N770 的USB Host模式(上)硬件篇

USB设备分为HOST(主设备)和Client(从设备),只有当一台HOST与一台Client连接时才能实现数据的传输。

N770默认是工作在Client状态的,所以连接到电脑上以后会以一个U盘的形式存在。现在我需要把N770变成一个USB Host,支持连接鼠标、键盘、硬盘、U盘、MP3、USB HUB、USB转RS232等一堆设备,好处多多。

哈哈,这只是画画饼而已,N770的确可以接上述设备,但是实用性不高。不过,对于玩机一族,还是很值得一试的~

下面的方法需要初级焊接能力以及初级Linux知识。

1. 制作一根三头USB线,其中一头是用来取电的,N770的USB口不会供电,只有外接5V电源,就是这一点导致其实用性不高。(N800的USB可以向外供电,所以适用于N800的USB Host线不适用于N770!)
材料:需要两个USB母头,一个USB公头。当然你也可以剪下半根mini USB线、一个母头和一个公头,这样可以直接接到N770上。
接线方法:拿一根USB 4芯线,把两个USB母头的1~4脚对应地焊接起来,然后把USB公头的正负极接到其中一个USB母头上,USB公头的D-和D+线剪掉不焊。

焊好以后的效果

2. 软件方面,把下面的代码另存为usbhost.sh,放到/usr/bin/下面

#!/bin/sh
# use gainroot to become root and relaunch itself
if [ `id -u` != 0 ] ; then
#if not already root, call itself as root
        exec sudo gainroot <<EOF
exec $0 $*
EOF
        exit $?
fi
# real script follows

HOST_MODULES="ohci-hcd scsi_mod sd_mod usb-storage usbhid"
MODULE_PATH=/mnt/initfs/lib/modules/current
insert_modules(){
        for mod in $* ; do
                if [ -f $MODULE_PATH/${mod}.ko ]; then
                        insmod $MODULE_PATH/${mod}.ko
                fi
        done
}
remove_modules(){
#do it in reverse order
for mod in `echo $HOST_MODULES | awk '{for (i=NF ; i > 0 ; i--) printf "%s ", $i }'` ; do
    rmmod $mod
done
}

OTG_MODE="/sys/devices/platform/tahvo-usb/otg_mode"

enable_host(){
insert_modules $HOST_MODULES
echo host >${OTG_MODE}
}
disable_host(){
echo peripheral >${OTG_MODE}
remove_modules
}

/etc/init.d/ke-recv stop
mode=$(cat $OTG_MODE)
case $mode in
        host)
                echo "switching host -> client"
                disable_host
                ;;
        peripheral)
                echo "switching client -> host"
                enable_host
                ;;
esac
/etc/init.d/ke-recv start

然后 chmod 777 /usr/bin/usbhost.sh

4. 在终端运行usbhost.sh即可从Client变为host。(要切换回来,再运行一遍usbhost.sh)

5. 取一根mini USB线,小头接到N770上,大头接到USB Host线的其中一个母头上,USB Host线的另一个母头接U盘等USB设备,USB公头可以插入USB充电器或电脑的USB口来取电。

6. 好啦,这就是完工状态!下一篇日志将讲怎样使用USB键盘及U盘

Leave a Reply

Your email address will not be published. Required fields are marked *