This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Hoernchen gerrit-no-reply at lists.osmocom.orgHoernchen has uploaded this change for review. ( https://gerrit.osmocom.org/c/simtrace2/+/25082 )
Change subject: firmware: cardem for ngff
......................................................................
firmware: cardem for ngff
Change-Id: Ia96124fbe8a752c98e7fd4096d542a3b2b9bc255
---
M firmware/apps/cardem/main.c
M firmware/libboard/ngff_cardem/include/board.h
M firmware/libboard/ngff_cardem/source/board_ngff_cardem.c
M firmware/libboard/ngff_cardem/source/card_pres.c
M firmware/libboard/ngff_cardem/source/sim_switch.c
M firmware/libcommon/source/mode_cardemu.c
6 files changed, 86 insertions(+), 41 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/82/25082/1
diff --git a/firmware/apps/cardem/main.c b/firmware/apps/cardem/main.c
index a30a211..95967ba 100644
--- a/firmware/apps/cardem/main.c
+++ b/firmware/apps/cardem/main.c
@@ -71,8 +71,13 @@
.init = mode_cardemu_init,
.exit = mode_cardemu_exit,
.run = mode_cardemu_run,
+#if defined (ngff_cardem)
+ .usart0_irq = mode_cardemu_usart1_irq,
+ .usart1_irq = mode_cardemu_usart0_irq,
+#else
.usart0_irq = mode_cardemu_usart0_irq,
.usart1_irq = mode_cardemu_usart1_irq,
+#endif
},
#endif
#ifdef HAVE_MITM
diff --git a/firmware/libboard/ngff_cardem/include/board.h b/firmware/libboard/ngff_cardem/include/board.h
index 8520d6b..bdedcf3 100644
--- a/firmware/libboard/ngff_cardem/include/board.h
+++ b/firmware/libboard/ngff_cardem/include/board.h
@@ -68,7 +68,7 @@
#define PINS_TC_USIM1 PIN_USIM1_IO_TC, PIN_USIM1_CLK_TC
#define PIN_USIM1_nRST {PIO_PA24, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}
-#define PIN_USIM1_VCC {PIO_PB2, PIOB, ID_PIOB, PIO_INPUT, PIO_DEFAULT}
+#define PIN_USIM1_VCC {PIO_PB3, PIOB, ID_PIOB, PIO_INPUT, PIO_DEFAULT}
#define PIN_USIM2_nRST {PIO_PA7, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}
//#define PIN_USIM2_VCC {PIO_PB2, PIOB, ID_PIOB, PIO_INPUT, PIO_DEFAULT}
@@ -77,14 +77,17 @@
#define PINS_USIM2 PINS_TC_USIM2, PINS_ISO7816_USIM2, PIN_USIM2_nRST
/* from v3 and onwards only (!) */
-#define PIN_DET_USIM1_PRES {PIO_PA8, PIOA, ID_PIOA, PIO_INPUT, PIO_PULLUP | PIO_DEGLITCH | PIO_IT_EDGE}
+#define PIN_DET_USIM1_PRES {PIO_PA8, PIOA, ID_PIOA, PIO_INPUT, PIO_DEGLITCH | PIO_IT_EDGE}
/* inputs reading the WWAN LED level */
#define PIN_WWAN1 {PIO_PA15, PIOA, ID_PIOA, PIO_INPUT, PIO_PULLUP | PIO_DEGLITCH | PIO_IT_EDGE}
#define PINS_WWAN_IN { PIN_WWAN1 }
+#define PIN_MODEM_EN {PIO_PA11, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
+#define PIN_N_MODEM_PWR_ON {PIO_PA26, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
+
/* outputs controlling RESET input of modems */
-#define PIN_PERST1 {PIO_PA25, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_PULLUP}
+#define PIN_PERST1 {PIO_PA25, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
#define PINS_PERST { PIN_PERST1 }
#define PIN_VERSION_DET {PIO_PA19, PIOA, ID_PIOA, PIO_PERIPH_D, PIO_DEFAULT}
@@ -102,6 +105,9 @@
#define DETECT_VCC_BY_ADC
#define VCC_UV_THRESH_1V8 1500000
-#define VCC_UV_THRESH_3V 2500000
+#define VCC_UV_THRESH_3V VCC_UV_THRESH_1V8
#define HAVE_CARDEM
+#define HAVE_BOARD_CARDINSERT
+struct cardem_inst;
+void board_set_card_insert(struct cardem_inst *ci, bool card_insert);
\ No newline at end of file
diff --git a/firmware/libboard/ngff_cardem/source/board_ngff_cardem.c b/firmware/libboard/ngff_cardem/source/board_ngff_cardem.c
index 742ec55..6bfe997 100644
--- a/firmware/libboard/ngff_cardem/source/board_ngff_cardem.c
+++ b/firmware/libboard/ngff_cardem/source/board_ngff_cardem.c
@@ -101,6 +101,7 @@
/* Initialize checking for card insert/remove events */
card_present_init();
#endif
+ wwan_perst_set(0, 0);
}
static int uart_has_loopback_jumper(void)
@@ -150,3 +151,11 @@
return 0;
}
+
+ static const Pin deton = {PIO_PA13, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT};
+ static const Pin detoff = {PIO_PA13, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT};
+
+void board_set_card_insert(struct cardem_inst *ci, bool card_insert)
+{
+ PIO_Configure(card_insert ? &deton : &detoff, 1);
+}
\ No newline at end of file
diff --git a/firmware/libboard/ngff_cardem/source/card_pres.c b/firmware/libboard/ngff_cardem/source/card_pres.c
index 198318f..7d6c483 100644
--- a/firmware/libboard/ngff_cardem/source/card_pres.c
+++ b/firmware/libboard/ngff_cardem/source/card_pres.c
@@ -39,9 +39,9 @@
return -1;
pin = &pin_cardpres[port];
- /* Card present signals are low-active, as we have a switch
- * against GND and an internal-pull-up in the SAM3 */
- present = PIO_Get(pin) ? 0 : 1;
+
+ /* high active here */
+ present = PIO_Get(pin);
return present;
}
diff --git a/firmware/libboard/ngff_cardem/source/sim_switch.c b/firmware/libboard/ngff_cardem/source/sim_switch.c
index 59513ad..3961747 100644
--- a/firmware/libboard/ngff_cardem/source/sim_switch.c
+++ b/firmware/libboard/ngff_cardem/source/sim_switch.c
@@ -21,18 +21,41 @@
#include "led.h"
#include "sim_switch.h"
-#ifdef PIN_SIM_SWITCH1
-static const Pin pin_conn_usim1 = {PIO_PA20, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT};
-#endif
-#ifdef PIN_SIM_SWITCH2
-static const Pin pin_conn_usim2 = {PIO_PA28, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT};
-#endif
+//uart12bus 2-20e pa20
+//uart22bus 1-20e pa28
+//usim2bus 1-10e pa0 pivot
+//sim det 2-10e pa13
+
+
+//default state: NO uart connected, modem connected to physical sim, NO sim presence override, modem powers sim slot
+#define pin_conn_usim1_default {PIO_PA20, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
+#define pin_conn_usim2_default {PIO_PA28, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
+#define pin_conn_mdm_sim_default {PIO_PA0, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
+#define pin_conn_set_sim_det_default {PIO_PA13, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
+#define pin_en_st_sim_vdd_default {PIO_PB2, PIOB, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT}
+#define pin_en_mdm_sim_vdd_default {PIO_PA16, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
+
+//default state: uart2 (!) connected, NO modem connected to physical sim, sim presence override, NOTHING powers sim slot
+#define pin_conn_usim1_cem {PIO_PA20, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
+#define pin_conn_usim2_cem {PIO_PA28, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
+#define pin_conn_mdm_sim_cem {PIO_PA0, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
+#define pin_en_st_sim_vdd_cem {PIO_PB2, PIOB, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT}
+#define pin_en_mdm_sim_vdd_cem {PIO_PA16, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
+
+//#define pin_conn_set_sim_det_cem {PIO_PA13, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
+
+
+#define INIT_SIM_DEFAULT pin_conn_usim1_default, pin_conn_usim2_default, pin_conn_mdm_sim_default, pin_conn_set_sim_det_default, PIN_N_MODEM_PWR_ON, PIN_MODEM_EN, pin_en_st_sim_vdd_default, pin_en_mdm_sim_vdd_default
+#define INIT_SIM_CEM pin_conn_usim1_cem, pin_conn_usim2_cem, pin_conn_mdm_sim_cem, pin_en_mdm_sim_vdd_cem, pin_en_st_sim_vdd_cem// , pin_conn_set_sim_det_cem
+
+static const Pin pins_default[] = {INIT_SIM_DEFAULT};
+static const Pin pins_cem[] = {INIT_SIM_CEM};
static int initialized = 0;
int sim_switch_use_physical(unsigned int nr, int physical)
{
- const Pin *pin;
+ const Pin pin = PIN_MODEM_EN;// PIN_N_MODEM_PWR_ON;
enum led led;
if (!initialized) {
@@ -44,18 +67,10 @@
physical ? "physical" : "virtual");
switch (nr) {
-#ifdef PIN_SIM_SWITCH1
case 0:
- pin = &pin_conn_usim1;
led = LED_USIM1;
break;
-#endif
-#ifdef PIN_SIM_SWITCH2
- case 1:
- pin = &pin_conn_usim2;
- led = LED_USIM2;
- break;
-#endif
+
default:
TRACE_ERROR("Invalid SIM%u\n\r", nr);
return -1;
@@ -63,28 +78,26 @@
if (physical) {
TRACE_INFO("%u: Use local/physical SIM\r\n", nr);
- PIO_Clear(pin);
+ PIO_Configure(pins_default, PIO_LISTSIZE(pins_default));
led_blink(led, BLINK_ALWAYS_ON);
} else {
TRACE_INFO("%u: Use remote/emulated SIM\r\n", nr);
- PIO_Set(pin);
+ PIO_Configure(pins_cem, PIO_LISTSIZE(pins_cem));
led_blink(led, BLINK_ALWAYS_OFF);
}
+ /* just power cycle the modem because this circumvents weird issues with unreliable signals */
+ PIO_Clear(&pin);
+ mdelay(200);
+ PIO_Set(&pin);
+
+
return 0;
}
int sim_switch_init(void)
{
- int num_switch = 0;
-#ifdef PIN_SIM_SWITCH1
- PIO_Configure(&pin_conn_usim1, 1);
- num_switch++;
-#endif
-#ifdef PIN_SIM_SWITCH2
- PIO_Configure(&pin_conn_usim2, 1);
- num_switch++;
-#endif
+ PIO_Configure(pins_default, PIO_LISTSIZE(pins_default));
initialized = 1;
- return num_switch;
+ return 1;
}
diff --git a/firmware/libcommon/source/mode_cardemu.c b/firmware/libcommon/source/mode_cardemu.c
index 2440ec5..4a0b862 100644
--- a/firmware/libcommon/source/mode_cardemu.c
+++ b/firmware/libcommon/source/mode_cardemu.c
@@ -39,9 +39,21 @@
#endif
/* UART pins */
+#if defined(ngff_cardem)
+static const Pin pins_usim1[] = {PINS_USIM2};
+static const Pin pin_usim1_rst = PIN_USIM2_nRST;
+#define FIRST_USART_BASE USART0
+#define FIRST_USART_ID ID_USART0
+#define FIRST_USART_IRQ USART0_IRQn
+#else
static const Pin pins_usim1[] = {PINS_USIM1};
static const Pin pin_usim1_rst = PIN_USIM1_nRST;
+#define FIRST_USART_BASE USART1
+#define FIRST_USART_ID ID_USART1
+#define FIRST_USART_IRQ USART1_IRQn
+#endif
static const Pin pin_usim1_vcc = PIN_USIM1_VCC;
+
#ifdef PIN_USIM1_IO_DIR
static const Pin pin_io_dir = PIN_USIM1_IO_DIR;
#endif
@@ -85,8 +97,8 @@
{
.num = 0,
.usart_info = {
- .base = USART1,
- .id = ID_USART1,
+ .base = FIRST_USART_BASE,
+ .id = FIRST_USART_ID,
.state = USART_RCV
},
.ep_out = SIMTRACE_CARDEM_USB_EP_USIM1_DATAOUT,
@@ -569,7 +581,7 @@
/* configure USART as ISO-7816 slave (e.g. card) */
ISO7816_Init(&cardem_inst[0].usart_info, CLK_SLAVE);
- NVIC_EnableIRQ(USART1_IRQn);
+ NVIC_EnableIRQ(FIRST_USART_IRQ);
PIO_ConfigureIt(&pin_usim1_rst, usim1_rst_irqhandler);
PIO_EnableIt(&pin_usim1_rst);
@@ -627,9 +639,9 @@
PIO_DisableIt(&pin_usim1_rst);
PIO_DisableIt(&pin_usim1_vcc);
- NVIC_DisableIRQ(USART1_IRQn);
- USART_SetTransmitterEnabled(USART1, 0);
- USART_SetReceiverEnabled(USART1, 0);
+ NVIC_DisableIRQ(FIRST_USART_IRQ);
+ USART_SetTransmitterEnabled(FIRST_USART_BASE, 0);
+ USART_SetReceiverEnabled(FIRST_USART_BASE, 0);
#ifdef CARDEMU_SECOND_UART
PIO_DisableIt(&pin_usim2_rst);
--
To view, visit https://gerrit.osmocom.org/c/simtrace2/+/25082
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: simtrace2
Gerrit-Branch: master
Gerrit-Change-Id: Ia96124fbe8a752c98e7fd4096d542a3b2b9bc255
Gerrit-Change-Number: 25082
Gerrit-PatchSet: 1
Gerrit-Owner: Hoernchen <ewild at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210728/e5621579/attachment.htm>