Applicable platforms: STM32MP157D-DK1, STM32MP157F-DK2, STM32MP257F-EV1, STM32MP257F-DK, STM32MP235F-DK.
The STM32MP215F-DK has not yet an usable M33 example.
The different platforms have different Cortex M family coprocessor:
- STM32MP15* : Cortex M4
- STM32MP2* : Cortex M33
The Firmware examples for the CM4 from STM32CubeMP1
or the CM33 from STM32CubeMP2
are enabled in the demo configuration.
All examples built are installed in the path /usr/lib/Cube-M4-examples/
or /usr/lib/Cube-M33-examples/
We will use the GPIO_EXTI application for the example as it is easy to test.
# cd /usr/lib/Cube-M4-examples/GPIO_EXTI/
# ./fw_cortex_m4.sh start
fw_cortex_m4.sh: fmw_name=GPIO_EXTI.elf
[ 284.342266] remoteproc remoteproc0: powering up m4
[ 284.346258] remoteproc remoteproc0: Booting fw image GPIO_EXTI.elf, size
197496
[ 284.353331] remoteproc remoteproc0: header-less resource table
[ 284.358929] remoteproc remoteproc0: no resource table found for this
firmware
[ 284.366048] remoteproc remoteproc0: header-less resource table
[ 284.371881] remoteproc remoteproc0: remote processor m4 is now up
This run the GPIO_EXTI example on the Cortex M4 processor. Test the behavior of the CM4 application by Pushing the USER1 button to toggle the state of the LED7.
# ./fw_cortex_m4.sh stop
fw_cortex_m4.sh: fmw_name=GPIO_EXTI.elf
[ 293.167161] remoteproc remoteproc0: warning: remote FW shutdown without
ack
[ 293.172769] remoteproc remoteproc0: stopped remote processor m4
To stop the example running on the M4 processor.
We will use the USBPD_DRP_UCSI application for the example as it is the one used in OpenST distribution.
# /usr/lib/Cube-M33-examples/USBPD_DRP_UCSI/fw_cortex_m33.sh start
fw_cortex_m33.sh: fmw_name=USBPD_DRP_UCSI_CM33_NonSecure_sign.bin
[ 18.436576] remoteproc remoteproc0: powering up m33
[ 18.554765] remoteproc remoteproc0: Booting fw image USBPD_DRP_UCSI_CM33_NonSecure_sign.bin, size 153148
[ 18.559710] rproc-virtio rproc-virtio.1.auto: assigned reserved memory node vdev0buffer@812fa000
[ 18.568169] virtio_rpmsg_bus virtio0: rpmsg host is online
[ 18.573088] rproc-virtio rproc-virtio.1.auto: registered virtio0 (type 7)
[ 18.579978] remoteproc remoteproc0: remote processor m33 is now up
[ 19.267503] virtio_rpmsg_bus virtio0: creating channel rpmsg-intc addr 0x400
[ 19.277735] virtio_rpmsg_bus virtio0: creating channel rpmsg_i2c addr 0x401
[ 19.279321] rpmsg_i2c virtio0.rpmsg_i2c.-1.1025: new channel: 0x401 -> 0x401!
This run the USBPD_DRP_UCSI example on the Cortex M33 processor which emulate a stm32mp25-typec usb role switch to detect if the USB-C CN15 is plugged as a device or a host.
# stm32_usbotg_eth_config.sh start
Start usb gadget
[ 35.933516] using random self ethernet address
[ 35.933578] using random host ethernet address
[ 35.963935] usb0: HOST MAC ec:16:02:e2:af:1a
[ 35.963998] usb0: MAC f6:87:0a:a3:dc:96
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
...
6: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether f6:87:0a:a3:dc:96 brd ff:ff:ff:ff:ff:ff
Test the behavior of the CM33 application by running
stm32_usbotg_eth_config.sh script which will configure USB configfs to
have the USB-C as a USB rndis gadget.
If you plug the USB-C to your computer you will see a new network
interface.
# stm32_usbotg_eth_config.sh stop
Stop usb gadget
# /usr/lib/Cube-M33-examples/USBPD_DRP_UCSI/fw_cortex_m33.sh stop
[ 687.531875] ucsi-stm32g0-i2c 1-0035: i2c write 35, 08 error: -110
[ 687.728373] remoteproc remoteproc0: stopped remote processor m33
To stop the example running on the M33 processor.