Detecting Dual SIM on EM7455

Jack Broderick jbroderick at councilrock.com
Wed Apr 7 11:13:30 UTC 2021


On Wed, Apr 7, 2021 at 5:31 AM Aleksander Morgado <aleksander at aleksander.es>
wrote:

> 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 apologies if this wasn't clear. The above case is the "failing" case.
--uim-get-card-status shows two SIMs, it doesn't, however, show the ICCID
for that card, which makes it appear from software as if that SIM card is
not installed. I know there are "SIM Detect"  lines on the SIM cards,
however, we leave them both floating because we do not know if a SIM will
be installed or not during production. We also do not have SIM slots that
physically short that pin to ground if a SIM is inserted.

> >>
> >>
> >> 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.
>

Get Slot Status:
root at EDG4600:~# qmicli -p -d /dev/lte/qmi_b --uim-get-slot-status
[/dev/lte/qmi_b] Successfully got slots status
[/dev/lte/qmi_b] 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: 89011703278374634023

root at EDG4600:~# qmicli -p -d /dev/lte/qmi_b --uim-get-card-status
[/dev/lte/qmi_b] 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:03:02: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: '3'
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:03:02:00:00
Personalization state: 'unknown'
UPIN replaces PIN1: 'no'
PIN1 state: 'disabled'
PIN1 retries: '3'
PUK1 retries: '10'
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'

*** Switch primary to slot 1
A potentially unrelated issue is that it appears MM restarts when switching
slots on a modem that needs to switch profiles as a result:
Apr  7 10:56:07 EDG4600 ModemManager[15523]: <info>  ModemManager (version
1.16.2) starting in system bus...

I have not looked into this, only just noticed as I switched the slot...

After changing SIM slots only slot info 1 is shown. If the profile doesn't
switch, then the ICCID for both SIM's will be shown (which is the example I
shared previously of --uim-get-card-status):
root at EDG4600:~# qmicli -p -d /dev/lte/qmi_b --uim-get-card-status
[/dev/lte/qmi_b] 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:86:FF:FF:89:FF:FF:FF:FF
Personalization state: 'ready'
UPIN replaces PIN1: 'no'
PIN1 state: 'disabled'
PIN1 retries: '3'
PUK1 retries: '3'
PIN2 state: 'enabled-not-verified'
PIN2 retries: '3'
PUK2 retries: '3'
Slot [2]:
Card state: 'absent'
UPIN state: 'not-initialized'
UPIN retries: '0'
UPUK retries: '0'
root at EDG4600:~# qmicli -p -d /dev/lte/qmi_b --uim-get-slot-status
[/dev/lte/qmi_b] Successfully got slots status
[/dev/lte/qmi_b] 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: unknown*

An EM7511 with dual SIM shows the ICCID for both SIM's on bootup:
root at EDG4200:~# qmicli -p -d /dev/lte/qmi_a --uim-get-slot-status
[/dev/lte/qmi_a] Successfully got slots status
[/dev/lte/qmi_a] 2 physical slots found:
  Physical slot 1:
     Card status: present
     Slot status: active
    Logical slot: 1
           ICCID: 89011703278374630625
        Protocol: uicc
        Num apps: 0
        Is eUICC: no
  Physical slot 2:
     Card status: present
     Slot status: inactive
           ICCID: 89440800000000000004
        Protocol: uicc
        Num apps: 0
        Is eUICC: no
root at EDG4200:~# qmicli -p -d /dev/lte/qmi_a --uim-get-card-status
[/dev/lte/qmi_a] 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:03:02: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: '3'
                        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:03:02:00:00
                Personalization state: 'unknown'
                UPIN replaces PIN1: 'no'
                PIN1 state: 'disabled'
                        PIN1 retries: '3'
                        PUK1 retries: '10'
                PIN2 state: 'not-initialized'
                        PIN2 retries: '0'
                        PUK2 retries: '0'
  -----------------------------------
  SIM      |        primary sim path: /org/freedesktop/ModemManager1/SIM/0
           |          sim slot paths: slot 1:
/org/freedesktop/ModemManager1/SIM/0 (active)
           |                          slot 2:
/org/freedesktop/ModemManager1/SIM/1


> --
> Aleksander
> https://aleksander.es


I hope that wasn't too much information.

Thanks,
Jack
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/modemmanager-devel/attachments/20210407/af02b9ad/attachment-0001.htm>


More information about the ModemManager-devel mailing list