Skip to content

Commit 5656867

Browse files
SeppoTakalokartben
authored andcommitted
modem: cellular: Add modem driver for nRF93M1 module
Add cellular modem driver for Nordic nRF93M1 Cat 1 bis module The DTS binding was already submitted in zephyrproject-rtos#106289 Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
1 parent b2db30b commit 5656867

2 files changed

Lines changed: 78 additions & 0 deletions

File tree

drivers/modem/vendor_modem_cellular/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ endif()
99

1010
# zephyr-keep-sorted-start
1111
zephyr_library_sources_ifdef(CONFIG_DT_HAS_NORDIC_NRF91_SLM_ENABLED cellular_nordic_nrf91_slm.c)
12+
zephyr_library_sources_ifdef(CONFIG_DT_HAS_NORDIC_NRF93M1_ENABLED cellular_nordic_nrf93m1.c)
1213
zephyr_library_sources_ifdef(CONFIG_DT_HAS_QUECTEL_EG25_G_ENABLED cellular_quectel_eg25_g.c)
1314
zephyr_library_sources_ifdef(CONFIG_DT_HAS_QUECTEL_EG800Q_ENABLED cellular_quectel_eg800q.c)
1415
zephyr_library_sources_ifdef(CONFIG_DT_HAS_SIMCOM_A76XX_ENABLED cellular_simcom_a76xx.c)
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Copyright (c) 2026 Nordic Semiconductor ASA
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <zephyr/drivers/modem/modem_cellular.h>
8+
9+
#define DT_DRV_COMPAT nordic_nrf93m1
10+
11+
MODEM_CELLULAR_COMMON_CHAT_MATCHES();
12+
MODEM_CHAT_MATCH_DEFINE(pwd_match, "POWERED DOWN", "", NULL);
13+
14+
MODEM_CHAT_MATCHES_DEFINE(nordic_nrf93m1_unsol, MODEM_CELLULAR_COMMON_UNSOL_MATCHES,
15+
MODEM_CHAT_MATCH("RDY", "", modem_cellular_chat_on_modem_ready));
16+
17+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(nordic_nrf93m1_init_chat_script_cmds,
18+
MODEM_CHAT_SCRIPT_CMD_RESP("ATE0", ok_match),
19+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+IFC=2,2", ok_match),
20+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CMUX=0,0,5,127", ok_match));
21+
22+
MODEM_CHAT_SCRIPT_DEFINE(nordic_nrf93m1_init_chat_script, nordic_nrf93m1_init_chat_script_cmds,
23+
abort_matches, modem_cellular_chat_callback_handler, 10);
24+
25+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(nordic_nrf93m1_network_chat_script_cmds,
26+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CEREG=1", ok_match),
27+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CFUN=1", ok_match));
28+
29+
MODEM_CHAT_SCRIPT_DEFINE(nordic_nrf93m1_network_chat_script,
30+
nordic_nrf93m1_network_chat_script_cmds, abort_matches,
31+
modem_cellular_chat_callback_handler, 10);
32+
33+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(nordic_nrf93m1_dial_chat_script_cmds,
34+
MODEM_CHAT_SCRIPT_CMD_RESP("ATD*99***1#", connect_match));
35+
36+
MODEM_CHAT_SCRIPT_DEFINE(nordic_nrf93m1_dial_chat_script, nordic_nrf93m1_dial_chat_script_cmds,
37+
dial_abort_matches, modem_cellular_chat_callback_handler, 60);
38+
39+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(nordic_nrf93m1_shutdown_chat_script_cmds,
40+
MODEM_CHAT_SCRIPT_CMD_RESP("AT%POWD=1", pwd_match));
41+
42+
MODEM_CHAT_SCRIPT_DEFINE(nordic_nrf93m1_shutdown_chat_script,
43+
nordic_nrf93m1_shutdown_chat_script_cmds, abort_matches,
44+
modem_cellular_chat_callback_handler, 10);
45+
46+
static const struct modem_cellular_vendor_config nrf93m1_vendor = {
47+
/* clang-format off */
48+
.scripts = {
49+
.init = &nordic_nrf93m1_init_chat_script,
50+
.network = &nordic_nrf93m1_network_chat_script,
51+
.dial = &nordic_nrf93m1_dial_chat_script,
52+
.shutdown = &nordic_nrf93m1_shutdown_chat_script,
53+
},
54+
.unsol_matches = {
55+
.matches = nordic_nrf93m1_unsol,
56+
.size = ARRAY_SIZE(nordic_nrf93m1_unsol),
57+
},
58+
/* clang-format on */
59+
.power_pulse_duration_ms = 100,
60+
.reset_pulse_duration_ms = 500,
61+
.startup_time_ms = 5000,
62+
.shutdown_time_ms = 1000,
63+
};
64+
65+
#define MODEM_CELLULAR_DEVICE_NORDIC_NRF93M1(inst) \
66+
MODEM_DT_INST_PPP_DEFINE(inst, MODEM_CELLULAR_INST_NAME(ppp, inst), NULL, 98, 1500, 1500); \
67+
\
68+
static struct modem_cellular_data MODEM_CELLULAR_INST_NAME(data, inst) = { \
69+
.chat_delimiter = "\r\n", \
70+
.ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \
71+
}; \
72+
\
73+
MODEM_CELLULAR_DEFINE_AND_INIT_USER_PIPES(inst, (user_pipe_0, 3), (user_pipe_1, 4)) \
74+
\
75+
MODEM_CELLULAR_DEFINE_INSTANCE(inst, &nrf93m1_vendor)
76+
77+
DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_NORDIC_NRF93M1)

0 commit comments

Comments
 (0)