Project

General

Profile

XMMProtocolInterfaces » History » Version 40

Denis 'GNUtoo' Carikli, 01/31/2022 09:32 AM
Xgoldmon: separate GT-I9100 and GT-I9300

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 40 Denis 'GNUtoo' Carikli
h4. GT-I9100
52
53 4 Denis 'GNUtoo' Carikli
Xgoldmon seem to display things on the GT-I9100:
54 1 Denis 'GNUtoo' Carikli
<pre>
55
# ./xgoldmon -vvvv -i localhost -t s2 -l /dev/ttyACM1
56
LOG:>>[HIGH]oembatt.c,310,[DISP] Thermistor : measured_value=1630666778<<
57
LOG:>>[HIGH]oembatt.c,137,[DISP] oem_set_batt_level : 4220<<
58 9 Denis 'GNUtoo' Carikli
LOG:>>[HIGH]oembatt.c,236,[DISP] BATT : measured_value_mv=4220, AvgBattVal_mv=4007, battery_level=5<<
59
LOG:>>[LOW]oemdisplay.c,363,no change -> rssi:4, bat:5<<
60
LOG:>>[HIGH]oembatt.c,310,[DISP] Thermistor : measured_value=1630666779<<
61
LOG:>>[HIGH]oembatt.c,137,[DISP] oem_set_batt_level : 4225<<
62
LOG:>>[HIGH]oembatt.c,236,[DISP] BATT : measured_value_mv=4225, AvgBattVal_mv=4026, battery_level=5<<
63
LOG:>>[LOW]oemdisplay.c,363,no change -> rssi:4, bat:5<<
64 1 Denis 'GNUtoo' Carikli
LOG:>>[HIGH]oembatt.c,310,[DISP] Thermistor : measured_value=1630666778<<
65
LOG:>>[HIGH]oembatt.c,137,[DISP] oem_set_batt_level : 4220<<
66
LOG:>>[HIGH]oembatt.c,236,[DISP] BATT : measured_value_mv=4220, AvgBattVal_mv=4055, battery_level=5<<
67
LOG:>>[LOW]oemdisplay.c,363,no change -> rssi:4, bat:5<<
68
</pre>
69
70
And when calling an (inexisting/invalid) number, the frames appear in Wireshark.
71 19 Denis 'GNUtoo' Carikli
72
However on the GT-I9300 it waits for messages that never arrive.
73
And on the GT-I9100 there seem to be very few messages.
74
75 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.
76
77 29 Denis 'GNUtoo' Carikli
Both had the same result when running @AT+TRACE?@ on /dev/ttyACM0:
78 26 Denis 'GNUtoo' Carikli
<pre>
79
at+trace?
80
+TRACE: 1,921600,"ap=1;st=1;db=1;pr=1;bt=1,lt=1;li=1;ga=1;ae=1","DTM",0
81
</pre>
82
83
For more background on the values:
84
<pre>
85
AT+TRACE=?
86
+TRACE: description START
87
88
89
at+trace=[<mode>],[<speed>],["<unit>=<umode>[,<unit>=<umode>[;...]]]",["<method>"],[PowerSavingCountdown]
90
91
<mode>:
92
       -------------------------------------------------------------
93
                                                                    0:        sets all units OFF [param <unit> will be ignored !]
94
                                                                                                                                 1:        sets all units ON  [param <unit> will be ignored !]
95
                                 no param: 3rd param. <units> configures trace-units
96
                                                                                              -> trace? will then display 128 as <mode>
97
98
<speed>: (115200,230400,460800,921600,1843200,3000000,3250000,6000000)
99
100
101
<units>:
102
        -------------
103
                     ap: apoxi
104
                              st: stack
105
                                       db: debug
106
                                                pr: printf
107
                                                          bt: bluetooth
108
                                                                       lt: LLT
109
                                                                              li: LwIP
110
                                                                                      gt: GATE
111
                                                                                              ae: AENEAS
112
113
<umode>:
114
        -----------------
115
                         0: unit-trace OFF
116
                                          1: unit-trace ON
117
118
119
<method>:
120
         --------------------------------
121
                                         "BTM":  byte stuffing trace method
122
                                                                           "DTM":  direct trace method
123
                                                                                                      "EBTM": extended byte stuffing trace method
124
125
126
<PowerSavingCountdown in msecs>: (0-30000)
127
128
129
i.e.:
130
     --------------------------------------------------
131
                                                       at+trace=0
132
                                                                 at+trace=,460800
133
                                                                                 at+trace=,115200,"st=1,pr=1,bt=1,ap=0,db=1,lt=0,li=0"
134
                                                                                                                                      at+trace=,,"lt=1,db=1,ga=0"
135
    at+trace=,,,"EBTM"
136
                      at+trace=,,,,2000
137
138
+TRACE: description END
139
140
OK
141
</pre>
142
143
On the stock OS I most followed xmongold procedure:
144
<pre>
145
To enable the logging mode ("diag mode") on the S2, S3 and Note2:
146
- Go to the Phone application, enter *#9900# and set "Debug Level
147
  Enabled" to "HIGH". The phone will reboot.
148
- Go to the Phone application again, enter *#7284# and set "USB" to
149
  "MODEM" and tap "SAVE and RESET". The phone will reboot again.
150
</pre>
151
But I didn't do the @*#9900@ thing as I didn't see any debug level.
152
153 27 Denis 'GNUtoo' Carikli
I only had the following menu:
154 26 Denis 'GNUtoo' Carikli
<pre>
155
+-------------------------------------------------+
156
|              Run dumpstate/logcat/modem log     |
157
+-------------------------------------------------+
158
|              Delete dumpstate/logcat            |
159
+-------------------------------------------------+
160
|              run dumpstate/local                |
161
+-------------------------------------------------+
162
|              Copy kenrel log to the SD card     |
163
+-------------------------------------------------+
164
|              Run modem log                      |
165
+-------------------------------------------------+
166
|         Copy to sdcard(include CP Ramdump)      |
167
+-------------------------------------------------+
168
| Disable fast dormancy (Current State: Enabled ) |
169
+-------------------------------------------------+
170
|              Ramdump Mode Enable/HIGH           |
171
+-------------------------------------------------+
172 27 Denis 'GNUtoo' Carikli
|                TCP DUMP START                   |
173 26 Denis 'GNUtoo' Carikli
+-------------------------------------------------+
174 27 Denis 'GNUtoo' Carikli
|        Enable SecLog (currently disabled)       |
175
+-------------------------------------------------+
176
|                             Exit                |
177
+-------------------------------------------------+
178 26 Denis 'GNUtoo' Carikli
</pre>
179
180 28 Denis 'GNUtoo' Carikli
When using run modem log it did show the following popup:
181 26 Denis 'GNUtoo' Carikli
<pre>
182
+----------------------------+
183
| /!\ Dump Result            |
184
+----------------------------+
185
| GET MODEM LOG SUCCESS!     |
186
| Please copy to SDcard with |
187
| other Menu button.         |
188
+----------------------------+
189
|            OK              |
190
+----------------------------+
191
</pre>
192
193 30 Denis 'GNUtoo' Carikli
As for the following:
194
<pre>
195
- Go to the Phone application again, enter *#7284# and set "USB" to
196
  "MODEM" and tap "SAVE and RESET". The phone will reboot again.
197
</pre>
198 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.
199 30 Denis 'GNUtoo' Carikli
200 26 Denis 'GNUtoo' Carikli
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?).
201
202 1 Denis 'GNUtoo' Carikli
In the one running Replicant I did @AT+TRACE=1@.
203
204 40 Denis 'GNUtoo' Carikli
h4. GT-I9300
205 38 Denis 'GNUtoo' Carikli
206
On the GT-I9300, following this part:
207
<pre>
208
- Go to the Phone application again, enter *#7284# and set "USB" to
209
  "MODEM" and tap "SAVE and RESET". The phone will reboot again.
210
</pre>
211
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.
212
213
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.
214
215
The goal was to find some differences after doing that:
216
<pre>
217
- Go to the Phone application, enter *#9900# and set "Debug Level
218
  Enabled" to "HIGH". The phone will reboot.
219
</pre>
220
221
Here I captured the settings with @LOW@ and @HIGH@, and the only interesting difference is with AT+TRACE:
222
<pre>
223
$ diff -u GT-I9300-main-stock-low-1.conf GT-I9300-main-stock-high-3.conf
224
225
[...]
226
-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']
227
+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']
228
[...]
229
</pre>
230
231
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@).
232 24 Denis 'GNUtoo' Carikli
233 32 Denis 'GNUtoo' Carikli
h2. Upstream kernel
234
235 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
236 32 Denis 'GNUtoo' Carikli
237
Once loaded we have:
238
<pre>
239
[root@u-boot-i9300 ~]# uname -r
240
5.10.0-rc2+
241
242
[root@u-boot-i9300 ~]# cd /sys/class/extcon/extcon0
243
[root@u-boot-i9300 extcon0]# ls */
244
cable.0/:
245
name  state
246
247
cable.1/:
248
name  state
249
250
cable.2/:
251
name  state
252
253
cable.3/:
254
name  state
255
256
cable.4/:
257
name  state
258
259
cable.5/:
260
name  state
261
262
cable.6/:
263
name  state
264
265
cable.7/:
266
name  state
267
268
cable.8/:
269
name  state
270
271
cable.9/:
272
name  state
273
274
device/:
275
driver  driver_override  extcon  input  modalias  power  subsystem  uevent
276
277
power/:
278
async  autosuspend_delay_ms  control  runtime_active_kids  runtime_active_time  runtime_enabled  runtime_status  runtime_suspended_time  runtime_usage
279
280
subsystem/:
281
extcon0
282
[root@u-boot-i9300 extcon0]# grep . */name
283
cable.0/name:USB
284
cable.1/name:USB-HOST
285
cable.2/name:SDP
286
cable.3/name:DCP
287
cable.4/name:FAST-CHARGER
288
cable.5/name:SLOW-CHARGER
289
cable.6/name:CDP
290
cable.7/name:MHL
291
cable.8/name:JIG
292
cable.9/name:DOCK
293 33 Denis 'GNUtoo' Carikli
[root@u-boot-i9300 extcon0]# grep .  */state
294
cable.0/state:1
295
cable.1/state:0
296
cable.2/state:1
297
cable.3/state:0
298
cable.4/state:0
299
cable.5/state:0
300
cable.6/state:0
301
cable.7/state:0
302
cable.8/state:0
303
cable.9/state:0
304 32 Denis 'GNUtoo' Carikli
</pre>
305
306
I'm unsure if switching from userspace is implemented or not. 
307
308 35 Denis 'GNUtoo' Carikli
Though some part looks unimplemented. 
309
310
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:
311 32 Denis 'GNUtoo' Carikli
<pre>
312
#define GPIO_USB_SEL            EXYNOS4212_GPJ0(1)
313
</pre>
314 1 Denis 'GNUtoo' Carikli
315 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.
316 32 Denis 'GNUtoo' Carikli
And that seems to be used to switch to the modem USB.
317
318 24 Denis 'GNUtoo' Carikli
h2. Links
319
320 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
321
* 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