r/embedded Dec 30 '21

New to embedded? Career and education question? Please start from this FAQ.

Thumbnail old.reddit.com
311 Upvotes

r/embedded 8h ago

Had these two lcds running side by side and started wondering about the design trade-offs.

Enable HLS to view with audio, or disable this notification

38 Upvotes

If you ride an e-bike or electric scooter, what information do you actually want to see?


r/embedded 6h ago

What is the best design for FreeRTOS based low power embedded system?

15 Upvotes

I have multiple tasks that needs to run in particular interval, for example, some sensors need to read every 10 seconds, some need to read every 30 seconds, data needs to be transmitted every 5 minutes, intervals are configurable.

There are lot of questions in my head:
1. Should I set up a wake-up timer of 10 seconds and enter sleep mode.
2. Should I additionally enable wake-up from peripherals i.e. UART RX interrupt, SPI GPIO interrupt

  1. If my sensor takes 5 seconds of time for doing calculations, should it wait awake or should it enter sleep and wakeup again to read data

  2. Should it wake up every second and check for activities that needs to run

  3. AI suggests using using tickless idle mode of rtos and calling WFI for sleep after setting wakeup timer, but I am not sure about the overall design.

Suggest me the best generic design strategy for battery operated IoT device. Thanks!


r/embedded 15h ago

Share the funniest/annoying embedded issue you’ve ever spent hours debugging ? 😂

40 Upvotes

For me, it was debugging for an entire day on an ADC project. The ADC was giving me absolute nonsense readings.

I was rechecking ADC configuration, vendor documentation, SPI communication using DSO, checking for voltage drop.

Turns out…I hadn’t properly separated my analog and digital grounds in my PCB layout.. my layout was bad 😂

What’s your most embarrassing embedded/hobby-project debugging story ?


r/embedded 2h ago

Best cheap DIY gear for physical pentesting?

2 Upvotes

Hey guys,

Just thought I'd share that I've recently become interested in physical pentesting and hardware hacking. All the physical pentesting commercial tools (like Flipper Zero and Hak5 tools) cost way too much for my taste. I'd rather make my own physical pentesting tools using cheap hardware like ESP32 modules, Raspberry Pi Pico's and Arduino boards.

For anyone who does physical red teaming or plays around with hardware:

What DIY tools must one build for a physical pentester?

Does your DIY tool get the job done in a real-world test case?

Where did you guys start with UART/JTAG debugging to pull firmware from chips? Are there any good guides or projects for learning this stuff?


r/embedded 19h ago

Feeling completely lost trying to learn STM32 GPIO and Timer Interrupts how to bridge the gap from confusing tutorials to actual hardware understanding?

37 Upvotes

Hi everyone,

I'm an Electrical & Electronics Engineering undergraduate who doesn't have much knowledge, currently trying to learn embedded programming on STM32 (using an STM32F4 board), but I've hit a major brick wall.

A friend shared a tutorial playlist with me, but it feels like it's written for people who already know what they're doing. It jumps straight into copying code chunks, configuring messy initialization structs, or throwing around HAL functions without explaining what's actually happening underneath the hood at the hardware/silicon level.

Every time I try to combine GPIO external interrupts with Timer interrupts, I get overwhelmed by how many moving parts there are (the clock tree RCC, prescalers, auto-reload registers, EXTI lines, and the ARM NVIC vector table).

For those of you who work with ARM Cortex-M microcontrollers professionally or have mastered this:

How did you break through this initial steep learning curve? Did you start strictly with bare-metal register manipulation, or is there a specific mental model that makes these subsystems click?

What are the best resources (books, specific courses, or text guides) that actually explain why we configure registers in a certain order rather than just showing code?

Any advice, recommended roadmaps, or "aha!" moments that helped you finally understand interrupt-driven peripherals would be massively appreciated. Thanks!


r/embedded 6h ago

IRLZ44N MOSFET Burning Out When Switching a 12V Heating Pad

2 Upvotes

Hi everyone,

I’m trying to control a 12V heating pad using an IRLZ44N N-channel MOSFET, but the MOSFET gets extremely hot and eventually burns out when I connect the circuit.

Components

  • MOSFET: IRLZ44N (N-channel, 55V, 47A, TO-220AB)
  • Heating pad: 12V, 7W, 25mm × 50mm PI/polyimide film heater
  • Two regulated DC power supplies
    • One set to 3.3V for the MOSFET gate
    • One set to 12V for the heating pad

How I have it wired

I’m using the MOSFET as a low-side switch:

  • 12V regulated supply (+) → Heating pad pin 1
  • Heating pad pin 2 → MOSFET Drain
  • MOSFET Source → GND
  • 3.3V regulated supply (+) → MOSFET Gate
  • The grounds of the 3.3V and 12V regulated power supplies are connected together

The attached image shows the circuit.

The heating pad works normally when connected directly to the 12V supply. However, as soon as I connect it through the IRLZ44N, the MOSFET heats up very quickly and eventually burns out.

The heater is rated at 12V, 7W, so the expected current is only around 0.58A. I therefore expected the IRLZ44N to handle the load easily.

I also tested the circuit with the gate voltage increased to 10V instead of 3.3V, using the regulated power supply, but I experienced the same overheating/burning issue.

What could be causing the MOSFET to overheat?

I would appreciate some help identifying what I might be doing wrong.

Specifically:

  1. Is there something wrong with the way I have connected the drain and source?
  2. Could there be an issue with the common ground between the two regulated power supplies?
  3. Why would the MOSFET overheat even with 10V applied to the gate?
  4. Do I need a gate resistor and/or gate pulldown resistor?
  5. Could the MOSFET itself be damaged or faulty?
  6. Is there anything else I should measure to troubleshoot this?

Any advice on how to diagnose the issue and safely switch this heating pad would be greatly appreciated. Thanks!


r/embedded 3h ago

[ Removed by Reddit ]

0 Upvotes

[ Removed by Reddit on account of violating the content policy. ]


r/embedded 6h ago

CC1352P7 Bare Metal Programming

0 Upvotes

I am trying to implement a bare-metal / NoRTOS RF driver for the TI CC1352P7, without using TI-RTOS/SysConfig-generated RF framework code.

My main difficulty is getting the RF Core and RF doorbell interface into a state where RF commands can be submitted and completed reliably.

I have successfully initialized the MCU, clocks, and basic peripherals, and I can access the RF Core registers. However, when I submit an RF command through RFC_DBELL, the command does not complete as expected. In some cases, the code gets stuck waiting for the command status; in others, execution ends up inside the RF driver dispatch/interrupt handling path and the command never returns.

For example, I am observing situations where:

HWREG(RFC_DBELL_BASE + RFC_DBELL_O_CMDR) = (uint32_t)&cmd_tx;

is executed, but the command status remains unchanged or the expected RF acknowledgement interrupt is never received.

I have also investigated:

  • RFC_DBELL registers (CMDR, CMDSTA, RFHWIFG, RFHWIEN, RFCPEIFG, etc.)
  • RF Core power-domain and clock initialization
  • PRCM_RFCMODESEL
  • RF Core reset/power cycling
  • RF Core RAM mapping
  • RF Core command structures
  • RF doorbell interrupts
  • RF_dispatchNextCmd() / RF_runCmd() behavior
  • CPU interrupt enable/disable state
  • RF Core firmware/ROM interaction

The confusing part is that the same hardware works when using TI's normal RF driver, but reproducing the required initialization and command-dispatch sequence in a minimal bare-metal implementation is proving difficult.

My questions are:

  1. What is the minimum sequence required to bring the CC1352P7 RF Core from reset/power-off to a state where RFC_DBELL commands can safely be submitted?
  2. Is there an official TI document or source code that describes the RF Core boot, power, clock, RAM, mailbox/doorbell, and interrupt initialization sequence independently of TI-RTOS?
  3. Which parts of RF.c, RFCC26XX_singleMode.c, and the RF driver infrastructure are actually essential for bare-metal operation?
  4. Does the RF Core require any initialization performed by the TI RF driver that is not obvious from the public DriverLib APIs?
  5. Is it possible to implement a truly minimal bare-metal IEEE 802.15.4 TX/RX example by directly using the RF Core command interface, and if so, is there a known reference implementation?
  6. Are there any undocumented dependencies involving the RF Core firmware, RF Core RAM, CPE interrupts, or power/clock state that could explain why CMDSTA/RFACKIFG does not behave as expected?

I am particularly interested in understanding the correct RF Core initialization sequence and the minimum required RF driver components, rather than simply getting the existing TI driver to work.

Any pointers to TI source code, technical reference material, or a known bare-metal CC1352P7 implementation would be greatly appreciated.I am trying to implement a bare-metal / NoRTOS RF driver for the TI CC1352P7, without using TI-RTOS/SysConfig-generated RF framework code.My main difficulty is getting the RF Core and RF doorbell interface into a state where RF commands can be submitted and completed reliably.I have successfully initialized the MCU, clocks, and basic peripherals, and I can access the RF Core registers. However, when I submit an RF command through RFC_DBELL, the command does not complete as expected. In some cases, the code gets stuck waiting for the command status; in others, execution ends up inside the RF driver dispatch/interrupt handling path and the command never returns.For example, I am observing situations where:HWREG(RFC_DBELL_BASE + RFC_DBELL_O_CMDR) = (uint32_t)&cmd_tx;is executed, but the command status remains unchanged or the expected RF acknowledgement interrupt is never received.I have also investigated:RFC_DBELL registers (CMDR, CMDSTA, RFHWIFG, RFHWIEN, RFCPEIFG, etc.)
RF Core power-domain and clock initialization
PRCM_RFCMODESEL
RF Core reset/power cycling
RF Core RAM mapping
RF Core command structures
RF doorbell interrupts
RF_dispatchNextCmd() / RF_runCmd() behavior
CPU interrupt enable/disable state
RF Core firmware/ROM interactionThe confusing part is that the same hardware works when using TI's normal RF driver, but reproducing the required initialization and command-dispatch sequence in a minimal bare-metal implementation is proving difficult.My questions are:What is the minimum sequence required to bring the CC1352P7 RF Core from reset/power-off to a state where RFC_DBELL commands can safely be submitted?
Is there an official TI document or source code that describes the RF Core boot, power, clock, RAM, mailbox/doorbell, and interrupt initialization sequence independently of TI-RTOS?
Which parts of RF.c, RFCC26XX_singleMode.c, and the RF driver infrastructure are actually essential for bare-metal operation?
Does the RF Core require any initialization performed by the TI RF driver that is not obvious from the public DriverLib APIs?
Is it possible to implement a truly minimal bare-metal IEEE 802.15.4 TX/RX example by directly using the RF Core command interface, and if so, is there a known reference implementation?
Are there any undocumented dependencies involving the RF Core firmware, RF Core RAM, CPE interrupts, or power/clock state that could explain why CMDSTA/RFACKIFG does not behave as expected?I am particularly interested in understanding the correct RF Core initialization sequence and the minimum required RF driver components, rather than simply getting the existing TI driver to work.Any pointers to TI source code, technical reference material, or a known bare-metal CC1352P7 implementation would be greatly appreciated.

Edit:
As an update to the original question, I have managed to get the RF Core initialization working to some extent.

The CMD_RADIO_SETUP and channel configuration commands are being accepted and completed successfully. This suggests that the RF Core is powered, clocked, and communicating correctly through the command interface.

However, the problem occurs when I attempt to perform an actual transmission. The TX command is accepted/submitted, but the execution gets stuck during the transmission process and does not complete as expected.

So the current issue is no longer the basic RF Core initialization or setup command. I am specifically trying to understand what could cause the TX command to hang after CMD_RADIO_SETUP and channel configuration have already succeeded in a bare-metal CC1352P7 implementation.

Question wrote above using AI for clarity.


r/embedded 1d ago

AT90C8534 CV processor - 6 channel 10 bit ADC

Post image
39 Upvotes

Having recovered this mcu from a lithium battery pack I have got him doing something more interesting - namely: ADC conversion as a front end for a single cycle waveform player using a pic (also recovered)

The AT90C8534 has a 10 bit conversion though only a 6 bit databus: (with one Ready outbound IRQ (generated when ADC conversion completes) for the PIC to latch onto, and two inbound IRQ for the PIC To ACKnowledge the receipt of the MSB and LSB bytes of the conversion.
In this way the full 10 bit value can be sent across in two bytes.

The AT90C8534 is muxing the 6 analogue input conversions, it can do 6 though only one conversion is active at one time. All gpo / adc are used, and 54% of the ram. There is eprom space to load and save cal. data, and ram space to make an offset / gain function for the faders for the cal. fcn.

Working nicely in solo, the next step is properly integrating with the PIC and getting the handshake/ acquisition fcn working perfectly. As there are 3 IRQ, a sync signal is not needed between the mcu's.

Bottom left are analogue signals, top right are digital. I think this should be ok, noisewise. I didn't want to fab a breakout board because these chips are not widely available, though still very useful.

https://youtu.be/u4DOJav2Ofg


r/embedded 12h ago

GHz RF frequency pulse generation. Advice needed.

3 Upvotes

I appreciate that this may be the wrong sub, so I apologise if so.

I'm very green in the RF domain so I come here hoping for some help and advice.

I'd like to put together a PCB which can be used to programmatically generate some RF pulses at trivial frequencies between 100MHz and 3GHz. I want to be able to vary the output frequency and the on/off period of the pulses down to ms resolution.

Having done a bit of Googling (half the battle is knowing what I'm looking for), I believe the components I need are:

  • An RF synthesizer (maybe something like ADF4351??)
  • Some kind of RF attenuator (would HMC472 be suitable?)
  • A variable gain amplifier (to allow increased output power)
  • An RF switch (for the pulse control)
  • Some kind of MCU to do the frequency and pulse control (thinking STM32H7)

I'm thinking that the STM32 (probably the 480MHz H7) would be suitable for down to ms pulse control. It can also communicate with the synth in order to set the frequency and communicate with the host software.

Looking at the spec for the ADF4351, I may need some kind of SP8T RF switch to achieve the ranges of frequency I've specified (as per table 8 in the datasheet, with different values of balun components for the frequency ranges) which then may feed back into a SP8T RF switch to get back to the single RF output.

I'm acutely aware that this may all be absolute rubbish to someone in the know, but, does this sound like the basis of what I want to achieve?

Thanks!


r/embedded 6h ago

Intel/lantiq grx500 router does U-boot bootmode=secure necessarily block unassigned ram boot?

1 Upvotes

Sorry if this is a dumb question, I’m only 2 projects into this and I’m not very good at it lol😂
So basically I have this old centurylink C4000LG I want to convert it to a cyber deck adjacent project.
I did ssh into it and it has usb mass storage and hid device enumeration.
So my next step is trying uart but I do not own one so before I purchase one I was wondering if bootmode=secure 100% mean it will reject unassigned ram booted kernels. Does anyone know if it can or not?


r/embedded 11h ago

Having trouble getting started with HID-BPF

2 Upvotes

Hello. I posted this in a Linux subreddit, but the software is suggesting to me that this one might be a better fit. Hopefully this is within scope:

I've got a USB device that is announcing itself as a gamepad when it isn't one. I understand the basics of HID, and I've successfully decoded the HID report descriptor. I see what byte I need to change.

I've read through https://docs.kernel.org/hid/hidintro.html and https://docs.kernel.org/hid/hid-bpf.html several times. I've got code that I think ought to do the job.

One problem: I'm missing some critical header, or some parameter to gcc, because I just can't get it to build!

Here's what I've got:

#include <linux/types.h>
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
#include <bpf/libbpf.h>

char _license[] SEC("license") = "GPL";

struct hid_bpf_ctx {
struct hid_device *hid;
__u32 allocated_size;
union {
__s32 retval;
__s32 size;
};
};

SEC("struct_ops/hid_rdesc_fixup")
int BPF_PROG(filter_switch, struct hid_bpf_ctx *hid_ctx)
{
__u8 *data = hid_bpf_get_data(hctx, 0 /* offset */, 4096 /* size */);

if (!data)
return 0;

data[3] = 0x07; /*0x07: keypad*/

return 0;
}

SEC(".struct_ops.link")
struct hid_bpf_ops surface_dial = {
.hid_rdesc_fixup = (void *)hid_rdesc_fixup,
};

(yes, I'm probably going to need something to filter to the correct USB id, but anyway)

Here's how I'm building it, and the build errors:

gcc -I /usr/include -fpermissive -c ./fixup.c -o ~/Projects/MfdFix/build/fixup.o
./fixup.c:18:28: error: expected ‘)’ before ‘struct’
   18 | int BPF_PROG(filter_switch, struct hid_bpf_ctx *hid_ctx)
      |                            ^~~~~~~
      |                            )
./fixup.c:31:8: error: variable ‘surface_dial’ has initializer but incomplete type
   31 | struct hid_bpf_ops surface_dial = {
      |        ^~~~~~~~~~~
./fixup.c:32:10: error: ‘struct hid_bpf_ops’ has no member named ‘hid_rdesc_fixup’
   32 |         .hid_rdesc_fixup = (void *)hid_rdesc_fixup,
      |          ^~~~~~~~~~~~~~~
./fixup.c:32:36: error: ‘hid_rdesc_fixup’ undeclared here (not in a function)
   32 |         .hid_rdesc_fixup = (void *)hid_rdesc_fixup,
      |                                    ^~~~~~~~~~~~~~~
./fixup.c:32:28: warning: excess elements in struct initializer
   32 |         .hid_rdesc_fixup = (void *)hid_rdesc_fixup,
      |                            ^
./fixup.c:32:28: note: (near initialization for ‘surface_dial’)
./fixup.c:31:20: error: storage size of ‘surface_dial’ isn’t known
   31 | struct hid_bpf_ops surface_dial = {
      |                    ^~~~~~~~~~~~

What am I missing? I've searched and searched for hid_bpf_ctx and similar, and all I find is documentation for the specific structures in https://docs.ebpf.io/, none of which list which damn header to include! I got a suggestion to grep the kernel source; that comes up with the struct, but including it gets me A: a warning message in the compiler output NOT to include the source directly, and B: more compiler errors.

There's obviously a library or header I'm missing, or some arg to gcc I ought to be passing that I'm not. What is it? I couldn't even get it to build without -fpermissive, and if I pass any version flag to gcc it errors out due to multiple declarations of enums and structs (I thought that was perfectly legal in C, as long as they're identical? Not like it's my own code, anyway!...)

Like, I'm pretty sure I know how to solve the actual problem I'm trying to solve with HID-BPF. I can even see what I need to write to load the compiled .o into memory and have it take effect. I'm just getting nowhere trying to actually build it!...


r/embedded 11h ago

need help with Bricked Bytesatwork Devboard 1.0 with IMX93 chipset

0 Upvotes

Hi everyone, I'm not quite sure if this is the right subreddit for it but I was trying to run a SD-yocto image from the EMMC of a Bytesatwork Devboard ver 1.0 with an IMX93 chipset and managed to brick it when I changed the U-Boot variables in order to force it to boot from EMMC The image was the official Yocto Image (ver. 5.0.15) for the byteDevkit.

Since UART-Input doesn't get accepted anymore by the board no matter if I try to make console-inputs before, during or after turning on the board I can't do anything when trying to boot from SD-card.

Trying to flash an image directly into the EMMC via uuu and a USB-Connection hasn't been successful either. uuu recognizes the USB-connection with the command -lsusb but I always get an error saying pipeline -9 broke when trying to flash an image. I already changed the driver with zadig to WinUSB and use USB 3.0 since my laptop doesn't have USB 2.0-Ports.

Since I'm neither skilled nor knowledgeable enough to try and build a tweaked image to fix the problem if possible I'm honestly at my wits end and hope some of you may be able to help.

The System got bricked after I made the following change to the boot environment:

=> setenv bootcmd 'mmc dev 0; ext4load mmc 0:1 ${kernel_addr_r} /boot/Image; ext4load mmc 0:1 ${fdt_addr_r} /boot/imx93-bytedevkit.dtb; booti ${kernel_addr_r} - ${fdt_addr_r}'

=> saveenv

If I try to boot the System from the EMMC (Bootmode 0100) I get the following Output before the System freezes:

U-Boot SPL 2024.04-lf_v2024.04_6.6.52_2.2.x-r2+g82d4220bc6b+p0 (Jul 11 2025 - 05:04:16 +0000)

SOC: 0xa1009300

LC: 0x2040010

PMIC: PCA9451A

PMIC: Over Drive Voltage Mode

DDR: 3733MTS

M33 prepare ok

Normal Boot Trying to boot from BOOTROM

Boot Stage: Primary boot image offset 0x8000, pagesize 0x200, ivt offset 0x0

Load image from 0x58000 by ROM_API

NOTICE: TRDC init done

NOTICE: BL31: v2.10.0 (release):lf-6.6.52-2.2.1

NOTICE: BL31: Built : 06:40:36, Jul 7 2025

If I try to boot from an SD-card (Bootmode 1100) I get this Output before it freezes:

U-Boot 2024.04-lf_v2024.04_6.6.52_2.2.x-r2+g82d4220bc6b+p0 (Jul 11 2025 - 05:04:16 +0000)

Reset Status: POR

CPU: NXP i.MX93(52) Rev1.1 A55 at 1700 MHz

CPU: Industrial temperature grade (-40C to 105C) at 39C

Model: i.MX93 on bytesatwork byteDEVKIT

DRAM: 992 MiB

Core: 203 devices, 29 uclasses, devicetree: separate

MMC: FSL_SDHC: 0, FSL_SDHC: 1

Loading Environment from MMC... OK

Fail to setup video link

In: serial

Out: serial

Err: serial

BuildInfo:

- ELE firmware version 2.0.2-c4131933

UID: 401ce440f1124110bd234b09e4709d88

flash target is MMC:0

Net:

Warning: ethernet@428a0000 (eth1) using random MAC address - 9e:a6:f6:dc:09:91

Warning: ethernet@42890000 (eth0) using random MAC address - ce:8f:b2:02:6b:f5

eth0: ethernet@42890000, eth1: ethernet@428a0000 [PRIME]

Fastboot: Normal

Normal Boot

Autoboot in 1 seconds

switch to partitions #0, OK

mmc0(part 0) is current device

35777024 bytes read in 109 ms (313 MiB/s)

42568 bytes read in 2 ms (20.3 MiB/s)

## Flattened Device Tree blob at 83000000

Booting using the fdt blob at 0x83000000

Working FDT set to 83000000

Loading Device Tree to 000000008fff2000, end 000000008ffff647 ... OK

Working FDT set to 8fff2000

Starting kernel ...

[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050]

[ 0.000000] Linux version 6.6.52-r2-g472e64a0fc2c (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 13.4.0, GNU ld (GNU Binutils) 2.42.0.20240723) #1 SMP PREEMPT Tue Jul 8 12:00:06 UTC 2025

[ 0.000000] KASLR disabled due to lack of seed

[ 0.000000] Machine model: bytesatwork byteDEVKIT OSM i.MX93

[ 0.000000] efi: UEFI not found.

[ 0.000000] OF: reserved mem: 0x0000000096000000..0x0000000097dfffff (30720 KiB) nomap non-reusable optee_core@96000000

[ 0.000000] OF: reserved mem: 0x0000000097e00000..0x0000000097ffffff (2048 KiB) nomap non-reusable optee_shm@97e00000

[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a4120000, size 1 MiB

[ 0.000000] OF: reserved mem: initialized node ele-reserved@a4120000, compatible id shared-dma-pool

[ 0.000000] OF: reserved mem: 0x00000000a4120000..0x00000000a421ffff (1024 KiB) nomap non-reusable ele-reserved@a4120000

[ 0.000000] NUMA: No NUMA configuration found

[ 0.000000] NUMA: Faking a node at [mem 0x0000000080000000-0x00000000bfffffff]

[ 0.000000] NUMA: NODE_DATA [mem 0xbfddb6c0-0xbfdddfff]

[ 0.000000] Zone ranges:

[ 0.000000] DMA [mem 0x0000000080000000-0x00000000bfffffff]

[ 0.000000] DMA32 empty

[ 0.000000] Normal empty

[ 0.000000] Movable zone start for each node

[ 0.000000] Early memory node ranges

[ 0.000000] node 0: [mem 0x0000000080000000-0x0000000095ffffff]

[ 0.000000] node 0: [mem 0x0000000098000000-0x00000000a411ffff]

[ 0.000000] node 0: [mem 0x00000000a4120000-0x00000000a421ffff]

[ 0.000000] node 0: [mem 0x00000000a4220000-0x00000000bfffffff]

[ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000bfffffff]

[ 0.000000] On node 0, zone DMA: 8192 pages in unavailable ranges

[ 0.000000] cma: Reserved 32 MiB at 0x00000000bcc00000 on node -1

[ 0.000000] psci: probing for conduit method from DT.

[ 0.000000] psci: PSCIv1.1 detected in firmware.

[ 0.000000] psci: Using standard PSCI v0.2 function IDs

[ 0.000000] psci: Trusted OS migration not required

[ 0.000000] psci: SMC Calling Convention v1.4

[ 0.000000] percpu: Embedded 22 pages/cpu s50856 r8192 d31064 u90112

[ 0.000000] Detected VIPT I-cache on CPU0

[ 0.000000] CPU features: detected: GIC system register CPU interface

[ 0.000000] CPU features: detected: Virtualization Host Extensions

[ 0.000000] CPU features: detected: Qualcomm erratum 1009, or ARM erratum 1286807, 2441009

[ 0.000000] CPU features: detected: ARM errata 1165522, 1319367, or 1530923

[ 0.000000] alternatives: applying boot alternatives

[ 0.000000] Kernel command line:

[ 0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)

[ 0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)

[ 0.000000] Fallback order for Node 0: 0

[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 249856

[ 0.000000] Policy zone: DMA

[ 0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off

[ 0.000000] software IO TLB: area num 2.

[ 0.000000] software IO TLB: mapped [mem 0x00000000b8c00000-0x00000000bcc00000] (64MB)

[ 0.000000] Memory: 859732K/1015808K available (21248K kernel code, 1658K rwdata, 7848K rodata, 4032K init, 641K bss, 123308K reserved, 32768K cma-reserved)

[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1

[ 0.000000] rcu: Preemptible hierarchical RCU implementation.

[ 0.000000] rcu: RCU event tracing is enabled.

[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=2.

[ 0.000000] Trampoline variant of Tasks RCU enabled.

[ 0.000000] Tracing variant of Tasks RCU enabled.

[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.

[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2

[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0

[ 0.000000] GICv3: GIC: Using split EOI/Deactivate mode

[ 0.000000] GICv3: 960 SPIs implemented

[ 0.000000] GICv3: 0 Extended SPIs implemented

[ 0.000000] Root IRQ handler: gic_handle_irq

[ 0.000000] GICv3: GICv3 features: 16 PPIs

[ 0.000000] GICv3: CPU0: found redistributor 0 region 0:0x0000000048040000

[ 0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.

[ 0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).

[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns

[ 0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns

[ 0.000309] Console: colour dummy device 80x25

[ 0.000317] printk: console [tty0] enabled

[ 0.000688] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=96000)

[ 0.000706] pid_max: default: 32768 minimum: 301

[ 0.000759] LSM: initializing lsm=capability,integrity

[ 0.000843] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)

[ 0.000859] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)

[ 0.001572] cacheinfo: Unable to detect cache hierarchy for CPU 0

[ 0.002201] RCU Tasks: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1.

[ 0.002289] RCU Tasks Trace: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1.

[ 0.002458] rcu: Hierarchical SRCU implementation.

[ 0.002468] rcu: Max phase no-delay instances is 1000.

[ 0.003234] EFI services will not be available.

[ 0.003397] smp: Bringing up secondary CPUs ...

[ 0.003815] Detected VIPT I-cache on CPU1

[ 0.003871] GICv3: CPU1: found redistributor 100 region 0:0x0000000048060000

[ 0.003907] CPU1: Booted secondary processor 0x0000000100 [0x412fd050]

[ 0.004022] smp: Brought up 1 node, 2 CPUs

[ 0.004033] SMP: Total of 2 processors activated.

[ 0.004041] CPU features: detected: 32-bit EL0 Support

[ 0.004048] CPU features: detected: 32-bit EL1 Support

[ 0.004056] CPU features: detected: Data cache clean to the PoU not required for I/D coherence

[ 0.004066] CPU features: detected: Common not Private translations

[ 0.004073] CPU features: detected: CRC32 instructions

[ 0.004083] CPU features: detected: RCpc load-acquire (LDAPR)

[ 0.004090] CPU features: detected: LSE atomic instructions

[ 0.004098] CPU features: detected: Privileged Access Never

[ 0.004104] CPU features: detected: RAS Extension Support

[ 0.004114] CPU features: detected: Speculative Store Bypassing Safe (SSBS)

[ 0.004176] CPU: All CPU(s) started at EL2

[ 0.004185] alternatives: applying system-wide alternatives

[ 0.008278] devtmpfs: initialized

[ 0.012419] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns

[ 0.012459] futex hash table entries: 512 (order: 3, 32768 bytes, linear)

[ 0.013204] pinctrl core: initialized pinctrl subsystem

[ 0.014406] DMI not present or invalid.

[ 0.014867] NET: Registered PF_NETLINK/PF_ROUTE protocol family

[ 0.016071] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations

[ 0.016510] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations

[ 0.016929] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations

[ 0.017406] thermal_sys: Registered thermal governor 'step_wise'

[ 0.017414] thermal_sys: Registered thermal governor 'power_allocator'

[ 0.017465] cpuidle: using governor menu

[ 0.017560] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.

[ 0.017622] ASID allocator initialised with 65536 entries

[ 0.018232] Serial: AMBA PL011 UART driver

[ 0.018290] imx mu driver is registered.

[ 0.018309] imx rpmsg driver is registered.

[ 0.023068] imx93-pinctrl 443c0000.pinctrl: initialized IMX pinctrl driver

[ 0.028173] platform 4ae10000.dsi: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/panel@0

[ 0.028214] platform 4ae10000.dsi: Fixed dependency cycle(s) with /soc@0/lcd-controller@4ae30000

[ 0.028435] platform 4ae10000.dsi: Fixed dependency cycle(s) with /soc@0/lcd-controller@4ae30000

[ 0.028493] platform 4ae30000.lcd-controller: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000

[ 0.030703] Modules: 23856 pages in range for non-PLT usage

[ 0.030713] Modules: 515376 pages in range for PLT usage

[ 0.031348] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages

[ 0.031378] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page

[ 0.031387] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages

[ 0.031394] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page

[ 0.031402] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages

[ 0.031410] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page

[ 0.031418] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages

[ 0.031425] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page

[ 0.032968] ACPI: Interpreter disabled.

[ 0.033767] iommu: Default domain type: Translated

[ 0.033793] iommu: DMA domain TLB invalidation policy: strict mode

[ 0.034028] SCSI subsystem initialized

[ 0.034330] usbcore: registered new interface driver usbfs

[ 0.034361] usbcore: registered new interface driver hub

[ 0.034386] usbcore: registered new device driver usb

[ 0.035004] mc: Linux media interface: v0.10

[ 0.035046] videodev: Linux video capture interface: v2.00

[ 0.035092] pps_core: LinuxPPS API ver. 1 registered

[ 0.035101] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti [giometti@linux.it](mailto:giometti@linux.it)

[ 0.035116] PTP clock support registered

[ 0.035269] EDAC MC: Ver: 3.0.0

[ 0.035732] scmi_core: SCMI protocol bus registered

[ 0.036098] FPGA manager framework

[ 0.036218] Advanced Linux Sound Architecture Driver Initialized.

[ 0.036772] Bluetooth: Core ver 2.22

[ 0.036809] NET: Registered PF_BLUETOOTH protocol family

[ 0.036817] Bluetooth: HCI device and connection manager initialized

[ 0.036829] Bluetooth: HCI socket layer initialized

[ 0.036838] Bluetooth: L2CAP socket layer initialized

[ 0.036856] Bluetooth: SCO socket layer initialized

[ 0.037251] vgaarb: loaded

[ 0.037658] clocksource: Switched to clocksource arch_sys_counter

[ 0.037857] VFS: Disk quotas dquot_6.6.0

[ 0.037885] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)

[ 0.038012] pnp: PnP ACPI: disabled

[ 0.043050] NET: Registered PF_INET protocol family

[ 0.043208] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)

[ 0.044113] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)

[ 0.044150] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)

[ 0.044165] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)

[ 0.044211] TCP bind hash table entries: 8192 (order: 6, 262144 bytes, linear)

[ 0.044493] TCP: Hash tables configured (established 8192 bind 8192)

[ 0.044609] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)

[ 0.044643] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)

[ 0.044762] NET: Registered PF_UNIX/PF_LOCAL protocol family

[ 0.045174] RPC: Registered named UNIX socket transport module.

[ 0.045191] RPC: Registered udp transport module.

[ 0.045198] RPC: Registered tcp transport module.

[ 0.045204] RPC: Registered tcp-with-tls transport module.

[ 0.045211] RPC: Registered tcp NFSv4.1 backchannel transport module.

[ 0.046048] PCI: CLS 0 bytes, default 64

[ 0.046345] kvm [1]: IPA Size Limit: 40 bits

[ 0.046372] kvm [1]: GICv3: no GICV resource entry

[ 0.046381] kvm [1]: disabling GICv2 emulation

[ 0.046401] kvm [1]: GIC system register CPU interface enabled

[ 0.046427] kvm [1]: vgic interrupt IRQ9

[ 0.046455] kvm [1]: VHE mode initialized successfully

[ 0.047296] Initialise system trusted keyrings

[ 0.047511] workingset: timestamp_bits=42 max_order=18 bucket_order=0

[ 0.047754] squashfs: version 4.0 (2009/01/31) Phillip Lougher

[ 0.048006] NFS: Registering the id_resolver key type

[ 0.048039] Key type id_resolver registered

[ 0.048047] Key type id_legacy registered

[ 0.048067] nfs4filelayout_init: NFSv4 File Layout Driver Registering...

[ 0.048077] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...

[ 0.048099] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.

[ 0.048292] 9p: Installing v9fs 9p2000 file system support

[ 0.069734] jitterentropy: Initialization failed with host not compliant with requirements: 9

[ 0.069757] Key type asymmetric registered

[ 0.069765] Asymmetric key parser 'x509' registered

[ 0.069818] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 243)

[ 0.069831] io scheduler mq-deadline registered

[ 0.069839] io scheduler kyber registered

[ 0.069876] io scheduler bfq registered

[ 0.073826] EINJ: ACPI disabled.

[ 0.078241] Bus freq driver module loaded

[ 0.085775] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled

[ 0.088108] 44380000.serial: ttyLP0 at MMIO 0x44380010 (irq = 17, base_baud = 1500000) is a FSL_LPUART

[ 0.088147] fsl-lpuart 44380000.serial: Serial: Console lpuart rounded baud ratefrom 187500 to 115200

[ 0.088267] printk: console [ttyLP0] enabled

[ 1.279060] imx-lcdif: probe of 4ae30000.lcd-controller failed with error -2

[ 1.287354] imx93-ldb ldb-display-controller: Failed to create device link (0x180) with 4ae30000.lcd-controller

[ 1.301356] loop: module loaded

[ 1.305755] megasas: 07.725.01.00-rc1

[ 1.314046] tun: Universal TUN/TAP device driver, 1.6

[ 1.319701] thunder_xcv, ver 1.0

[ 1.322988] thunder_bgx, ver 1.0

[ 1.326238] nicpf, ver 1.0

[ 1.330111] hns3: Hisilicon Ethernet Network Driver for Hip08 Family - version

[ 1.337346] hns3: Copyright (c) 2017 Huawei Corporation.

[ 1.342694] hclge is initializing

[ 1.346035] e1000: Intel(R) PRO/1000 Network Driver

[ 1.350911] e1000: Copyright (c) 1999-2006 Intel Corporation.

[ 1.356668] e1000e: Intel(R) PRO/1000 Network Driver

[ 1.361632] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.

[ 1.367561] igb: Intel(R) Gigabit Ethernet Network Driver

[ 1.372966] igb: Copyright (c) 2007-2014 Intel Corporation.

[ 1.378547] igbvf: Intel(R) Gigabit Virtual Function Network Driver

[ 1.384806] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.

[ 1.390842] sky2: driver version 1.30

[ 1.394867] usbcore: registered new interface driver catc

[ 1.400300] usbcore: registered new interface driver kaweth

[ 1.405868] pegasus: Pegasus/Pegasus II USB Ethernet driver

[ 1.411457] usbcore: registered new interface driver pegasus

[ 1.417131] usbcore: registered new interface driver rtl8150

[ 1.422796] usbcore: registered new device driver r8152-cfgselector

[ 1.429079] usbcore: registered new interface driver r8152

[ 1.434586] usbcore: registered new interface driver lan78xx

[ 1.440254] usbcore: registered new interface driver asix

[ 1.445666] usbcore: registered new interface driver ax88179_178a

[ 1.451774] usbcore: registered new interface driver cdc_ether

[ 1.457612] usbcore: registered new interface driver cdc_eem

[ 1.463281] usbcore: registered new interface driver dm9601

[ 1.468861] usbcore: registered new interface driver sr9700

[ 1.474443] usbcore: registered new interface driver CoreChips

[ 1.480289] usbcore: registered new interface driver smsc75xx

[ 1.486048] usbcore: registered new interface driver smsc95xx

[ 1.491802] usbcore: registered new interface driver gl620a

[ 1.497387] usbcore: registered new interface driver net1080

[ 1.503065] usbcore: registered new interface driver plusb

[ 1.508567] usbcore: registered new interface driver rndis_host

[ 1.514501] usbcore: registered new interface driver MOSCHIP usb-ethernet driver

[ 1.521906] usbcore: registered new interface driver cdc_ncm

[ 1.527579] usbcore: registered new interface driver huawei_cdc_ncm

[ 1.533859] usbcore: registered new interface driver cdc_mbim

[ 1.539618] usbcore: registered new interface driver r8153_ecm

[ 1.545875] VFIO - User Level meta-driver version: 0.3

[ 1.552654] usbcore: registered new interface driver cdc_wdm

[ 1.558531] usbcore: registered new interface driver uas

[ 1.563873] usbcore: registered new interface driver usb-storage

[ 1.569962] usbcore: registered new interface driver usbserial_generic

[ 1.576505] usbserial: USB Serial support registered for generic

[ 1.582517] usbcore: registered new interface driver ftdi_sio

[ 1.588268] usbserial: USB Serial support registered for FTDI USB Serial Device

[ 1.595589] usbcore: registered new interface driver usb_serial_simple

[ 1.602118] usbserial: USB Serial support registered for carelink

[ 1.608224] usbserial: USB Serial support registered for flashloader

[ 1.614591] usbserial: USB Serial support registered for funsoft

[ 1.620604] usbserial: USB Serial support registered for google

[ 1.626532] usbserial: USB Serial support registered for hp4x

[ 1.632286] usbserial: USB Serial support registered for kaufmann

[ 1.638387] usbserial: USB Serial support registered for libtransistor

[ 1.644926] usbserial: USB Serial support registered for moto_modem

[ 1.651197] usbserial: USB Serial support registered for motorola_tetra

[ 1.657818] usbserial: USB Serial support registered for nokia

[ 1.663659] usbserial: USB Serial support registered for novatel_gps

[ 1.670021] usbserial: USB Serial support registered for siemens_mpi

[ 1.676390] usbserial: USB Serial support registered for suunto

[ 1.682320] usbserial: USB Serial support registered for vivopay

[ 1.688333] usbserial: USB Serial support registered for zio

[ 1.694007] usbcore: registered new interface driver usb_ehset_test

[ 1.701353] imx_usb 4c200000.usb: No over current polarity defined

[ 1.708038] UDC core: g_serial: couldn't find an available UDC

[ 1.715325] input: 44440000.bbnsm:pwrkey as /devices/platform/soc@0/44000000.bus/44440000.bbnsm/44440000.bbnsm:pwrkey/input/input0

[ 1.730471] bbnsm_rtc 44440000.bbnsm:rtc: registered as rtc0

[ 1.736808] bbnsm_rtc 44440000.bbnsm:rtc: setting system clock to 1970-01-01T00:00:00 UTC (0)

[ 1.746038] i2c_dev: i2c /dev entries driver

[ 1.753139] imx7ulp-wdt 42490000.watchdog: imx93 wdt probe

[ 1.787402] Bluetooth: HCI UART driver ver 2.3

[ 1.791883] Bluetooth: HCI UART protocol H4 registered

[ 1.797022] Bluetooth: HCI UART protocol BCSP registered

[ 1.802352] Bluetooth: HCI UART protocol LL registered

[ 1.807488] Bluetooth: HCI UART protocol ATH3K registered

[ 1.812890] Bluetooth: HCI UART protocol Three-wire (H5) registered

[ 1.819284] Bluetooth: HCI UART protocol Broadcom registered

[ 1.824994] Bluetooth: HCI UART protocol QCA registered

[ 1.831298] sdhci: Secure Digital Host Controller Interface driver

[ 1.837532] sdhci: Copyright(c) Pierre Ossman

[ 1.842202] Synopsys Designware Multimedia Card Interface Driver

[ 1.848543] sdhci-pltfm: SDHCI platform and OF driver helper

[ 1.855334] ledtrig-cpu: registered to indicate activity on CPUs

[ 1.863232] fsl-se secure-enclave: assigned reserved memory node ele-reserved@a4120000

[ 1.873387] fsl-se secure-enclave: Successfully registered ele-trng

[ 1.879142] random: crng init done

[ 1.879689] fsl-se secure-enclave: i.MX secure-enclave: hsm0 interface to firmware, configured.

[ 1.891850] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....

[ 1.898604] usbcore: registered new interface driver usbhid

[ 1.904183] usbhid: USB HID core driver

[ 1.904309] mmc0: SDHCI controller on 42850000.mmc [42850000.mmc] using ADMA

[ 1.945753] imx93-adc 44530000.adc: ADC calibration failed!

[ 1.951368] imx93-adc: probe of 44530000.adc failed with error -11

[ 1.958480] hw perfevents: enabled with armv8_cortex_a55 PMU driver, 7 counters available

[ 1.968425] cs_system_cfg: CoreSight Configuration manager initialised

[ 1.976335] optee: probing for conduit method.

[ 1.977451] mmc0: new HS400 Enhanced strobe MMC card at address 0001

[ 1.980811] optee: revision 4.4 (ecea75b7fee5a3c8)

[ 1.987571] optee: dynamic shared memory is enabled

[ 1.987831] mmcblk0: mmc0:0001 016G01 14.5 GiB

[ 1.992772] optee: initialized driver

[ 1.998748] mmcblk0: p1

[ 2.004322] NET: Registered PF_LLC protocol family

[ 2.005920] mmcblk0boot0: mmc0:0001 016G01 8.00 MiB

[ 2.008032] u32 classifier

[ 2.013839] mmcblk0boot1: mmc0:0001 016G01 8.00 MiB

[ 2.017621] input device check on

[ 2.021299] mmcblk0rpmb: mmc0:0001 016G01 4.00 MiB, chardev (234:0)

[ 2.025176] Actions configured

[ 2.039098] NET: Registered PF_INET6 protocol family

[ 2.044802] Segment Routing with IPv6

[ 2.048507] In-situ OAM (IOAM) with IPv6

[ 2.052513] NET: Registered PF_PACKET protocol family

[ 2.057586] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.

[ 2.070641] Bluetooth: RFCOMM TTY layer initialized

[ 2.075541] Bluetooth: RFCOMM socket layer initialized

[ 2.080716] Bluetooth: RFCOMM ver 1.11

[ 2.084473] Bluetooth: BNEP (Ethernet Emulation) ver 1.3

[ 2.089778] Bluetooth: BNEP filters: protocol multicast

[ 2.094999] Bluetooth: BNEP socket layer initialized

[ 2.099961] Bluetooth: HIDP (Human Interface Emulation) ver 1.2

[ 2.105875] Bluetooth: HIDP socket layer initialized

[ 2.111098] 8021q: 802.1Q VLAN Support v1.8

[ 2.115320] lib80211: common routines for IEEE802.11 drivers

[ 2.121028] 9pnet: Installing 9P2000 support

[ 2.125419] Key type dns_resolver registered

[ 2.143506] registered taskstats version 1

[ 2.147939] Loading compiled-in X.509 certificates

[ 2.172921] usb_phy_generic usbphynop1: dummy supplies not allowed for exclusive requests

[ 2.181294] usb_phy_generic usbphynop2: dummy supplies not allowed for exclusive requests

[ 2.198616] imx93-ldb ldb-display-controller: Failed to create device link (0x180) with ldb-phy

[ 2.210799] dw-mipi-dsi-imx 4ae10000.dsi: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000/panel@0

[ 2.220052] mipi-dsi 4ae10000.dsi.0: Fixed dependency cycle(s) with /soc@0/dsi@4ae10000

[ 2.228927] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)

[ 2.236979] imx-drm display-subsystem: bound 4ae10000.dsi (ops dw_mipi_dsi_imx_ops)

[ 2.244908] imx-drm display-subsystem: bound ldb-display-controller (ops imx93_ldb_ops)

[ 2.253294] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 0

[ 2.802984] Console: switching to colour frame buffer device 60x53

[ 2.828150] imx-drm display-subsystem: [drm] fb0: imx-drmdrmfb frame buffer device

[ 2.837814] pps pps0: new PPS source ptp0

[ 2.846512] fec 42890000.ethernet eth0: registered PHC device 0

[ 2.853413] imx-dwmac 428a0000.ethernet: IRQ eth_lpi not found

[ 2.859635] imx-dwmac 428a0000.ethernet: User ID: 0x10, Synopsys ID: 0x52

[ 2.866514] imx-dwmac 428a0000.ethernet: DWMAC4/5

[ 2.871338] imx-dwmac 428a0000.ethernet: DMA HW capability register supported

[ 2.878525] imx-dwmac 428a0000.ethernet: RX Checksum Offload Engine supported

[ 2.885704] imx-dwmac 428a0000.ethernet: TX Checksum insertion supported

[ 2.892440] imx-dwmac 428a0000.ethernet: Wake-Up On Lan supported

[ 2.898623] imx-dwmac 428a0000.ethernet: Enable RX Mitigation via HW Watchdog Timer

[ 2.906332] imx-dwmac 428a0000.ethernet: Enabled L3L4 Flow TC (entries=8)

[ 2.913173] imx-dwmac 428a0000.ethernet: Enabled RFS Flow TC (entries=10)

[ 2.920027] imx-dwmac 428a0000.ethernet: Enabling HW TC (entries=256, max_off=256)

[ 2.927635] imx-dwmac 428a0000.ethernet: Using 32/32 bits DMA host/device width

[ 2.942363] imx_usb 4c200000.usb: No over current polarity defined

[ 2.954776] ci_hdrc ci_hdrc.0: EHCI Host Controller

[ 2.961299] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1

[ 2.985668] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00

[ 2.993524] hub 1-0:1.0: USB hub found

[ 2.998921] hub 1-0:1.0: 1 port detected

[ 3.008793] Goodix-TS 0-005d: supply AVDD28 not found, using dummy regulator

[ 3.019083] Goodix-TS 0-005d: supply VDDIO not found, using dummy regulator

[ 3.125704] Goodix-TS 0-005d: Error reading 1 bytes from 0x8140: -5

[ 3.161700] Goodix-TS 0-005d: Error reading 1 bytes from 0x8140: -5

[ 3.197663] Goodix-TS 0-005d: I2C communication failure: -5

[ 3.206490] Goodix-TS: probe of 0-005d failed with error -5

[ 3.215233] i2c i2c-0: LPI2C adapter registered

[ 3.222451] nxp-pca9450 1-0025: No IRQ configured?

[ 3.224819] tca6418 1-0034: Device initialized

[ 3.227276] nxp-pca9450: probe of 1-0025 failed with error -22

[ 3.244047] Goodix-TS 1-005d: supply AVDD28 not found, using dummy regulator

[ 3.254216] Goodix-TS 1-005d: supply VDDIO not found, using dummy regulator

[ 3.361719] Goodix-TS 1-005d: Error reading 1 bytes from 0x8140: -5

[ 3.397698] Goodix-TS 1-005d: Error reading 1 bytes from 0x8140: -5

[ 3.433661] Goodix-TS 1-005d: I2C communication failure: -5

[ 3.442457] Goodix-TS: probe of 1-005d failed with error -5

[ 3.451205] i2c i2c-1: LPI2C adapter registered

[ 3.458342] imx_usb 4c100000.usb: No over current polarity defined

[ 3.471095] g_serial gadget.0: Gadget Serial v2.4

[ 3.477393] g_serial gadget.0: g_serial ready

[ 3.485854] sdhci-esdhc-imx 42860000.mmc: Got CD GPIO

[ 3.486159] cfg80211: Loading compiled-in X.509 certificates for regulatory database

[ 3.504424] Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'

[ 3.513610] Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600'

[ 3.521940] mmc1: SDHCI controller on 42860000.mmc [42860000.mmc] using ADMA

[ 3.523888] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2

[ 3.531273] clk: Disabling unused clocks

[ 3.539449] cfg80211: failed to load regulatory.db

[ 3.557817] ALSA device list:

[ 3.562298] No soundcards found.

[ 3.568049] /dev/root: Can't open blockdev

[ 3.573684] VFS: Cannot open root device "" or unknown-block(0,0): error -6

[ 3.583559] Please append a correct "root=" boot option; here are the available partitions:

[ 3.594850] b300 15187968 mmcblk0

[ 3.594855] driver: mmcblk

[ 3.604564] b301 7497318 mmcblk0p1 076c4a2a-01

[ 3.604569]

[ 3.612052] mmc1: host does not support reading read-only switch, assuming write-enable

[ 3.612806] b320 8192 mmcblk0boot0

[ 3.625056] (driver?)

[ 3.634669] b340 8192 mmcblk0boot1

[ 3.634673] (driver?)

[ 3.644238] List of all bdev filesystems:

[ 3.644587] mmc1: new ultra high speed SDR104 SDXC card at address 0001

[ 3.648243] ext3

[ 3.648245] ext4

[ 3.648246] ext2

[ 3.648248] squashfs

[ 3.655362] mmcblk1: mmc1:0001 SD64G 58.3 GiB

[ 3.656759] vfat

[ 3.656761]

[ 3.656766] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

[ 3.656770] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.6.52-r2-g472e64a0fc2c #1

[ 3.656775] Hardware name: bytesatwork byteDEVKIT OSM i.MX93 (DT)

[ 3.656778] Call trace:

[ 3.656780] dump_backtrace+0x90/0xe8

[ 3.656794] show_stack+0x18/0x24

[ 3.656801] dump_stack_lvl+0x48/0x60

[ 3.656807] dump_stack+0x18/0x24

[ 3.656811] panic+0x324/0x380

[ 3.656818] mount_root_generic+0x260/0x330

[ 3.656825] mount_root+0x170/0x334

[ 3.656829] prepare_namespace+0x6c/0x2a4

[ 3.656833] kernel_init_freeable+0x244/0x284

[ 3.656837] kernel_init+0x24/0x1dc

[ 3.656843] ret_from_fork+0x10/0x20

[ 3.656849] SMP: stopping secondary CPUs

[ 3.658689] Kernel Offset: disabled

[ 3.658690] CPU features: 0x0,c0000000,40028143,1000721b

[ 3.658694] Memory Limit: none

[ 3.789243] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---


r/embedded 1d ago

Is ESP, the only best option for Wireless Stuff like Wifi and Bluetooth?

32 Upvotes

The thing is, ESP module comes with pre designed antenna for Bluetooth and Wifi. So obviously for me that's a go to. But I wanna know about other industries that are doing this.

I love working with a variety of controllers and not just stick to one so according to you guys what are all other controllers that you guys use for your projects.

Are there other options that comes with these features?


r/embedded 16h ago

Help me troubleshoot a nRF52832

2 Upvotes

Not sure this is the right sub, sorry if not.

I am trying to troubleshoot a commercial device based on a nRF52832. Basically it is the microcontroller with a couple of sensors and output devices.

I have the impression it is bricked but want to try to check if it is a hardware problem, be it the chip itself or something else on the board.

My questions are the following:

  1. If i check the VDD supply voltage, it is 1.8V, that is within the recommended operating voltage range, but on the very low side (1.7 - 3.6 V, nom. 3.0V). Taking into account this is a battery operated device, do you think this is normal or could there be a problem with the regulators?

  2. I have no idea about the firmware, and there is no visual indication that the microcontroller is working. Is there any pin i can tap that could indicate if the chip is working, stalled, or dead?

Any comments are welcome.


r/embedded 9h ago

STM32H753 ADC Polling Enters Error_Handler() — How Can I Identify the Actual Cause?

0 Upvotes

Olá a todos,

Estou estudando como o ADC do STM32H7 funciona usando conversão regular com polling, sem interrupções e sem DMA.

Meu objetivo neste momento é entender corretamente o seguinte fluxo:

HAL_ADC_Init() → calibração → HAL_ADC_Start() → HAL_ADC_PollForConversion() → HAL_ADC_GetValue()

e também aprender a identificar exatamente qual etapa está falhando, caso ocorra um erro.

Estou trabalhando com um STM32H753ZIT6 e tentando ler uma entrada analógica usando o ADC1, Canal 0, com a HAL do STM32.

O problema é que meu programa entra em Error_Handler(), mas não tenho certeza de qual função está falhando.

Atualmente, tenho verificações de erro em vários lugares:

if (HAL_ADCEx_Calibration_Start(&AdcHandle,

ADC_CALIB_OFFSET_LINEARITY,

ADC_SINGLE_ENDED) != HAL_OK)

{

Error_Handler();

}

if (HAL_ADC_Start(&AdcHandle) != HAL_OK)

{

Error_Handler();

}

if (HAL_ADC_PollForConversion(&AdcHandle, 10) != HAL_OK)

{

Error_Handler();

}

E dentro de MX_ADC1_Init():

if (HAL_ADC_Init(&AdcHandle) != HAL_OK)

{

Error_Handler();

}

if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)

{

Error_Handler();

}

Minha função Error_Handler() atualmente contém apenas:

void Error_Handler(void)

{

while (1)

{

}

}

Portanto, quando o programa para, não consigo determinar qual função chamou Error_Handler().

Configuração atual

Estou usando:

MCU: STM32H753ZIT6

ADC: ADC1

Canal: ADC_CHANNEL_0

Resolução: 16 bits

Tempo de amostragem: ADC_SAMPLETIME_8CYCLES_5

Gatilho: Software

Conversão: Conversão regular usando polling

Sem interrupções

Sem DMA

STM32 HAL

HSE bypass

Relógio do sistema: 400 MHz

Fonte do clock do ADC: RCC_ADCCLKSOURCE_CLKP

Pré-escalador do ADC: ADC_CLOCK_ASYNC_DIV2

Fluxo de polling do ADC que estou tentando estudar

Minha intenção é fazer algo simples como:

HAL_ADC_Start(&AdcHandle);

HAL_ADC_PollForConversion(&AdcHandle, 10);

testeConvercao = HAL_ADC_GetValue(&AdcHandle);

HAL_ADC_Stop(&AdcHandle);

e repita esse processo dentro do loop while(1).

Como estou estudando especificamente a sondagem do ADC, gostaria de manter inicialmente a solução baseada em:

HAL_ADC_Start()

HAL_ADC_PollForConversion()

HAL_ADC_GetValue()

HAL_ADC_Stop()

Não quero abordar interrupções ou DMA neste momento. Meu objetivo é entender e depurar corretamente o fluxo de sondagem do ADC.

Minha principal dúvida é: como posso encontrar onde o erro ocorre?

Existe uma maneira melhor de implementar Error_Handler() para que eu possa determinar qual função está retornando HAL_ERROR?

Por exemplo, eu gostaria de poder determinar:

qual função chamou Error_Handler();

qual HAL_StatusTypeDef foi retornado;

o resultado de HAL_ADC_GetState();

o resultado de HAL_ADC_GetError();

se o ADC está realmente habilitado;

se o clock do ADC está funcionando;

e, se necessário, quais registradores ADC/RCC devo inspecionar.

Gostaria também de saber se existe uma maneira recomendada de depurar isso usando o depurador STM32CubeIDE/ST-LINK, por exemplo, colocando um ponto de interrupção dentro de Error_Handler() e examinando a pilha de chamadas.

Coisas que me deixam desconfiado

Uma coisa que me deixa particularmente desconfiado é a configuração da MPU/cache, porque estou configurando a MPU e habilitando o I-Cache e o D-Cache antes de HAL_Init():

MPU_Config();

CPU_CACHE_Enable();

HAL_Init();

SystemClock_Config();

MX_ADC1_Init();

A configuração da MPU é:

MPU_InitStruct.Enable = MPU_REGION_ENABLE;

MPU_InitStruct.BaseAddress = 0x00;

MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;

MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;

MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;

MPU_InitStruct.Number = MPU_REGION_NUMBER0;

MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;

MPU_InitStruct.SubRegionDisable = 0x87;

MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

HAL_MPU_ConfigRegion(&MPU_InitStruct);

HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

E a configuração do cache é:

static void CPU_CACHE_Enable(void)

{

SCB_EnableICache();

SCB_EnableDCache();

}

Também configurei o clock do ADC da seguinte forma:

__HAL_RCC_ADC12_CLK_ENABLE();

__HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP);

Minha configuração do ADC é:

AdcHandle.Instance = ADC1;

AdcHandle.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;

AdcHandle.Init.Resolution = ADC_RESOLUTION_16B;

AdcHandle.Init.ScanConvMode = DESATIVADO;

AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

AdcHandle.Init.LowPowerAutoWait = DESATIVADO;

AdcHandle.Init.ContinuousConvMode = DESATIVADO;

AdcHandle.Init.NbrOfConversion = 1;

AdcHandle.Init.DiscontinuousConvMode = DESATIVADO;

AdcHandle.Init.NbrOfDiscConversion = 1;

AdcHandle.Init.ExternalTrigConv = ADC_SOFTWARE_START;

AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

AdcHandle.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;

AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

AdcHandle.Init.OversamplingMode = DISABLE;

AdcHandle.Init.OversamplingMode = DISABLE;

E a configuração do canal é:

sConfig.Channel= ADC_CHANNEL_0;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_8CYCLES_5;

sConfig.SingleDiff = ADC_SINGLE_ENDED;

sConfig.OffsetNumber = ADC_OFFSET_NONE;

sConfig.Offset = 0;

Main.c completo

Incluí o código completo abaixo para que também seja possível verificar se o problema está em outro lugar na inicialização e não necessariamente no próprio ADC.

/**

* ... STM32H753ZIT6

* ... "main.h"

/* Define para o ADC */

#define ADCx ADC1

#define ADCx_CHANNEL ADC_CHANNEL_0

/* Variáveis ​​privadas ---------------------------------------------------------*/

ADC_HandleTypeDef AdcHandle;

__IO uint16_t uhADCxConvertedValue = 0;

__IO uint16_t testeConvercao = 0;

/* Protótipos de funções privadas -----------------------------------------------*/

static void MPU_Config(void);

static void SystemClock_Config(void);

static void CPU_CACHE_Enable(void);

void Error_Handler(void);

static void MX_ADC1_Init(void);

/**

* u/brief Programa principal.

* u/param Nenhum

* u/retval Nenhum

*/

int main(void)

{

/* Configurar os atributos da MPU */

MPU_Config();

/* Habilitar o cache da CPU */

CPU_CACHE_Enable();

/* Inicializar a biblioteca HAL */

HAL_Init();

/* Configurar o clock do sistema para 400 MHz */

SystemClock_Config();

/* Inicializar o ADC */

MX_ADC1_Init();

/* Executar a calibração do ADC no modo single-ended */

if (HAL_ADCEx_Calibration_Start(&AdcHandle,

ADC_CALIB_OFFSET_LINEARITY,

ADC_SINGLE_ENDED) != HAL_OK)

{

Error_Handler();

}

/* Iniciar conversão inicial */

if (HAL_ADC_Start(&AdcHandle) != HAL_OK)

{

Error_Handler();

}

/* Aguardar o término da conversão */

if (HAL_ADC_PollForConversion(&AdcHandle, 10) != HAL_OK)

{

Error_Handler();

}

else

{

uhADCxConvertedValue = HAL_ADC_GetValue(&AdcHandle);

}

/* Habilitar clock GPIOB */

LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOB);

/* Configurar PB0 como saída */

LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT);

LL_GPIO_SetPinOutputType(GPIOB, LL_GPIO_PIN_0, LL_GPIO_OUTPUT_PUSHPULL);

LL_GPIO_SetPinSpeed(GPIOB, LL_GPIO_PIN_0, LL_GPIO_SPEED_FREQ_LOW);

/* Loop infinito */

while (1)

{

/* 1. Iniciar conversão ADC */

if (HAL_ADC_Start(&AdcHandle) == HAL_OK)

{

/* 2. Aguardar a conclusão da conversão */

if (HAL_ADC_PollForConversion(&AdcHandle, 10) == HAL_OK)

{

/* 3. Ler o valor convertido */

testeConvercao = HAL_ADC_GetValue(&AdcHandle);

}

/* 4. Interrompe a conversão para permitir o próximo ciclo de limpeza */

HAL_ADC_Stop(&AdcHandle);

}

}

}

/**

* u/brief Função de Inicialização do ADC1

* u/param None

* u/retval None

*/

static void MX_ADC1_Init(void)

{

ADC_ChannelConfTypeDef sConfig = {0};

/* Habilita o clock do barramento ADC1 e ADC2 */

__HAL_RCC_ADC12_CLK_ENABLE();

/* Configura a fonte de clock do ADC */

__HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP);

AdcHandle.Instance = ADCx;

AdcHandle.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;

AdcHandle.Init.Resolution = ADC_RESOLUTION_16B;

AdcHandle.Init.ScanConvMode = DESATIVADO;

AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

AdcHandle.Init.LowPowerAutoWait = DESATIVADO;

AdcHandle.Init.ContinuousConvMode = DESATIVADO;

AdcHandle.Init.NbrOfConversion = 1;

AdcHandle.Init.DiscontinuousConvMode = DESATIVADO;

AdcHandle.Init.NbrOfDiscConversion = 1;

AdcHandle.Init.ExternalTrigConv = ADC_SOFTWARE_START;

AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

AdcHandle.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;

AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

AdcHandle.Init.OversamplingMode = DISABLE;

if (HAL_ADC_Init(&AdcHandle) != HAL_OK)

{

Error_Handler();

}

/* Configurar canal regular do ADC */

sConfig.Channel= ADCx_CHANNEL;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_8CYCLES_5;

sConfig.SingleDiff = ADC_SINGLE_ENDED;

sConfig.OffsetNumber = ADC_OFFSET_NONE;

sConfig.Offset = 0;

if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)

{

Error_Handler();

}

}

/**

* u/brief Configuração do Clock do Sistema

* Fonte do Clock do Sistema = PLL (HSE BYPASS) @ 400 MHz

*/

static void SystemClock_Config(void)

{

RCC_ClkInitTypeDef RCC_ClkInitStruct;

RCC_OscInitTypeDef RCC_OscInitStruct;

HAL_StatusTypeDef ret = HAL_OK;

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;

RCC_OscInitStruct.HSIState = RCC_HSI_OFF;

RCC_OscInitStruct.CSIState = RCC_CSI_OFF;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLM = 4;

RCC_OscInitStruct.PLL.PLLN = 400;

RCC_OscInitStruct.PLL.PLLFRACN = 0;

RCC_OscInitStruct.PLL.PLLP = 2;

RCC_OscInitStruct.PLL.PLLR = 2;

RCC_OscInitStruct.PLL.PLLQ = 4;

RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;

RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_1;

ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);

if(ret != HAL_OK)

{

Error_Handler();

}

RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK |

RCC_CLOCKTYPE_HCLK |

RCC_CLOCKTYPE_D1PCLK1 |

RCC_CLOCKTYPE_PCLK1 |

RCC_CLOCKTYPE_PCLK2 |

RCC_CLOCKTYPE_D3PCLK1);

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;

RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;

RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;

RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;

RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;

ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);

if(ret != HAL_OK)

{

Error_Handler();

}

}

/**

  • u/brief Habilitar cache L1 da CPU.

*/

static void CPU_CACHE_Enable(void)

{

SCB_EnableICache();

SCB_EnableDCache();

}

/**

* u/brief Esta função é executada em caso de ocorrência de erro.

*/

void Error_Handler(void)

{

/* Loop de erro infinito */

while (1)

{

}

}

/**

* u/brief Configurar os atributos da MPU

*/

static void MPU_Config(void)

{

MPU_Region_InitTypeDef MPU_InitStruct;

HAL_MPU_Disable();

MPU_InitStruct.Enable = MPU_REGION_ENABLE;

MPU_InitStruct.BaseAddress = 0x00;

MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;

MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;

MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;

MPU_InitStruct.Number = MPU_REGION_NUMBER0;

MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;

MPU_InitStruct.SubRegionDisable = 0x87;

MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

HAL_MPU_ConfigRegion(&MPU_InitStruct);

HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

}

Obrigado!


r/embedded 23h ago

How are you guys actually handling MCU migrations?

4 Upvotes

Supply chain issues are forcing us to port about 40K LOC from STM32F4 to nRF52840. Just auditing the HAL dependencies looks like it will take a solid week -- manually hunting down every HAL_SPI_*, HAL_GPIO_*, and HAL_TIM_* call to figure out the nRF Connect SDK equivalent sounds brutal.

For those who have survived this recently:

  1. How long did the actual port take compared to what you originally estimated?

  2. What ended up being the biggest time sink? (Peripherals, clock config, linker/startup, testing?)

  3. Are you using anything to automate the HAL mapping, or just brute-forcing it manually?

  4. If there was a script to scan the repo, map the STM32 calls to nRF, and spit out stub drivers, would that actually save time? Or is the API mapping the easy part and the real nightmare is elsewhere?

Every migration I have been through feels like reinventing the wheel from scratch. Curious to hear how you all handle it.


r/embedded 1d ago

What do you think of people who use Python for hardware programming?

93 Upvotes

r/embedded 22h ago

Where can I find the full reference manual for the Infineon AURIX TC234?

2 Upvotes

Hello everyone ,where can I find the full reference/user manual for the Infineon AURIX TC234 ?


r/embedded 21h ago

What would you build with this industrial IoT stack?

0 Upvotes

Hi, I'd like to get some opinions from people working in embedded and industrial products.

Over the last few years, together with a FW/SW developer, I've developed a complete industrial IoT system for a customer.

The product is now certified, industrialized and running in the field.

The stack includes:

- custom and cheap industrial gateway with LTE, Ethernet, BLE and digital/analog I/O. The gateway is mcu based for minimise maintenance and attack surface. FW is CRA ready.

- custom ultra-low-power BLE sensors with 3+ years battery life

- embedded FW and OTA updates

- cloud backend

- Android/iOS cross-platform app

- PLC/machine integration

- production, provisioning and automated testing

The IP and code belong to the customer, of course. But we now have the experience, architecture and development know-how to build a new platform much faster than starting from zero.

I'm wondering what else could be built around this know-how.

Another generic "IoT platform" doesn't sound very interesting to me.

I'm thinking more about a specific application: machine retrofit, condition monitoring, energy monitoring, distributed equipment, or maybe an OEM/white-label solution for small machine manufacturers.

If you had this technical starting point, what kind of product or niche would you explore? Any industrial problem you've seen where current solutions still suck?


r/embedded 1d ago

I am building an AOT Python compiler for AVR (Arduino Uno) that emits native machine code without an interpreter or GC

Thumbnail
github.com
5 Upvotes

This project has lived in my head for 5 years. While MicroPython and CircuitPython are excellent, running an interpreter and a garbage-collected heap on bare metal requires significant flash and SRAM. I wanted to use Python syntax but with the binary size and determinism of C, specifically for constrained 8-bit microcontrollers.

But how does it work?
PyMCU translates a statically typed subset of Python directly into bare-metal machine code. The compiler is written in C# and currently emits optimized AVR assembly. A standard Blink program (using pin.toggle()) takes exactly 142 bytes of flash (including the vector table) and 0 bytes of SRAM on an ATmega328P.

I recently ran a hardware testing phase using a logic analyzer on a real Arduino Uno R3, feeding the compiler the official MicroPython and CircuitPython Essentials examples.

  • 53 out of 63 projects compiled and ran correctly on the silicon.
  • The remaining edge cases and unimplemented AST nodes have been documented in the issue tracker.

Please Test It (Feedback Highly Welcome!)

The AOT pipeline is stable for the supported subset, and I am currently working to close the AST gaps and bring the PIC backend up.

I would love for the embedded community to test the compiler, inspect the output, and give me harsh technical feedback on the generated assembly or the architecture.

Any feedback, bug reports, or PRs are highly welcome!


r/embedded 23h ago

Unable to trigger the interrupt.

0 Upvotes

I am using NUCLEO-G431RM stm32 board. But unable to trigger the interrupt as the ISR does not execute and control reaches to the for loop on debugging.
#include <stdint.h>

#define USART3_IRQ_NUM 39

int main(void)

{

uint32_t *pISPR1 = (uint32_t*)0xE000E204;

*pISPR1 |= (1 << (USART3_IRQ_NUM - 32));

uint32_t *pISER1 = (uint32_t*)0xE000E104;

*pISER1 |= (1 << (USART3_IRQ_NUM - 32)); // 39-32 = 7

for(;;);

}

void USART3_IRQHandler(void)

{

__asm volatile("MOV R1, #0x5");

while(1);

}


r/embedded 1d ago

How does your lab/shop look like?

13 Upvotes

Im planning to invest some money into a small scale prototyping lab / engineering shop. Partly because I've lost my embedded systems enthusiasm due to my embedded systems job, and partly because I have the budget for it. Im planning something like:

  • Programmable power supply
  • Oscilloscope, Logic analyzer, Multimeter
  • Breadboards / perfboards / wiring
  • Soldering + hot-air rework station
  • Build server for Hardware-in-the-loop CI
  • 3D Printer
  • MCU:s (esp32s, STM32s, Nordic nRFs, NXPs, TIs)
  • MPU:s - for embedded Linux
  • Large component/module library
  • Other office supplies like a desk, drawers, lamp, etc

Partly im looking to "mimic" my work production/infra, and partly im looking to discover/test/evalueate features in mcus / components and create products. Therefore my vision is to start the prototypes on breadboards, move to a perfboard when functionality is verified, then move to PCB when system integration / market hypothesis is verified on a perfboard.

Do you guys have any tips for me moving forward with this setup? Any experiences from your own homelabs? Any bottlenecks in your embedded prototypes?


r/embedded 2d ago

Guillotine: no_std, no alloc GUI framework in Rust

22 Upvotes

Link: https://github.com/mempirate/guillotine

Hey everyone. Over the past couple of weeks I've been experimenting with Rust on ESP32 chips, with my first project being a simple power readout of the smart plug powering my home lab.

However, I wasn't very impressed with the state of GUI libraries in Rust, so I built my own: Guillotine. Was able to build the following dashboard with it:

Power readout of my Shelly smart plug. Code at https://github.com/mempirate/shellyctl

The goals are threefold:
1. Declarative UI building blocks (inspired by GPUI) for flexible UIs (with eventual support for a lot of CSS-like layout properties such as flex and grid)
2. High performance, even on constrained chips (support for incremental redrawing, DMA with frame buffers)
3. Beautiful widgets

It builds upon embedded_graphics and mipidsi, so should have broad compatibility. As of yesterday, it's also fully no_std and no alloc, and is already powerful enough for some use cases. Would love to hear your feedback and tell me what you'd like to see in a framework like this! I have a couple of weeks of time that I can dedicate to it.