Skip to content

Commit 82e89de

Browse files
NeilChen93kartben
authored andcommitted
boards: nxp: frdm_mcxn236: Support USBHS for NXP frdm_mcxn236 board
Support USBHS for NXP frdm_mcxn236 board. Signed-off-by: Neil Chen <[email protected]>
1 parent 787ba09 commit 82e89de

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

boards/nxp/frdm_mcxn236/board.c

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@
88
#include <fsl_clock.h>
99
#include <fsl_spc.h>
1010
#include <soc.h>
11+
#if CONFIG_USB_DC_NXP_EHCI
12+
#include "usb_phy.h"
13+
#include "usb.h"
14+
15+
/* USB PHY condfiguration */
16+
#define BOARD_USB_PHY_D_CAL 0x04U
17+
#define BOARD_USB_PHY_TXCAL45DP 0x07U
18+
#define BOARD_USB_PHY_TXCAL45DM 0x07U
19+
#endif
1120

1221
/* Board xtal frequency in Hz */
1322
#define BOARD_XTAL0_CLK_HZ 24000000U
@@ -206,6 +215,49 @@ static int frdm_mcxn236_init(void)
206215
CLOCK_AttachClk(kFRO_HF_to_ADC0);
207216
#endif
208217

218+
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(usb1)) && CONFIG_USB_DC_NXP_EHCI
219+
usb_phy_config_struct_t usbPhyConfig = {
220+
BOARD_USB_PHY_D_CAL, BOARD_USB_PHY_TXCAL45DP, BOARD_USB_PHY_TXCAL45DM,
221+
};
222+
223+
SPC0->ACTIVE_VDELAY = 0x0500;
224+
/* Change the power DCDC to 1.8v (By default, DCDC is 1.8V), CORELDO to 1.1v (By default,
225+
* CORELDO is 1.0V)
226+
*/
227+
SPC0->ACTIVE_CFG &= ~SPC_ACTIVE_CFG_CORELDO_VDD_DS_MASK;
228+
SPC0->ACTIVE_CFG |= SPC_ACTIVE_CFG_DCDC_VDD_LVL(0x3) | SPC_ACTIVE_CFG_CORELDO_VDD_LVL(0x3) |
229+
SPC_ACTIVE_CFG_SYSLDO_VDD_DS_MASK | SPC_ACTIVE_CFG_DCDC_VDD_DS(0x2u);
230+
/* Wait until it is done */
231+
while (SPC0->SC & SPC_SC_BUSY_MASK) {
232+
};
233+
if ((SCG0->LDOCSR & SCG_LDOCSR_LDOEN_MASK) == 0u) {
234+
SCG0->TRIM_LOCK = SCG_TRIM_LOCK_TRIM_LOCK_KEY(0x5a5a) |
235+
SCG_TRIM_LOCK_TRIM_UNLOCK_MASK;
236+
SCG0->LDOCSR |= SCG_LDOCSR_LDOEN_MASK;
237+
/* wait LDO ready */
238+
while ((SCG0->LDOCSR & SCG_LDOCSR_VOUT_OK_MASK) == 0u) {
239+
};
240+
}
241+
SYSCON->AHBCLKCTRLSET[2] |= SYSCON_AHBCLKCTRL2_USB_HS_MASK |
242+
SYSCON_AHBCLKCTRL2_USB_HS_PHY_MASK;
243+
SCG0->SOSCCFG &= ~(SCG_SOSCCFG_RANGE_MASK | SCG_SOSCCFG_EREFS_MASK);
244+
/* xtal = 20 ~ 30MHz */
245+
SCG0->SOSCCFG = BIT(SCG_SOSCCFG_RANGE_SHIFT) | BIT(SCG_SOSCCFG_EREFS_SHIFT);
246+
SCG0->SOSCCSR |= SCG_SOSCCSR_SOSCEN_MASK;
247+
while (1) {
248+
if (SCG0->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK) {
249+
break;
250+
}
251+
}
252+
SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK |
253+
SYSCON_CLOCK_CTRL_CLKIN_ENA_FM_USBH_LPT_MASK;
254+
CLOCK_EnableClock(kCLOCK_UsbHs);
255+
CLOCK_EnableClock(kCLOCK_UsbHsPhy);
256+
CLOCK_EnableUsbhsPhyPllClock(kCLOCK_Usbphy480M, BOARD_XTAL0_CLK_HZ);
257+
CLOCK_EnableUsbhsClock();
258+
USB_EhciPhyInit(kUSB_ControllerEhci0, BOARD_XTAL0_CLK_HZ, &usbPhyConfig);
259+
#endif
260+
209261
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(lpcmp0))
210262
CLOCK_SetClkDiv(kCLOCK_DivCmp0FClk, 1U);
211263
CLOCK_AttachClk(kFRO12M_to_CMP0F);

boards/nxp/frdm_mcxn236/doc/index.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ The FRDM-MCXN236 board configuration supports the following hardware features:
6565
+-----------+------------+-------------------------------------+
6666
| ADC | on-chip | adc |
6767
+-----------+------------+-------------------------------------+
68+
| USBHS | on-chip | USB device |
69+
+-----------+------------+-------------------------------------+
6870
| LPCMP | on-chip | sensor(comparator) |
6971
+-----------+------------+-------------------------------------+
7072
| FLEXCAN | on-chip | CAN |

boards/nxp/frdm_mcxn236/frdm_mcxn236.dts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@
127127
status = "okay";
128128
};
129129

130+
zephyr_udc0: &usb1 {
131+
status = "okay";
132+
};
133+
130134
&lpcmp0 {
131135
status = "okay";
132136
};

boards/nxp/frdm_mcxn236/frdm_mcxn236.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ supported:
2626
- regulator
2727
- spi
2828
- watchdog
29+
- usb_device
2930
vendor: nxp

0 commit comments

Comments
 (0)