Project

General

Profile

XMMProtocolInterfaces » History » Version 39

Denis 'GNUtoo' Carikli, 01/31/2022 09:29 AM
Add more details about /dev/ttyACM1

1 1 Denis 'GNUtoo' Carikli
h1. XMMProtocolInterfaces
2
3 5 Denis 'GNUtoo' Carikli
{{>toc}}
4
5 10 Denis 'GNUtoo' Carikli
h2. usb_sel
6 3 Denis 'GNUtoo' Carikli
7 21 Denis 'GNUtoo' Carikli
h3. HOWTO enable the modem usb interface
8 3 Denis 'GNUtoo' Carikli
9 21 Denis 'GNUtoo' Carikli
The modem also has an USB port that can be routed to the smartphone/tablet USB port.
10 1 Denis 'GNUtoo' Carikli
11 21 Denis 'GNUtoo' Carikli
To do that you first need to get a root shell in the device as the commands need to be executed as root.
12
13 10 Denis 'GNUtoo' Carikli
Once this is done you need to switch the USB connector to the modem USB. This can be done with the following command:
14 1 Denis 'GNUtoo' Carikli
<pre>
15 10 Denis 'GNUtoo' Carikli
echo MODEM > /sys/devices/virtual/sec/switch/usb_sel
16 1 Denis 'GNUtoo' Carikli
</pre>
17
18 10 Denis 'GNUtoo' Carikli
Then nothing will happen, you will still be able to login through adb.
19 1 Denis 'GNUtoo' Carikli
20 10 Denis 'GNUtoo' Carikli
To make the device switch to the modem USB you then need to unplug and replug the USB cable between your computer and the device.
21
22
At this point, if the modem was booted, you'll see a new USB device appearing.
23
Some serial ports will also appear.
24
25
Tested on Replicant 6.0 0004 RC3
26
27 22 Denis 'GNUtoo' Carikli
| Device   | Distribution           | Modem status | USB ids (lsusb from laptop)   | tty                          |
28 1 Denis 'GNUtoo' Carikli
| GT-I9100 | Replicant 6.0 0004 RC3 | Off          | None                          | N/A                          |
29
| GT-I9100 | Replicant 6.0 0004 RC3 | Booted       | 1519:0020 Comneon HSIC Device | /dev/ttyACM0 -> /dev/ttyACM6 |
30
| GT-I9300 | Replicant 6.0 0004 RC3 | Booted       | 1519:0020 Comneon HSIC Device | /dev/ttyACM0 -> /dev/ttyACM6 |
31 21 Denis 'GNUtoo' Carikli
32
When running lsusb on the SOC on the Replicant 11 kernel on a GT-I9300, we also see @1519:0020 Comneon HSIC Device@ once the modem is booted. Once powered on and before booting, the USB ids seen in lsusb with that kernel are these ones: @058b:0041 Infineon Technologies Flash Loader utility@ instead.
33
34
As the modem isn't visible either when not powered on, we need to look if it's possible to boot the modem from a laptop for instance.
35 10 Denis 'GNUtoo' Carikli
36 11 Denis 'GNUtoo' Carikli
h3. Protocols
37 12 Denis 'GNUtoo' Carikli
38 39 Denis 'GNUtoo' Carikli
|_. Device |_. State      |_. UART       |_. Protocol                                                         |
39
| GT-I9100 | modem booted | /dev/ttyACM0 | AT: [[GTI9100ModemTTYACM0]]                                        |
40
| GT-I9100 | modem booted | /dev/ttyACM1 | Compatible with xgoldmon                                           |
41
| GT-I9300 | modem booted | /dev/ttyACM0 | AT: [[GTI9300ModemTTYACM0]]                                        |
42
| GT-I9100 | modem booted | /dev/ttyACM1 | With Replicant 6, Xgoldmon waits for messages but nothing arrives, 
43
                                           we have some messages with the stock firmware though               |
44
| GT-I9300 | modem booted | /dev/ttyACM3 | AT: [[GTI9300ModemTTYACM0]]                                        |
45 37 Denis 'GNUtoo' Carikli
46 19 Denis 'GNUtoo' Carikli
h3. Xgoldmon
47 1 Denis 'GNUtoo' Carikli
48 23 Denis 'GNUtoo' Carikli
description: Xgoldmon is a software that can get some cellular protocol traces from some Samsung phones using the samsung-ipc protocol.
49
git: https://github.com/2b-as/xgoldmon.git
50
51 4 Denis 'GNUtoo' Carikli
Xgoldmon seem to display things on the GT-I9100:
52 1 Denis 'GNUtoo' Carikli
<pre>
53
# ./xgoldmon -vvvv -i localhost -t s2 -l /dev/ttyACM1
54
LOG:>>[HIGH]oembatt.c,310,[DISP] Thermistor : measured_value=1630666778<<
55
LOG:>>[HIGH]oembatt.c,137,[DISP] oem_set_batt_level : 4220<<
56 9 Denis 'GNUtoo' Carikli
LOG:>>[HIGH]oembatt.c,236,[DISP] BATT : measured_value_mv=4220, AvgBattVal_mv=4007, battery_level=5<<
57
LOG:>>[LOW]oemdisplay.c,363,no change -> rssi:4, bat:5<<
58
LOG:>>[HIGH]oembatt.c,310,[DISP] Thermistor : measured_value=1630666779<<
59
LOG:>>[HIGH]oembatt.c,137,[DISP] oem_set_batt_level : 4225<<
60
LOG:>>[HIGH]oembatt.c,236,[DISP] BATT : measured_value_mv=4225, AvgBattVal_mv=4026, battery_level=5<<
61
LOG:>>[LOW]oemdisplay.c,363,no change -> rssi:4, bat:5<<
62 1 Denis 'GNUtoo' Carikli
LOG:>>[HIGH]oembatt.c,310,[DISP] Thermistor : measured_value=1630666778<<
63
LOG:>>[HIGH]oembatt.c,137,[DISP] oem_set_batt_level : 4220<<
64
LOG:>>[HIGH]oembatt.c,236,[DISP] BATT : measured_value_mv=4220, AvgBattVal_mv=4055, battery_level=5<<
65
LOG:>>[LOW]oemdisplay.c,363,no change -> rssi:4, bat:5<<
66
</pre>
67
68
And when calling an (inexisting/invalid) number, the frames appear in Wireshark.
69 19 Denis 'GNUtoo' Carikli
70
However on the GT-I9300 it waits for messages that never arrive.
71
And on the GT-I9100 there seem to be very few messages.
72
73 26 Denis 'GNUtoo' Carikli
I did some tests and compared a GT-I9100 with Replicant 6 and one with the stock distribution (rooted) and the one running Replicant outputed very few messages while the one running the stock OS outputed many messages.
74
75 29 Denis 'GNUtoo' Carikli
Both had the same result when running @AT+TRACE?@ on /dev/ttyACM0:
76 26 Denis 'GNUtoo' Carikli
<pre>
77
at+trace?
78
+TRACE: 1,921600,"ap=1;st=1;db=1;pr=1;bt=1,lt=1;li=1;ga=1;ae=1","DTM",0
79
</pre>
80
81
For more background on the values:
82
<pre>
83
AT+TRACE=?
84
+TRACE: description START
85
86
87
at+trace=[<mode>],[<speed>],["<unit>=<umode>[,<unit>=<umode>[;...]]]",["<method>"],[PowerSavingCountdown]
88
89
<mode>:
90
       -------------------------------------------------------------
91
                                                                    0:        sets all units OFF [param <unit> will be ignored !]
92
                                                                                                                                 1:        sets all units ON  [param <unit> will be ignored !]
93
                                 no param: 3rd param. <units> configures trace-units
94
                                                                                              -> trace? will then display 128 as <mode>
95
96
<speed>: (115200,230400,460800,921600,1843200,3000000,3250000,6000000)
97
98
99
<units>:
100
        -------------
101
                     ap: apoxi
102
                              st: stack
103
                                       db: debug
104
                                                pr: printf
105
                                                          bt: bluetooth
106
                                                                       lt: LLT
107
                                                                              li: LwIP
108
                                                                                      gt: GATE
109
                                                                                              ae: AENEAS
110
111
<umode>:
112
        -----------------
113
                         0: unit-trace OFF
114
                                          1: unit-trace ON
115
116
117
<method>:
118
         --------------------------------
119
                                         "BTM":  byte stuffing trace method
120
                                                                           "DTM":  direct trace method
121
                                                                                                      "EBTM": extended byte stuffing trace method
122
123
124
<PowerSavingCountdown in msecs>: (0-30000)
125
126
127
i.e.:
128
     --------------------------------------------------
129
                                                       at+trace=0
130
                                                                 at+trace=,460800
131
                                                                                 at+trace=,115200,"st=1,pr=1,bt=1,ap=0,db=1,lt=0,li=0"
132
                                                                                                                                      at+trace=,,"lt=1,db=1,ga=0"
133
    at+trace=,,,"EBTM"
134
                      at+trace=,,,,2000
135
136
+TRACE: description END
137
138
OK
139
</pre>
140
141
On the stock OS I most followed xmongold procedure:
142
<pre>
143
To enable the logging mode ("diag mode") on the S2, S3 and Note2:
144
- Go to the Phone application, enter *#9900# and set "Debug Level
145
  Enabled" to "HIGH". The phone will reboot.
146
- Go to the Phone application again, enter *#7284# and set "USB" to
147
  "MODEM" and tap "SAVE and RESET". The phone will reboot again.
148
</pre>
149
But I didn't do the @*#9900@ thing as I didn't see any debug level.
150
151 27 Denis 'GNUtoo' Carikli
I only had the following menu:
152 26 Denis 'GNUtoo' Carikli
<pre>
153
+-------------------------------------------------+
154
|              Run dumpstate/logcat/modem log     |
155
+-------------------------------------------------+
156
|              Delete dumpstate/logcat            |
157
+-------------------------------------------------+
158
|              run dumpstate/local                |
159
+-------------------------------------------------+
160
|              Copy kenrel log to the SD card     |
161
+-------------------------------------------------+
162
|              Run modem log                      |
163
+-------------------------------------------------+
164
|         Copy to sdcard(include CP Ramdump)      |
165
+-------------------------------------------------+
166
| Disable fast dormancy (Current State: Enabled ) |
167
+-------------------------------------------------+
168
|              Ramdump Mode Enable/HIGH           |
169
+-------------------------------------------------+
170 27 Denis 'GNUtoo' Carikli
|                TCP DUMP START                   |
171 26 Denis 'GNUtoo' Carikli
+-------------------------------------------------+
172 27 Denis 'GNUtoo' Carikli
|        Enable SecLog (currently disabled)       |
173
+-------------------------------------------------+
174
|                             Exit                |
175
+-------------------------------------------------+
176 26 Denis 'GNUtoo' Carikli
</pre>
177
178 28 Denis 'GNUtoo' Carikli
When using run modem log it did show the following popup:
179 26 Denis 'GNUtoo' Carikli
<pre>
180
+----------------------------+
181
| /!\ Dump Result            |
182
+----------------------------+
183
| GET MODEM LOG SUCCESS!     |
184
| Please copy to SDcard with |
185
| other Menu button.         |
186
+----------------------------+
187
|            OK              |
188
+----------------------------+
189
</pre>
190
191 30 Denis 'GNUtoo' Carikli
As for the following:
192
<pre>
193
- Go to the Phone application again, enter *#7284# and set "USB" to
194
  "MODEM" and tap "SAVE and RESET". The phone will reboot again.
195
</pre>
196 31 Denis 'GNUtoo' Carikli
I didn't have any "SAVE and RESET" and I probably didn't need to reboot but I probably needed to disconnect and reconnect the USB cable.
197 30 Denis 'GNUtoo' Carikli
198
The setting stay across reboots (I still have @1519:0020 Comneon HSIC Device@) and in the recovery I don't have any USB device (anymore?).
199 26 Denis 'GNUtoo' Carikli
200
201 1 Denis 'GNUtoo' Carikli
In the one running Replicant I did @AT+TRACE=1@.
202 38 Denis 'GNUtoo' Carikli
203
204
On the GT-I9300, following this part:
205
<pre>
206
- Go to the Phone application again, enter *#7284# and set "USB" to
207
  "MODEM" and tap "SAVE and RESET". The phone will reboot again.
208
</pre>
209
results in the "PARAM partition being written to":https://redmine.replicant.us/projects/replicant/wiki/GTI9300PARAM#USB-switch . At the next boot the bootloader will configure the USB switch to connect to the modem USB. And if you install Replicant just after that, you end up with no adb in the recovery or in Replicant, though USB host works fine and heimdall also works fine.
210
211
I've also "written a tool":https://git.replicant.us/contrib/GNUtoo/tools/at-mappers/ to diff the modem settings through AT commands, and it didn't find any difference beside with the @AT+TRACE@ settings.
212
213
The goal was to find some differences after doing that:
214
<pre>
215
- Go to the Phone application, enter *#9900# and set "Debug Level
216
  Enabled" to "HIGH". The phone will reboot.
217
</pre>
218
219
Here I captured the settings with @LOW@ and @HIGH@, and the only interesting difference is with AT+TRACE:
220
<pre>
221
$ diff -u GT-I9300-main-stock-low-1.conf GT-I9300-main-stock-high-3.conf
222
223
[...]
224
-at+trace = ['+TRACE: 0,921600,"ap=0;st=0;db=0;pr=0;bt=0;lt=0;li=0;ga=0;ae=0","DTM",0']
225
+at+trace = ['+TRACE: 1,921600,"ap=1;st=1;db=1;pr=1;bt=1,lt=1;li=1;ga=1;ae=1","DTM",0']
226
[...]
227
</pre>
228
229
Note that if we have @+TRACE: 0,921600,"ap=0;st=0;db=0;pr=0;bt=0;lt=0;li=0;ga=0;ae=0","DTM",0@, we can simply do AT+TRACE=1 to make it like it should (@+TRACE: 1,921600,"ap=1;st=1;db=1;pr=1;bt=1,lt=1;li=1;ga=1;ae=1","DTM",0@).
230 24 Denis 'GNUtoo' Carikli
231 32 Denis 'GNUtoo' Carikli
h2. Upstream kernel
232
233 36 Denis 'GNUtoo' Carikli
The upstream driver for the Galaxy SIII (GT-I9300) is in "drivers/extcon/extcon-max77693.c":https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/extcon/extcon-max77693.c
234 32 Denis 'GNUtoo' Carikli
235
Once loaded we have:
236
<pre>
237
[root@u-boot-i9300 ~]# uname -r
238
5.10.0-rc2+
239
240
[root@u-boot-i9300 ~]# cd /sys/class/extcon/extcon0
241
[root@u-boot-i9300 extcon0]# ls */
242
cable.0/:
243
name  state
244
245
cable.1/:
246
name  state
247
248
cable.2/:
249
name  state
250
251
cable.3/:
252
name  state
253
254
cable.4/:
255
name  state
256
257
cable.5/:
258
name  state
259
260
cable.6/:
261
name  state
262
263
cable.7/:
264
name  state
265
266
cable.8/:
267
name  state
268
269
cable.9/:
270
name  state
271
272
device/:
273
driver  driver_override  extcon  input  modalias  power  subsystem  uevent
274
275
power/:
276
async  autosuspend_delay_ms  control  runtime_active_kids  runtime_active_time  runtime_enabled  runtime_status  runtime_suspended_time  runtime_usage
277
278
subsystem/:
279
extcon0
280
[root@u-boot-i9300 extcon0]# grep . */name
281
cable.0/name:USB
282
cable.1/name:USB-HOST
283
cable.2/name:SDP
284
cable.3/name:DCP
285
cable.4/name:FAST-CHARGER
286
cable.5/name:SLOW-CHARGER
287
cable.6/name:CDP
288
cable.7/name:MHL
289
cable.8/name:JIG
290
cable.9/name:DOCK
291 33 Denis 'GNUtoo' Carikli
[root@u-boot-i9300 extcon0]# grep .  */state
292
cable.0/state:1
293
cable.1/state:0
294
cable.2/state:1
295
cable.3/state:0
296
cable.4/state:0
297
cable.5/state:0
298
cable.6/state:0
299
cable.7/state:0
300
cable.8/state:0
301
cable.9/state:0
302 32 Denis 'GNUtoo' Carikli
</pre>
303
304
I'm unsure if switching from userspace is implemented or not. 
305
306 35 Denis 'GNUtoo' Carikli
Though some part looks unimplemented. 
307
308
In "gpio-rev00-m0.h in the smdk4412 kernel":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/include/mach/gpio-rev00-m0.h#n169 we have:
309 32 Denis 'GNUtoo' Carikli
<pre>
310
#define GPIO_USB_SEL            EXYNOS4212_GPJ0(1)
311
</pre>
312 1 Denis 'GNUtoo' Carikli
313 35 Denis 'GNUtoo' Carikli
And the "max77693-muic.c driver":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/misc/max77693-muic.c seems to use that to do the switch between the modem USB and the SOC USB.
314 32 Denis 'GNUtoo' Carikli
And that seems to be used to switch to the modem USB.
315
316 24 Denis 'GNUtoo' Carikli
h2. Links
317
318 25 Denis 'GNUtoo' Carikli
* https://forum.xda-developers.com/t/info-r-d-i9300-uart-and-nvdata-guide.2928854/ Documentation for some GT-I9300 non-standard AT commands
319
* https://forum.xda-developers.com/t/a-sgs2-serial-how-to-talk-to-the-modem-with-at-commands.1471241/ Documentation for GT-I9100  tracing commandsh