i.MX93 M33 Core: How to get System Uptime (sec/nsec) for micro-ROS on Custom Board?

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

i.MX93 M33 Core: How to get System Uptime (sec/nsec) for micro-ROS on Custom Board?

929 次查看
anandhu-sudha
Contributor II

Hi everyone,

I am currently porting micro-ROS to the Cortex-M33 core of an i.MX93 (MIMX9352) using a custom SOM and the MCUXpresso SDK (v25.06.00).

 

 have successfully established a UART transport and connected to the micro-ROS agent. My nodes and topics are created, but published data appears empty/invalid. After debugging, I’ve realized I need to provide high-resolution timestamps (seconds and nanoseconds) to the micro-ROS client to synchronize with the ROS 2 ecosystem.

Screenshots, Debug terminal output, Codes are attached below.

Micro-ros agent connection

Micro-ros agent connectionMicro-ros agent connection

ROS Topic listing (Topic is emtpy (data not publishing))ROS Topic listing (But topic is empty)ROS Topic listing (But topic is empty)

Debug terminal output:

Debug Console Init done
Past lpuart init and custom trnsport open
Past rclc support,node,publisher init
Past rclc timer init
Past rclc executor init, add_timer
Inside while loop
RCSOFTCHECK Failed: rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)) | Lin0
after executor spin
Inside while loop
RCSOFTCHECK Failed: rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)) | Lin0
after executor spin
Inside while loop
RCSOFTCHECK Failed: rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)) | Lin0
after executor spin

The Problem:

I am struggling to find a reliable "System Uptime" or "Tick" function in the SDK that provides the precision required for rmw_publisher_publish.

I tried using the lptmr driver examples, but the code hangs during LPTMR_Init()

My Questions:

  1. Is there a recommended SDK API for getting a high-resolution (nsec) monotonic timestamp since boot on the i.MX93 M33?

  2. For those who have implemented micro-ROS on i.MX9 series: Did you use a dedicated hardware timer, or is there a standard CMSIS/SDK "GetTime" function I should be using instead?

Environment Details:

  • Hardware: Custom i.MX93 SOM + EVB Baseboard

  • Core: Cortex-M331

  • SDK: 25.06.00

  • Toolchain: MCUXpresso IDE / VS Code Extension2

Any insights or code snippets for a 64-bit nanosecond counter implementation on this platform would be greatly appreciated!

Regards,

Anandhu

0 项奖励
回复
2 回复数

846 次查看
Zhiming_Liu
NXP TechSupport
NXP TechSupport

Hi,

Please refer mcimx93evk\driver_examples\tstmr\tstmr.c demo for timestamp.

Best Regards,
Zhiming

0 项奖励
回复

792 次查看
anandhu-sudha
Contributor II
Hi,
I have tried the tstmr.c demo program in the SDK example. It's not working as expected, tried in two different boards one custom board and avnet osm93, both of them doesn't gave any output in the terminal.
Upon debugging it's the TSTMR related functions are not working, the program's not going past "TSTMR_ReadTimeStamp()".
SDK Used : MCUXpresso SDK (v25.06.00).
0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2270842%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3Ei.MX93%20M33%20Core%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AE%9A%E5%88%B6%E6%9D%BF%E4%B8%8A%E8%8E%B7%E5%BE%97%20micro-ROS%20%E7%9A%84%E7%B3%BB%E7%BB%9F%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%EF%BC%88%E7%A7%92%2F%E7%BA%B3%E7%A7%92%EF%BC%89%EF%BC%9F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2270842%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%A4%A7%E5%AE%B6%E5%A5%BD%EF%BC%8C%3C%2FP%3E%3CP%3E%E6%88%91%E7%9B%AE%E5%89%8D%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E5%AE%9A%E5%88%B6%E7%9A%84%20SOM%20%E5%92%8C%3CSTRONG%3EMCUXpresso%20SDK%3C%2FSTRONG%3E%3CSTRONG%3E(%3C%2FSTRONG%3E%20%3CSTRONG%3Ev25%3C%2FSTRONG%3E%3CSTRONG%3E.%3C%2FSTRONG%3E%2006.00)%EF%BC%8C%E5%B0%86micro-ROS%E7%A7%BB%E6%A4%8D%E5%88%B0%20i.MX93%20(MIMX9352)%E7%9A%84Cortex-M33%E5%86%85%E6%A0%B8%E4%B8%8A%E3%80%82%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E5%B7%B2%E6%88%90%E5%8A%9F%E5%BB%BA%E7%AB%8B%3CSTRONG%3EUART%20%E4%BC%A0%E8%BE%93%3C%2FSTRONG%3E%E5%B9%B6%E8%BF%9E%E6%8E%A5%E5%88%B0%3CSTRONG%3Emicro-ROS%20%E4%BB%A3%E7%90%86%E3%80%82%3C%2FSTRONG%3E%E6%88%91%E5%88%9B%E5%BB%BA%E4%BA%86%E8%8A%82%E7%82%B9%E5%92%8C%E4%B8%BB%E9%A2%98%EF%BC%8C%E4%BD%86%E5%8F%91%E5%B8%83%E7%9A%84%E6%95%B0%E6%8D%AE%E6%98%BE%E7%A4%BA%E4%B8%BA%E7%A9%BA%2F%E6%97%A0%E6%95%88%E3%80%82%E7%BB%8F%E8%BF%87%E8%B0%83%E8%AF%95%EF%BC%8C%E6%88%91%E6%84%8F%E8%AF%86%E5%88%B0%E9%9C%80%E8%A6%81%E5%90%91%20micro-ROS%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8F%90%E4%BE%9B%E9%AB%98%E5%88%86%E8%BE%A8%E7%8E%87%E7%9A%84%E6%97%B6%E9%97%B4%E6%88%B3%EF%BC%88%E7%A7%92%E5%92%8C%E7%BA%B3%E7%A7%92%EF%BC%89%EF%BC%8C%E4%BB%A5%E4%BE%BF%E4%B8%8E%20ROS%202%20%E7%94%9F%E6%80%81%E7%B3%BB%E7%BB%9F%E5%90%8C%E6%AD%A5%E3%80%82%3C%2FP%3E%3CP%3E%E4%B8%8B%E9%9D%A2%E9%99%84%E6%9C%89%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%E3%80%81%E8%B0%83%E8%AF%95%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA%E5%92%8C%E4%BB%A3%E7%A0%81%E3%80%82%3C%2FP%3E%3CP%3E%E5%BE%AE%E7%BD%97%E6%96%AF%E4%BB%A3%E7%90%86%E8%BF%9E%E6%8E%A5%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Micro-ros%20agent%20connection%22%20style%3D%22width%3A%20999px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Micro-ros%20agent%20connection%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Micro-ros%20agent%20connection%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F371629iEB27E1E4768758B5%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22agent%20connection.png%22%20alt%3D%22Micro-ros%20agent%20connection%22%20%2F%3E%3Cspan%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3EMicro-ros%20agent%20connection%3C%2Fspan%3E%3C%2Fspan%3E%3CSPAN%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3EMicro-ros%20agent%20connection%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3E%E5%BE%AE%E7%BD%97%E6%96%AF%E4%BB%A3%E7%90%86%E8%BF%9E%E6%8E%A5%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3EROS%20%E4%B8%BB%E9%A2%98%E5%88%97%E8%A1%A8%EF%BC%88%E4%B8%BB%E9%A2%98%E6%98%AF%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22ROS%20Topic%20listing%20(But%20topic%20is%20empty)%22%20style%3D%22width%3A%20566px%3B%22%3E%E7%A9%BA%E7%9A%84%EF%BC%88%E6%95%B0%E6%8D%AE%E6%9C%AA%E5%8F%91%E5%B8%83%EF%BC%89%EF%BC%89%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22ROS%20Topic%20listing%20(But%20topic%20is%20empty)%22%20style%3D%22width%3A%20566px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22ROS%20Topic%20listing%20(But%20topic%20is%20empty)%22%20style%3D%22width%3A%20566px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F371630i4CCB1538ECA09C98%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22ros%20topic%20listing.png%22%20alt%3D%22ROS%20Topic%20listing%20(But%20topic%20is%20empty)%22%20%2F%3E%3Cspan%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3EROS%20Topic%20listing%20(But%20topic%20is%20empty)%3C%2Fspan%3E%3C%2Fspan%3E%3CSPAN%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3EROS%20Topic%20listing%20(But%20topic%20is%20empty)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3E%3C%2FSPAN%3E%3C%2FSPAN%3EROS%E4%B8%BB%E9%A2%98%E5%88%97%E8%A1%A8%EF%BC%88%E4%BD%86%E4%B8%BB%E9%A2%98%E6%98%AF%E7%A9%BA%E7%9A%84%EF%BC%89%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E8%B0%83%E8%AF%95%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA%EF%BC%9A%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3E%3CEM%3E%E8%B0%83%E8%AF%95%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%90%AF%E5%8A%A8%E5%AE%8C%E6%88%90%20%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E5%B7%B2%E5%90%AF%E5%8A%A8%20lpuart%EF%BC%8C%E5%B9%B6%E6%89%93%E5%BC%80%E4%BA%86%E8%87%AA%E5%AE%9A%E4%B9%89%20trnsport%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E5%B7%B2%E5%90%AF%E5%8A%A8%20rclc%20%E6%94%AF%E6%8C%81%E3%80%81%E8%8A%82%E7%82%B9%E5%92%8C%E5%8F%91%E5%B8%83%E7%A8%8B%E5%BA%8F%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E5%B7%B2%E5%90%AF%E5%8A%A8%20rclc%20%E5%AE%9A%E6%97%B6%E5%99%A8%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E8%BF%87%E5%8E%BB%E7%9A%84%20rclc%20%E6%89%A7%E8%A1%8C%E5%99%A8%E5%90%AF%E5%8A%A8%EF%BC%8Cadd_timer%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E5%9C%A8%20while%20%E5%BE%AA%E7%8E%AF%E5%86%85%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3ERCSOFTCHECK%20%E5%A4%B1%E8%B4%A5%EF%BC%9Arclc_executor_spin_some(%26amp%3Bexecutor%2C%20RCL_MS_TO_NS(100))%7C%20Lin0%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E6%89%A7%E8%A1%8C%E5%99%A8%E6%97%8B%E8%BD%AC%E5%90%8E%20%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E5%9C%A8%20while%20%E5%BE%AA%E7%8E%AF%E5%86%85%E9%83%A8%20%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3ERCSOFTCHECK%20%E5%A4%B1%E8%B4%A5%EF%BC%9A%20rclc_executor_spin_some(%26amp%3Bexecutor%2C%20RCL_MS_TO_NS(100))%7C%20Lin0%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E6%89%A7%E8%A1%8C%E5%99%A8%E6%97%8B%E8%BD%AC%E5%90%8E%20%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E5%9C%A8%20while%20%E5%BE%AA%E7%8E%AF%E5%86%85%E9%83%A8%20%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3ERCSOFTCHECK%20%E5%A4%B1%E8%B4%A5%EF%BC%9A%20rclc_executor_spin_some(%26amp%3Bexecutor%2C%20RCL_MS_TO_NS(100))%7C%20Lin0%3C%2FEM%3E%3CBR%20%2F%3E%3CEM%3E%E6%89%A7%E8%A1%8C%E5%99%A8%E6%97%8B%E8%BD%AC%E5%90%8E%3C%2FEM%3E%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E9%97%AE%E9%A2%98%E6%89%80%E5%9C%A8%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3E%E6%88%91%E5%BE%88%E9%9A%BE%E5%9C%A8%20SDK%20%E4%B8%AD%E6%89%BE%E5%88%B0%E4%B8%80%E4%B8%AA%E5%8F%AF%E9%9D%A0%E7%9A%84%22System%20Uptime%22%20%E6%88%96%22Tick%22%20%E5%87%BD%E6%95%B0%E6%9D%A5%E6%8F%90%E4%BE%9B%20rmw_publisher_publish%20%E6%89%80%E9%9C%80%E7%9A%84%E7%B2%BE%E5%BA%A6%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20lptmr%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B%EF%BC%8C%E4%BD%86%E4%BB%A3%E7%A0%81%E5%9C%A8%20LPTMR_Init()%E6%9C%9F%E9%97%B4%E6%8C%82%E8%B5%B7%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E6%88%91%E7%9A%84%E9%97%AE%E9%A2%98%3C%2FSTRONG%3E%3C%2FP%3E%3COL%3E%3CLI%3E%3CP%3E%E8%87%AA%E4%BB%8E%E5%9C%A8%20i.MX93%20M33%20%E4%B8%8A%E5%90%AF%E5%8A%A8%E4%BB%A5%E6%9D%A5%EF%BC%8C%E6%98%AF%E5%90%A6%E6%9C%89%E6%8E%A8%E8%8D%90%E7%9A%84%20SDK%20API%20%E6%9D%A5%E8%8E%B7%E5%BE%97%E9%AB%98%E5%88%86%E8%BE%A8%E7%8E%87%EF%BC%88nsec%EF%BC%89%E7%9A%84%E5%8D%95%E8%B0%83%E6%97%B6%E9%97%B4%E6%88%B3%EF%BC%9F%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%E5%AF%B9%E4%BA%8E%E9%82%A3%E4%BA%9B%E5%9C%A8%20i.MX9%20%E7%B3%BB%E5%88%97%E4%B8%8A%E5%AE%9E%E7%8E%B0%E4%BA%86%20micro-ROS%20%E7%9A%84%E4%BA%BA%EF%BC%9A%E4%BD%A0%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%E4%B8%93%E7%94%A8%E7%9A%84%E7%A1%AC%E4%BB%B6%E8%AE%A1%E6%97%B6%E5%99%A8%EF%BC%8C%E8%BF%98%E6%98%AF%E6%88%91%E5%BA%94%E8%AF%A5%E6%94%B9%E7%94%A8%E6%A0%87%E5%87%86%E7%9A%84%20CMSIS%2FSDK%20%22%20getTime%20%22%20%E5%87%BD%E6%95%B0%EF%BC%9F%3C%2FP%3E%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%3CSTRONG%3E%E7%8E%AF%E5%A2%83%E8%AF%A6%E6%83%85%EF%BC%9A%3C%2FSTRONG%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3E%E7%A1%AC%E4%BB%B6%E5%AE%9A%E5%88%B6%20i.MX93%20SOM%20%2B%20EVB%20%E5%BA%95%E6%9D%BF%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%E5%86%85%E6%A0%B8%3CSPAN%20class%3D%22%22%3E%20Cortex-M331%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ESDK%EF%BC%9A25.06.00%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSPAN%20class%3D%22%22%3E%E5%B7%A5%E5%85%B7%E9%93%BE%3C%2FSPAN%3E%3CSPAN%20class%3D%22%22%3EMCUXpresso%20%E9%9B%86%E6%88%90%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%2FVS%20%E4%BB%A3%E7%A0%81%E6%89%A9%E5%B1%952%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%E5%A6%82%E6%9E%9C%E6%82%A8%E5%AF%B9%E5%9C%A8%E8%AF%A5%E5%B9%B3%E5%8F%B0%E4%B8%8A%E5%AE%9E%E7%8E%B0%2064%20%E4%BD%8D%E7%BA%B3%E7%A7%92%E8%AE%A1%E6%95%B0%E5%99%A8%E6%9C%89%E4%BB%BB%E4%BD%95%E8%A7%81%E8%A7%A3%E6%88%96%E4%BB%A3%E7%A0%81%E7%89%87%E6%AE%B5%EF%BC%8C%E6%88%91%E4%BB%AC%E5%B0%86%E4%B8%8D%E8%83%9C%E6%84%9F%E6%BF%80%EF%BC%81%3C%2FP%3E%3CP%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3C%2FP%3E%3CP%3E%E9%98%BF%E5%8D%97%E5%BE%B7%E8%83%A1%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2285522%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i.MX93%20M33%20Core%3A%20How%20to%20get%20System%20Uptime%20(sec%2Fnsec)%20for%20micro-ROS%20on%20Custom%20Board%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2285522%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%3CBR%20%2F%3E%EF%BC%8C%E6%88%91%E5%B7%B2%E7%BB%8F%E5%B0%9D%E8%AF%95%E4%BA%86%20tstmr.cSDK%20%E7%A4%BA%E4%BE%8B%E4%B8%AD%E7%9A%84%E6%BC%94%E7%A4%BA%E7%A8%8B%E5%BA%8F%E3%80%82%E5%AE%83%E6%97%A0%E6%B3%95%E6%8C%89%E9%A2%84%E6%9C%9F%E8%BF%90%E8%A1%8C%EF%BC%8C%E5%9C%A8%E4%B8%A4%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9D%BF%E4%B8%8A%E5%B0%9D%E8%AF%95%E8%BF%87%EF%BC%8C%E4%B8%80%E4%B8%AA%E6%98%AF%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9D%BF%E5%92%8Cavnet%20osm93%EF%BC%8C%E4%B8%A4%E8%80%85%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E9%83%BD%E6%B2%A1%E6%9C%89%E7%BB%99%E5%87%BA%E4%BB%BB%E4%BD%95%E8%BE%93%E5%87%BA%E3%80%82%3CBR%20%2F%3E%E8%B0%83%E8%AF%95%E5%90%8E%E5%8F%91%E7%8E%B0%20TSTMR%20%E7%9B%B8%E5%85%B3%E5%87%BD%E6%95%B0%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%8C%E7%A8%8B%E5%BA%8F%E6%97%A0%E6%B3%95%E9%80%9A%E8%BF%87%22TSTMR_ReadTimeStamp()%22%20%E3%80%82%3CBR%20%2F%3E%E4%BD%BF%E7%94%A8%E7%9A%84%20SDK%EF%BC%9AMCUXpresso%20SDK%20(v25.06.00)%E3%80%82%3C%2FLINGO-BODY%3E