We carefully reviewed the remoteproc initialization log which was shared previously.
The line “[00000.000][INFO ]Cortex-M4 boot successful with STM32Cube FW version: v1.6.0” indicates that M4 firmware was built using STM32CubeMP1 Firmware v1.6.0. “OSD32MP1-BRK OpenSTLinux | Version: 3.0.1” official image is not compatible with “STM32CubeMP1 Firmware v1.6.0”
Please rebuild the M4 firmware using STM32CubeMP1 Firmware v1.4.0 and try again.
(STM32CubeMP1 FW v1.4.0 – https://github.com/STMicroelectronics/STM32CubeMP1/tree/1.4.0)
We also re-validated the operation of RPMSG framework using “OpenAMP_TTY_echo” project:
STM32CubeMP1-1.4.0/Projects/STM32MP157C-DK2/Applications/OpenAMP/OpenAMP_TTY_echo
Validation screenshot attached.
Arcady,
The device tree snippet posted doesn’t look correct. By referencing “uart0”, “uart1”, “uart2” without preceding “&”, you’re re-defining the UARTx peripheral definition instead of referencing and updating existing base definition.
The base UARTx device tree definitions are already present in the lower level DTS files (one of the many “include” files). For example:
To reference the above definition, enable the peripheral and update pinmux, you need to just refer the existing node’s name with “&” prefix as follows:
&uart1 {
pinctrl-names = “default”;
pinctrl-0 = <&uart1_pins>;
status = “okay”;
};
After applying the above fixes and building your DTB, you can double check how the final UARTx node looks like (base definition + your custom updates) by “disassembling” your DTB blob as shown in the link below. This is the fastest way to figure out if your custom updates are actually being reflected in the final DTB.
https://stackoverflow.com/questions/21670967/how-to-compile-dts-linux-device-tree-source-files-to-dtb
Hello c spengler,
To help you better, we would need more information about your software build environment. Please provide the version numbers for the following:
1. Which SDK from Octavo Systems are you using?
2. CubeIDE version?
3. CubeFW version?
4. OpenSTLinux Developer Package version?
5. Cube Programmer version?
If you have put together a custom yocto project:
6. U-Boot version?
7. TF-A version?
8. Kernel Version?
Doug Springer,
We need some more information on your use case to help you better.
1. Are you using an official OSD335x-SM board or a custom version of it?
1.a If this is a custom board, are all the VDDSHVx pins tied to 3.3V?
1.b Do you have any pull ups on MMC3 pins?
2. It’ll be very helpful if you can share your full device tree files and at least the MMC3 interface, VDDSHV connections part of Schematics.
Doug Springer,
Can you please share your full DT files as attachments? This will give us all the info needed to try re-creating the issue and identifying the root cause.
Meanwhile, please let us know if you have already tried implementing the steps suggested by Jeremie FRANCOIS to resolve a similar problem here – https://octavosystems.com/forums/topic/spi-nor-from-u-boot/#post-6713
FLeblanc OTI,
Yes, OSDZU3 DDR bus width is 32 bit.
There is a typo in the response you listed. As shown in the “Product Number Information” section of the OSDZU3 Datasheet (screenshot attached) and “VCCO_PSIO_500” section of the OSDZU3 datasheet (screenshot attached):
OSDZU3EG1-2G-xFA uses NOR QSPI with 3.3V IO. QSPI is connected to the XCZU3 through Bank 500 I/O and this requires Bank 500 to use 3.3V IO. eMMC interface is also on Bank 500. So, OSDZU3EG1-2G-xFA production parts support QSPI boot and does not support eMMC boot (eMMC boot is only supported with 1.8V IO).
OSDZU3EG1-2G-xFB uses NOR QSPI with 1.8V IO. This requires Bank 500 IO to be 1.8V as well. As a result, OSDZU3EG1-2G-xFB production parts support both QSPI and eMMC boot.
Note: If you intend to use an external QSPI in addition to the QSPI integrated within the OSDZU3 SiP, please make sure to match the part number and IO voltage.
Hello Craig Kleinrichert,
M4 supports 2 debug modes:
1. Via JTAG/SWD (ST-link) in Engineering Mode using STM32 Cube IDE
2. Via Linux Core in Production Mode using STM32 CubeIDE
We have not validated the IAR workbench flow.
The following tutorial videos from ST provide further clarity:
1. STM32MP1 Tips & Tricks – 04 How to debug M4 in production mode with STM32CubeIDE – https://www.youtube.com/watch?v=YIhzzgJmop0
2. STM32MP1 Tips & Tricks – 03 How to debug M4 in engineering mode with STM32CubeIDE – https://www.youtube.com/watch?v=HX9rO8IukeI
The important thing to keep in mind is that when you’re trying to debug in Production mode, it is mandatory to properly assign resources like clocks, interrupts and other interfaces (GPIO/I2C/SPI) to M4 in the Linux Device Tree. Otherwise, resources are assigned to A7 by default. A good example for this is demonstrated in STM32MP157C-DK2 platform’s boot process. During boot process, DK2 platform will ask the user to select one of the boot modes:
Select the boot mode
1 2 3 | 1: stm32mp157c-dk2-sdcard (uses "stm32mp157c-dk2.dts" device tree) 2: stm32mp157c-dk2-a7-examples-sdcard (uses "stm32mp157c-dk2-a7-examples.dts" device tree) 3: stm32mp157c-dk2-m4-examples-sdcard (uses "stm32mp157c-dk2-m4-examples.dts" device tree) |
Depending on the selection, the platform pulls a different device tree and boots up. Among the above options, option #1 is the Default option (does not support M4 debug) but option #3 allows you debug M4 in production mode. The device trees referenced above corresponding to each boot mode are available as part of OpenSTLinux Developer Package – https://wiki.st.com/stm32mpu-ecosystem-v3/wiki/STM32MP1_Developer_Package_-_Linux_kernel#Archives. I have also attached the device tree sources for all three boot modes to this thread for quick reference.
Observe the resource allocation differences between “stm32mp157c-dk2.dts” and “stm32mp157c-dk2-m4-examples.dts” as captured here – https://www.diffchecker.com/zRWjSmbQ/. Similar modifications may be needed to your custom device tree to assign resources for M4 and debug it in production mode.
Depending on your M4 use case, the above videos and device tree references should help you configure your device for M4 use and debug in production mode.
Hello Lianne,
BeagleBone Black-Wireless uses OSD335x SiP (not the OSD335x-SM) as described here – https://www.beagleboard.org/blog/2016-09-26-meet-beaglebone-black-wireless.
The processor integrated within OSD335x is AM335x – listed under “Supporting Feature List” of the above link.
For detailed information on MCSPI, please refer to section “Multichannel Serial Port Interface (McSPI).” of the AM335x Technical Reference Manual (TRM) here – https://www.ti.com/lit/ug/spruh73p/spruh73p.pdf. The TRM should be referred for info on any other functionality of AM335x as well.
The DMA + MCASP demos discussed in this thread should help you get started – https://e2e.ti.com/support/processors-group/processors/f/processors-forum/827625/ccs-am3358-dma-usage
Hello gil_he,
We do provide meta-layer for Kirkstone support – https://github.com/octavosystems/meta-octavo-osd32mp1/tree/kirkstone
The README has all the information required to build and use the layer.
Hello FLeblanc OTI,
Once you create a project using the OSDZU3 Petalinux 2023.1 BSP, you can find an if/else statement in “weston.env” file under “meta-osdzu3” layer at:
<your_bsp_project_dir>/project-spec/meta-osdzu3/recipes-graphics/wayland/weston-init/weston.env. The function helps choose between LVDS and DP outputs. For debugging, you could modify this function to your liking and see how things change. Screenshots attached.
However, the recommended approach for long term modifications to the behavior is to create your own custom meta-user layer, add the layer to the project and override the graphics settings of meta-osdzu3 from your layer. Your own custom user layer would help you modify several other settings of the project as well, all under one layer, without touching/modifying the official layers underneath.
Hello Carel,
Asserting nPONKEY and WAKEUP (PC13) do not work in your use case because your PMIC is in ALTERNATE (Low Power) mode and not in OFF state/NO_SUPPLY state since PWR_ON/PMIC_PWRCTRL pin is asserted by RTC.
As indicated by PMIC datasheet, the STPMIC1 offers 2 independent POWER_ON modes called MAIN and ALTERNATE.
Switching between these modes is driven by the application processor through PWRCTRL pin.
See highlighted sentences of the attached screenshots from the official documentation for more information. If you have access to PWR_ON/PMIC_PWRCTRL pin on your board, you can probe it to see how its state changes between “sleep” and “wake-up”.
Hello JohnDuq,
Are you using Linux OS or barebone code? Hope this helps (see response by “seva titov”) – https://stackoverflow.com/questions/25796901/increase-beaglebone-black-adc-sampling-rate#:~:text=Sampling%20rate%20of%20AM335x%20ADC%20is%20200K%20(link).
Hello gil_he,
External oscillators are generally more accurate and have less jitter compared to internal ones. If timing precision is not a concern, internal oscillator can be used keeping tolerances in mind.
If RTC is not required, LSE oscillator is not necessary. You can leave its pins floating as recommending here – https://octavosystems.com/app_notes/osd32mp15x-schematic-checklist/#Reset%20and%20Clock
Hello amcfarland,
Glad to know that you were able to resolve the issue. Moving forward, we recommend updating your device tree to accurately capture any new hardware or other hardware modifications. You can use this app note as a starting point for device tree updates – https://octavosystems.com/app_notes/osd335x-design-tutorial/osd335x-lesson-2-minimal-linux-boot/linux-device-tree/.
Octavo Systems LLC all rights reserved
OCTAVO is registered in the U.S. Patent and Trademark Office. OSD, C-SiP, and the Octavo Logo are trademarks of Octavo Systems LLC.
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields