在使用ACM接口前,先来介绍一下高通的MODEM侧与AP侧进行通信交互的中间层,SMD是一个轻量级的处理器中间通信层,它主要专注于在处理器之间的通信,不需要关注数据本身
高通提供一般提供了API用于操作处理器之间,使用SMD即共享内存的API
SMD一般对内,表现为/dev/smdx,常用的有sdm7,sdm8,smd11,smd21, 分别用的的smd数据通道,1,4,11,21;这四个通道
aliases {
/* smdtty devices */
smd7 = &smdtty_data1;
smd8 = &smdtty_data4;
smd11 = &smdtty_data11;
smd21 = &smdtty_data21;
smd36 = &smdtty_loopback;
/* spi device */
spi1 = &spi_1;
i2c4 = &i2c_4;
sdhc2 = &sdhc_2; /* SDC2 SD card slot */
};
高通内部对MODEM提供了4个通道用于内部芯片之间的通信,除了这4个通道 ,另外还提供了一个modem通道,一个GPS,一个diag诊断口,一个ACM的DS口 用于外部调试。
现在来讲一个如何将内部的4个通道分别映射作为USB的ACM口,或者UART口,其实它们不论映射为ACM口还是UART口,对外来说都可以当作一个普通串口:
smdtty_data1: qcom,smdtty-data1 {
qcom,smdtty-remote = "modem";
qcom,smdtty-port-name = "DATA1";
};
smdtty_data4: qcom,smdtty-data4 {
qcom,smdtty-remote = "modem";
qcom,smdtty-port-name = "DATA4";
};
smdtty_data11: qcom,smdtty-data11 {
qcom,smdtty-remote = "modem";
qcom,smdtty-port-name = "DATA11";
};
smdtty_data21: qcom,smdtty-data21 {
qcom,smdtty-remote = "modem";
qcom,smdtty-port-name = "DATA21";
};
ACM口新增,首先USB要打开ACM功能就需要先使能
echo 0 > /sys/class/android_usb/android0/enable
//#echo smd,smd,smd > /sys/class/android_usb/android0/f_serial/transports
echo smd,smd,smd > /sys/class/android_usb/android0/f_acm/acm_transports
echo acm > /sys/class/android_usb/android0/functions
echo 1 > /sys/devices/virtual/android_usb/android0/enable
其次要新增口,并放开对ACM口的限制
define SMD_N_PORTS 3-4 //最多只能有4个口
struct smd_port_info {
struct smd_channel *ch;
char *name;
unsigned long flags;
};
struct smd_port_info smd_pi[SMD_N_PORTS] = {
{
.name = “DS”,
},
{
.name = “DATA11”,
},
{
.name = “DATA4”,
},
};
默认波特率为9600, 8N1
在WINDOWS下,因为ACM需要驱动,有可能会导致WINDOW10-11蓝屏,所有的操作最好的LINUX下进行。
打赏作者
近期评论