Detecting Dual SIM on EM7455
Aleksander Morgado
aleksander at aleksander.es
Wed Apr 7 09:31:06 UTC 2021
Hey,
>> > I have recently upgraded to 1.16.2 on OpenWRT in order to utilize the extended SIM features. We integrate both the EM7511 and EM/MC7455. We have identified that on boot, the EM7511 will detect both SIM's installed, with the EM7455, however, it requires switching between the slots to detect. We previously identified this issue when using just qmicli in order to read the SIM slots.
>> >
>> > We resolved this issue by "toggling" the SIM slot on boot so qmicli would pick up both slots.
>>
>> You're saying that you need to switch SIM on boot, e.g. to the
>> secondary SIM, so that the modem ends up reporting that 2 SIMs are
>> active? If that's the case, I have a theory.
>
>
> The idea isn't necessarily that both need to be active, it's that we would like to see the information for both SIM's that are installed at all times.
>>
>>
>> > It is a bit of a hack, but it works. This becomes an issue, when using AT!IMPREF="AUTO-SIM", and using two SIM's that use different profiles. For example, if SIM1=AT&T and SIM2=GENERIC, when switching SIM's the modem appears to reboot. It is not just a reprobe by ModemManager, the usb device detaches and re-attaches.
>>
>> That is actually expected when using AUTO-SIM, as the "active" SIM
>> mandates which carrier config is loaded in the device. If you're
>> switching SIMs actively, the modem will reset itself to boot with the
>> new carrier config automatically selected.
>
>
> Okay, that makes sense, ideally we would be able to still "see" what is in the other SIM slot after this reset.
>>
>>
>> >
>> > The interesting thing is, with the EM7511, both SIM's are reported by both mmcli and qmicli without needing to "toggle". I am curious if this issue has been seen in any other testing.
>> >
>> > EM7455 After Boot, with modem on SIM1 before reboot:
>> > -----------------------------------
>> > SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0
>> > | sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
>> > | slot 2: none
>> >
>> > After running mmcli -m 0 --set-primary-sim-slot=2
>> >
>> > -----------------------------------
>> > SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/2
>> > | sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/1
>> > | slot 2: /org/freedesktop/ModemManager1/SIM/2 (active)
>> >
>> > The modem did not reset because AT!IMPREF="GENERIC" was set, the modem did re-enumerate in modemanager, however.
>> >
>>
>> Could you run this qmicli command on the EM7455 after boot?
>> $ qmicli -d /dev/cdc-wdm0 -p --uim-get-card-status
>> $ qmicli -d /dev/cdc-wdm0 -p --uim-get-slot-status
>
>
> root at test:~# qmicli -d /dev/cdc-wdm1 -p --uim-get-card-status
> [/dev/cdc-wdm1] Successfully got card status
> Provisioning applications:
> Primary GW: slot '1', application '1'
> Primary 1X: session doesn't exist
> Secondary GW: session doesn't exist
> Secondary 1X: session doesn't exist
> Slot [1]:
> Card state: 'present'
> UPIN state: 'not-initialized'
> UPIN retries: '0'
> UPUK retries: '0'
> Application [1]:
> Application type: 'usim (2)'
> Application state: 'ready'
> Application ID:
> A0:00:00:00:87:10:02:FF:FF:FF:FF:89:06:19:00:00
> Personalization state: 'ready'
> UPIN replaces PIN1: 'no'
> PIN1 state: 'disabled'
> PIN1 retries: '3'
> PUK1 retries: '10'
> PIN2 state: 'enabled-not-verified'
> PIN2 retries: '10'
> PUK2 retries: '10'
> Application [2]:
> Application type: 'isim (5)'
> Application state: 'detected'
> Application ID:
> A0:00:00:00:87:10:04:FF:FF:FF:FF:89:07:03:00:00
> Personalization state: 'unknown'
> UPIN replaces PIN1: 'no'
> PIN1 state: 'not-initialized'
> PIN1 retries: '0'
> PUK1 retries: '0'
> PIN2 state: 'not-initialized'
> PIN2 retries: '0'
> PUK2 retries: '0'
> Slot [2]:
> Card state: 'absent'
> UPIN state: 'not-initialized'
> UPIN retries: '0'
> UPUK retries: '0'
> root at test:~# qmicli -d /dev/cdc-wdm1 -p --uim-get-slot-status
> [/dev/cdc-wdm1] Successfully got slots status
> [/dev/cdc-wdm1] 2 physical slots found:
> Physical slot 1:
> Card status: present
> Slot status: inactive
> ICCID: unknown
> Physical slot 2:
> Card status: present
> Slot status: active
> Logical slot: 1
> ICCID: 8901260882270113639
>
> This is after reboot where Slot 2 as the active slot before reboot (I had just rebooted with that SIM active while debugging).
Could you please test showing the failed case where, upon boot,
--uim-get-card-status shows one single SIM instead of two?
>>
>>
>> My assumption is that you're seeing one single SIM reported because
>> --uim-get-slot-status reports one single SIM. BUT, does
>> --uim-get-card-status report 2 SIMs? ModemManager currently ignores
>> the 2nd SIM in --uim-get-card-status, because in this case both SIMs
>> are really active (unlike the slot status case). Right now MM doesn't
>> support the Dual SIM Dual Active case, although it shouldn't be very
>> difficult to support that (e.g. selecting which SIM will use the data
>> connection done via the GW provisioning session selection and such).
>>
>> So when you manually toggle to select the 2nd SIM we're using
>> --uim-switch-slot and the setup switches to Dual SIM Single Active, so
>> the slots status ends up reporting 2 SIMs now (and card status would
>> report 1 single SIM).
>>
>> Is this assumption in track? If it isn't, it could be some timing
>> issue of some sort, MM debug logs would help.
>
>
> After switching:
> root at test:~# qmicli -d /dev/cdc-wdm1 -p --uim-switch-slot=1
> [/dev/cdc-wdm1] Successfully switched slots
> root at test:~# qmicli -d /dev/cdc-wdm1 -p --uim-get-slot-status
> [/dev/cdc-wdm1] Successfully got slots status
> [/dev/cdc-wdm1] 2 physical slots found:
> Physical slot 1:
> Card status: present
> Slot status: active
> Logical slot: 1
> ICCID: 89860000502000180722
> Physical slot 2:
> Card status: present
> Slot status: inactive
> ICCID: 8901260882270113639
>
> From this, it appears that it may be more of an issue with libqmi than anything else. Maybe not even an issue but the behavior seems to be it will "cache" information for the active SIM and retain that information when the other sim is active.
There is absolutely no cache in libqmi, the qmicli commands just print
what the modem replies :) If anything, it would be an issue in the
modem firmware itself.
I still would like to see --uim-get-card-status and
--uim-get-slot-status for the failing case, i.e. booting and the slot
status reporting one single SIM even if there are 2.
--
Aleksander
https://aleksander.es
More information about the ModemManager-devel
mailing list