Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
About MCU SDK SBOM? Hi NXP,      May I ask if NXP provides an official SBOM for their MCU SDKs? For example, SDK version 24.12. Re: About MCU SDK SBOM? Hello @Omar_hong , Sure, I will create a private case for you. BRs, Celeste Re: About MCU SDK SBOM? Hi @Celeste_Liu    Thank you for your response. For the sake of client privacy, would it be possible for you to message me privately? Re: About MCU SDK SBOM? Hello @Omar_hong , Thanks for your post. I need to ask the relevant internal team regarding this issue. To do so, could you please help provide the following information? 1. What product are you using? 2. Your end application name. BRs, Celeste
查看全文
Matter PacketBuffer Pool Empty due to Large Pre-Allocation I am working on a Matter device FRDM-RW612. I noticed that sometimes that PacketBuffer pool runs empty. I have attached the log here [29889] [INFO] [IN] CASE Server received Sigma1 message . Starting handshake. EC 0x2005cd68 [29898] [INFO] [SC] Received Sigma1 msg [29901] [TRACE] [SC] Found MRP parameters in the message [29907] [TRACE] [SC] Peer assigned session key ID 582 [29912] [INFO] [DL] KVS, get key id:: f/1/g [29916] [INFO] [DL] KVS, get key id:: f/1/k/0 [29922] [INFO] [SC] CASE matched destination ID: fabricIndex 1, NodeID 0x00000000000022B8 [30054] [INFO] [CSL] LWIP:PacketBuffer::New Request size=870, aAvailable=758, aReserved=112, MaxSize=64000 [30064] [INFO] [EM] <<< [E:14060r S:0 M:111174838] (U) Msg TX from 0000000000000000 to 0:0ED014D28E28AE99 [0000] [TCP:[FE80::FE84:A7FF:FE51:F90A]:40004] --- Type 0000:31 (SecureChannel:CASE_Sigma2) (B:748) [30083] [INFO] [SC] Sent Sigma2 msg [30087] [ERR] [DL] Long dispatch time: 219 ms, for event type 3 [30092] [TRACE] [DL] DeviceEventCallback: 0x8016 [30214] [INFO] [EM] >>> [E:14060r S:0 M:239333775] (U) Msg RX from 0:0ED014D28E28AE99 [0000] to 0000000000000000 --- Type 0000:32 (SecureChannel:CASE_Sigma3) (B:594) [30229] [TRACE] [EM] Found matching exchange: 14060r, Delegate: 0x2005bd74 [30236] [INFO] [SC] Received Sigma3 msg [30288] [INFO] [DL] KVS, get key id:: g/sri [30293] [ERR] [DL] KVS, key not found! [30296] [INFO] [DL] KVS, put key id:: f/1/s/000000000001B669 [30304] [INFO] [DL] KVS, put key id:: g/s/HuzH83xHX2H4MZ6LiDY1cw== [30312] [INFO] [DL] KVS, put key id:: g/sri [30318] [TRACE] [SC] Sending status report. Protocol code 0, exchange 14060 [30325] [INFO] [CSL] LWIP:PacketBuffer::New Request size=120, aAvailable=8, aReserved=112, MaxSize=64000 [30334] [INFO] [EM] <<< [E:14060r S:0 M:111174839] (U) Msg TX from 0000000000000000 to 0:0ED014D28E28AE99 [0000] [TCP:[FE80::FE84:A7FF:FE51:F90A]:40004] --- Type 0000:40 (SecureChannel:StatusReport) (B:30) [30354] [INFO] [SC] SecureSession[0x2005af10, LSID:25190]: State change 'kEstablishing' --> 'kActive' [30363] [TRACE] [IN] SecureSession[0x2005af10]: Activated - Type:2 LSID:25190 [30371] [TRACE] [IN] New secure session activated for device <000000000001B669, 1>, LSID:25190 PSID:582! [30380] [INFO] [IN] CASE Session established to peer: <000000000001B669, 1> [30387] [TRACE] [IN] SecureSession[0x2005aff0]: Allocated Type:2 LSID:25191 [30394] [TRACE] [SC] Allocated SecureSession (0x2005aff0) - waiting for Sigma1 msg [30402] [ERR] [DL] Long dispatch time: 114 ms, for event type 2 [30408] [INFO] [CSL] LWIP:PacketBuffer::New Request size=163, aAvailable=51, aReserved=112, MaxSize=64000 [30418] [INFO] [EM] >>> [E:14061r S:25190 M:250050934] (S) Msg RX from 1:000000000001B669 [578C] to 00000000000022B8 --- Type 0001:08 (IM:InvokeCommandRequest) (B:59) [30433] [TRACE] [EM] Handling via exchange: 14061r, Delegate: 0x2005723c [30440] [TRACE] [DMG] Received command for Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0004 [30449] [INFO] [FS] GeneralCommissioning: Received CommissioningComplete [30455] [INFO] [DL] KVS, put key id:: g/fs/c [30461] [INFO] [DL] KVS, put key id:: f/1/m [30467] [INFO] [FP] Metadata for Fabric 0x1 persisted to storage. [30473] [INFO] [DL] KVS, put key id:: f/1/o [30479] [INFO] [DL] KVS, put key id:: f/1/n [30485] [INFO] [DL] KVS, put key id:: f/1/i [30492] [INFO] [DL] KVS, put key id:: f/1/r [30498] [INFO] [TS] Committing Last Known Good Time to storage: 2024-08-17T05:19:27 [30506] [INFO] [DL] KVS, put key id:: g/lkgt [30510] [INFO] [DL] KVS, put key id:: g/fidx [30516] [INFO] [ZCL] OpCreds: Fabric index 0x1 was committed to storage. Compressed Fabric Id 0x51EB0A41B403578C, FabricId 0000000000000001, NodeId 00000000000022B8, VendorId 0xFFF1 [30532] [INFO] [DL] KVS, deleting key id:: g/fs/c [30538] [INFO] [FS] GeneralCommissioning: Successfully commited pending fabric data [30545] [INFO] [FS] Fail-safe cleanly disarmed [30550] [TRACE] [DMG] Endpoint 0, Cluster 0x0000_0030 update version to e5eec16d [30557] [INFO] [DL] endpointId 0x0000_0000 clusterId 0x0000_0030 attribute ID: 0x0000_0000 Type: 39 Value: 0, length 8 [30568] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30578] [ERR] [CSL] PacketBuffer: pool EMPTY. [30582] [ERR] [DMG] Adding response failed: b. Returning failure instead. [30590] [ERR] [DMG] Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0004 status 0x01 (no additional context) [30599] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30609] [ERR] [CSL] PacketBuffer: pool EMPTY. [30614] [ERR] [DMG] Failed to add command status: b [30619] [TRACE] [DMG] Decreasing reference count for CommandHandlerImpl, remaining 1 [30626] [TRACE] [DMG] Decreasing reference count for CommandHandlerImpl, remaining 0 [30634] [ERR] [DMG] Failed to finalize command response: 3 [30640] [TRACE] [DMG] Command handler moving to [AwaitingDe] [30645] [ERR] [DMG] Failed to send InvokeResponseMessage [30650] [TRACE] [DMG] Command response sender moving to [AllInvokeR] [30657] [ERR] [DL] Long dispatch time: 249 ms, for event type 3 [30663] [TRACE] [DL] DeviceEventCallback: 0x8018 [30667] [INFO] [SVR] Commissioning completed successfully [30673] [INFO] [DIS] Updating services using commissioning mode 0 [30679] [INFO] [DIS] CHIP minimal mDNS started advertising. [30685] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30695] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30705] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30716] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30726] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30736] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30746] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30757] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30767] [TRACE] [DL] Using WiFi MAC for hostname [30772] [INFO] [DIS] Advertise operational node 51EB0A41B403578C-00000000000022B8 [30779] [TRACE] [DIS] Responding with _matter._tcp.local [30784] [TRACE] [DIS] Responding with 51EB0A41B403578C-00000000000022B8._matter._tcp.local [30793] [TRACE] [DIS] Responding with 51EB0A41B403578C-00000000000022B8._matter._tcp.local [30801] [TRACE] [DIS] Responding with C095DA0152EF.local [30806] [TRACE] [DIS] Responding with C095DA0152EF.local [30812] [TRACE] [DIS] Responding with _I51EB0A41B403578C._sub._matter._tcp.local [30819] [INFO] [DIS] CHIP minimal mDNS configured as 'Operational device'; instance name: 51EB0A41B403578C-00000000000022B8. [30830] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30841] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30851] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30861] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30871] [INFO] [DIS] mDNS service published: _matter._tcp [30877] [TRACE] [DL] CHIPoBLE advertising set to off [30882] [TRACE] [IN] Expiring all PASE sessions [30886] [TRACE] [IN] SecureSession[0x2005ae30]: MarkForEviction Type:1 LSID:25189 [30894] [INFO] [SC] SecureSession[0x2005ae30, LSID:25189]: State change 'kActive' --> 'kPendingEviction' [30903] [TRACE] [IN] SecureSession[0x2005ae30]: Released - Type:1 LSID:25189 [30910] [TRACE] [IN] Clearing BLE pending packets. [30915] [INFO] [BLE] Releasing end point's BLE connection back to application. [30922] [INFO] [DL] Closing BLE GATT connection (ConnId 00) [30930] [TRACE] [ZCL] Commissioning complete, notify platform driver to persist network credentials. [30939] [INFO] [DL] KVS, put key id:: wifi-ssid [30944] [INFO] [DL] KVS, put key id:: wifi-pass [30948] [TRACE] [DL] DeviceEventCallback: 0x800f [30953] [ERR] [DL] Long dispatch time: 286 ms, for event type 32783 [30988] [INFO] [DL] Current number of connections: 0/1 [30993] [INFO] [DL] BLE GAP connection terminated (reason 0x16) [30999] [TRACE] [BLE] No endpoint for connection error [31004] [TRACE] [DL] DeviceEventCallback: 0x8007 Here is the main part to focus: [30418] [INFO] [EM] >>> [E:14061r S:25190 M:250050934] (S) Msg RX from 1:000000000001B669 [578C] to 00000000000022B8 --- Type 0001:08 (IM:InvokeCommandRequest) (B:59) [30433] [TRACE] [EM] Handling via exchange: 14061r, Delegate: 0x2005723c [30440] [TRACE] [DMG] Received command for Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0004 [30449] [INFO] [FS] GeneralCommissioning: Received CommissioningComplete [30455] [INFO] [DL] KVS, put key id:: g/fs/c [30461] [INFO] [DL] KVS, put key id:: f/1/m [30467] [INFO] [FP] Metadata for Fabric 0x1 persisted to storage. [30473] [INFO] [DL] KVS, put key id:: f/1/o [30479] [INFO] [DL] KVS, put key id:: f/1/n [30485] [INFO] [DL] KVS, put key id:: f/1/i [30492] [INFO] [DL] KVS, put key id:: f/1/r [30498] [INFO] [TS] Committing Last Known Good Time to storage: 2024-08-17T05:19:27 [30506] [INFO] [DL] KVS, put key id:: g/lkgt [30510] [INFO] [DL] KVS, put key id:: g/fidx [30516] [INFO] [ZCL] OpCreds: Fabric index 0x1 was committed to storage. Compressed Fabric Id 0x51EB0A41B403578C, FabricId 0000000000000001, NodeId 00000000000022B8, VendorId 0xFFF1 [30532] [INFO] [DL] KVS, deleting key id:: g/fs/c [30538] [INFO] [FS] GeneralCommissioning: Successfully commited pending fabric data [30545] [INFO] [FS] Fail-safe cleanly disarmed [30550] [TRACE] [DMG] Endpoint 0, Cluster 0x0000_0030 update version to e5eec16d [30557] [INFO] [DL] endpointId 0x0000_0000 clusterId 0x0000_0030 attribute ID: 0x0000_0000 Type: 39 Value: 0, length 8 [30568] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30578] [ERR] [CSL] PacketBuffer: pool EMPTY. [30582] [ERR] [DMG] Adding response failed: b. Returning failure instead. the actual message that is received, InvokeCommandResponse is of 59 bytes, or may be a CommissioningComplete command. But why almost 64KB is a pre-allocation requirement here? I have also added the PacketBuffer::New function here for tracing PacketBufferHandle PacketBufferHandle::New(size_t aAvailableSize, uint16_t aReservedSize) { // Sanity check for kStructureSize to ensure that it matches the PacketBuffer size. static_assert(PacketBuffer::kStructureSize == sizeof(PacketBuffer), "PacketBuffer size mismatch"); // Setting a static upper bound on kStructureSize to ensure the summation of all the sizes does not overflow. static_assert(PacketBuffer::kStructureSize <= UINT16_MAX, "kStructureSize should not exceed UINT16_MAX."); // Setting a static upper bound on the maximum buffer size allocation for regular sized messages (not large). static_assert(PacketBuffer::kMaxSizeWithoutReserve <= UINT16_MAX, "kMaxSizeWithoutReserve should not exceed UINT16_MAX."); #if INET_CONFIG_ENABLE_TCP_ENDPOINT // Setting a static upper bound on the maximum buffer size allocation for // large messages. #if CHIP_SYSTEM_CONFIG_USE_LWIP // LwIP based systems are internally limited to using a u16_t type as the size of a buffer. static_assert(PacketBuffer::kLargeBufMaxSizeWithoutReserve <= UINT16_MAX, "In LwIP, max size for Large payload buffers cannot exceed UINT16_MAX!"); #else // Messages over TCP are framed using a length field that is 32 bits in // length. static_assert(PacketBuffer::kLargeBufMaxSizeWithoutReserve <= UINT32_MAX, "Max size for Large payload buffers cannot exceed UINT32_MAX"); #endif // CHIP_SYSTEM_CONFIG_USE_LWIP #endif // INET_CONFIG_ENABLE_TCP_ENDPOINT // Ensure that aAvailableSize is bound within a max and is not big enough to cause overflow during // subsequent addition of all the sizes. if (aAvailableSize > UINT32_MAX) { ChipLogError(chipSystemLayer, "PacketBuffer: AvailableSize of a buffer cannot exceed UINT32_MAX. aAvailableSize = 0x" ChipLogFormatX64, ChipLogValueX64(static_cast (aAvailableSize))); return PacketBufferHandle(); } // Cast all to uint64_t and add. This cannot overflow because we have // ensured that the maximal value of the summation is // UINT32_MAX + UINT16_MAX + UINT16_MAX, which should always fit in // a uint64_t variable. uint64_t sumOfSizes = static_cast (aAvailableSize) + static_cast (aReservedSize) + static_cast (PacketBuffer::kStructureSize); uint64_t sumOfAvailAndReserved = static_cast (aAvailableSize) + static_cast (aReservedSize); // Ensure that the sum fits in a size_t so that casting into size_t variables, // viz., lBlockSize and lAllocSize, is safe. if (!CanCastTo (sumOfSizes)) { ChipLogError(chipSystemLayer, "PacketBuffer: Sizes of allocation request are invalid. (aAvailableSize = " ChipLogFormatX64 ", aReservedSize = " ChipLogFormatX64 ")", ChipLogValueX64(static_cast (aAvailableSize)), ChipLogValueX64(static_cast (aReservedSize))); return PacketBufferHandle(); } #if CHIP_SYSTEM_CONFIG_USE_LWIP // LwIP based APIs have a maximum buffer size of UINT16_MAX. Ensure that // limit is met during allocation. if (sumOfAvailAndReserved > UINT16_MAX) { ChipLogError(chipSystemLayer, "LwIP based systems require total buffer size to be less than UINT16_MAX!" "Attempted allocation size = " ChipLogFormatX64, ChipLogValueX64(sumOfAvailAndReserved)); return PacketBufferHandle(); } #endif // CHIP_SYSTEM_CONFIG_USE_LWIP // sumOfAvailAndReserved is no larger than sumOfSizes, which we checked can be cast to // size_t. const size_t lAllocSize = static_cast (sumOfAvailAndReserved); PacketBuffer * lPacket; CHIP_SYSTEM_FAULT_INJECT(FaultInjection::kFault_PacketBufferNew, return PacketBufferHandle()); if (lAllocSize > PacketBuffer::kMaxAllocSize) { ChipLogError(chipSystemLayer, "PacketBuffer: allocation exceeding buffer capacity limits: %lu > %lu", static_cast (lAllocSize), static_cast (PacketBuffer::kMaxAllocSize)); return PacketBufferHandle(); } #if CHIP_SYSTEM_CONFIG_USE_LWIP // This cast is safe because lAllocSize is no larger than // kMaxSizeWithoutReserve, which fits in uint16_t. lPacket = static_cast ( pbuf_alloc(PBUF_RAW, static_cast (lAllocSize), CHIP_SYSTEM_PACKETBUFFER_LWIP_PBUF_TYPE)); SYSTEM_STATS_UPDATE_LWIP_PBUF_COUNTS(); ChipLogProgress(chipSystemLayer,"LWIP:PacketBuffer::New Request size=%u, aAvailable=%u, aReserved=%u, MaxSize=%u",lAllocSize,aAvailableSize,aReservedSize,PacketBuffer::kMaxAllocSize); #elif CHIP_SYSTEM_PACKETBUFFER_FROM_CHIP_POOL #if !CHIP_SYSTEM_CONFIG_NO_LOCKING && CHIP_SYSTEM_CONFIG_FREERTOS_LOCKING if (!sBufferPoolMutex.isInitialized()) { Mutex::Init(sBufferPoolMutex); } #endif LOCK_BUF_POOL(); lPacket = PacketBuffer::sFreeList; if (lPacket != nullptr) { PacketBuffer::sFreeList = lPacket->ChainedBuffer(); SYSTEM_STATS_INCREMENT(chip::System::Stats::kSystemLayer_NumPacketBufs); } UNLOCK_BUF_POOL(); ChipLogProgress(chipSystemLayer,"CHIP POOL:PacketBuffer::New Request size=%u",lAllocSize); #elif CHIP_SYSTEM_PACKETBUFFER_FROM_CHIP_HEAP // sumOfSizes is essentially (kStructureSize + lAllocSize) which we already // checked to fit in a size_t. const size_t lBlockSize = static_cast (sumOfSizes); lPacket = reinterpret_cast (chip::Platform::MemoryAlloc(lBlockSize)); SYSTEM_STATS_INCREMENT(chip::System::Stats::kSystemLayer_NumPacketBufs); ChipLogProgress(chipSystemLayer,"CHIP HEAP:PacketBuffer::New Request size=%u",lAllocSize); #else #error "Unimplemented PacketBuffer storage case" #endif if (lPacket == nullptr) { ChipLogError(chipSystemLayer, "PacketBuffer: pool EMPTY."); return PacketBufferHandle(); } lPacket->payload = lPacket->ReserveStart() + aReservedSize; lPacket->len = lPacket->tot_len = 0; lPacket->next = nullptr; lPacket->ref = 1; #if CHIP_SYSTEM_PACKETBUFFER_FROM_CHIP_HEAP lPacket->alloc_size = lAllocSize; #endif return PacketBufferHandle(lPacket); } Re: Matter PacketBuffer Pool Empty due to Large Pre-Allocation The example is all-clusters-app Re: Matter PacketBuffer Pool Empty due to Large Pre-Allocation I hope you are doing well too. The setup is on Ubuntu 22.04, with GN+Ninja build I followed the following commands ~ git clone https://github.com/NXP/matter.git ~ cd matter ~ scripts/checkout_submodules.py --shallow --platform nxp --recursive ~ source ./scripts/activate.sh ~ ./third_party/nxp/nxp_matter_support/scripts/update_nxp_sdk.py --platform common ~ git submodule update --init --recursive ~ source ./scripts/activate.sh ~ cd examples/all-clusters-app/nxp/rt/rw61x ~ gn gen --args="chip_enable_wifi=true chip_inet_config_enable_tcp_endpoint=true board_version=\"frdm\"" out/debug ~ ninja -C out/debug The matter version is release/v1.4.0, the default one.  I am testing the chip-tool for large payload with chip-tool onoff on --allow-large-payload true [30568] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30578] [ERR] [CSL] PacketBuffer: pool EMPTY. [30582] [ERR] [DMG] Adding response failed: b. Returning failure instead. The issue was within matter/src/app/CommandHandlerImpl.cpp. As in the below lines of code const size_t commandBufferMaxSize = mpResponder->GetCommandResponseMaxBufferSize(); auto commandPacket = System::PacketBufferHandle::New(commandBufferMaxSize); VerifyOrReturnError(!commandPacket.IsNull(), CHIP_ERROR_NO_MEMORY); The mpResponder->GetCommandResponseMaxBufferSize() always returns around 63,940 bytes, and this PacketBuffer is used in both functions InvokeResponse and PrepareStatus within the same .cpp file. To solve this, I changed CHIP_SYSTEM_CONFIG_MAX_LARGE_BUFFER_SIZE_BYTES from 64 KB to 10 KB in matter/src/system/SystemConfig.h, since my messages never exceed 10 KB. However, allocating a PacketBuffer of the maximum size for sending a status report or InvokeResponse is still an overestimation. Re: Matter PacketBuffer Pool Empty due to Large Pre-Allocation Hello @farazahmed8, hope you are doing well. In order to try to recreate your issue, could you please share your Matter and SDK release version as well as the example that you are working with? Also please confirm if you are using the MCUXpresso VS Code extension or with the GN/Ninja build on Linux.
查看全文
RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi all, We are preparing bringup of a custom board based on i.MX RT1170. The MCU is populated with a Micron MT25QL02GCBB QSPI NOR flash, through the secondary FlexSPI interface, secondary pin group. For debug purposes we intend to connect a MCU-Link Debug Probe, and the end goal is to run Zephyr RTOS as operating system. As per the PRM we anticipate burning the fuses: BT_FUSE_SEL, FLEXSPI_INSTANCE and FLEXSPI_PIN_GROUP to instruct the boot ROM about the particular interface- and configuration.   Similar to how the 1170 EVKB is flashed we would like to utilize LinkServer and observe the EVK json file (/usr/local/LinkServer/devices/MIMXRT1170-EVKB.json) refers the MIMXRT1170_SFDP_QSPI.cfx flashing driver file. Taking a peek into NXP provided QSPI and SFDP based drivers for RT1170: $ fd cfx /usr/local/LinkServer | rg 1170 | rg SFDP | rg QSPI /usr/local/LinkServer/binaries/Flash/MIMXRT1170_FlexSPI2_A_SFDP_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1170_SFDP_QSPI.cfx   , the latter appears used for the EVK. Compared to the reference design our design differs in the FlexSPI instance, pin control group and also the particular NOR flash. The question is whether each of these differences puts a requirement of us to develop- and provide LinkServer with a custom flash driver? We notice the RT1180 driver provides a wider variety of drivers and wonder whether any of these may be used? $ fd cfx /usr/local/LinkServer | rg 1180 | rg SFDP | rg QSPI /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_A_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_A_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_B_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_B_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_A_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_A_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_B_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_B_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_A_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_A_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_B_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_B_QSPI_S.cfx   Assuming the flashing eventually succeeds, we also need to provide a proper FlexSPI configuration block to be parsed by the boot ROM (equivalent to the EVK variant: https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/nxp/mimxrt1170_evk/xip/evkbmimxrt1170_flexspi_nor_config.c). By far, the most complex part of this structure are the LUTs. Given that SFDP is supported by the NOR flash, are these in fact required for initial bringup or merely for performance optimization? Any chance we can locate these LUTs from one of the existing NXP Zephyr/MCUXpresso repos?   Thanks, Martin Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi @anbn , Yes, your understanding is correct! This GUI view is some king of working set, if you set it up correctly and click the test button, the tool would send such info to ROM for verification as if the ROM gets such info from the FCB on flash. If the result is good, you may convert it to complete FCB and then SPT would program it on the space for FCB on flash as well as save it as a bin file on your local drive for further usage. Hope that makes sense, Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting We haven't received our board yet, so we're trying to minimize bringup time by having a good understanding of at least the minimal configuration. Using single pad SPI could also simplify setup, as we don't need speed to verify the basics.  Is testing the configuration on a physical board a requirement to make the fcb with secure provisioning tool? I've tried to put together this minimal FCB with single pad spi commands matching the datasheet. Does it look like a working setup or have I misunderstood something?  Also, does the boot ROM use SFDP to overwrite these settings or is that only a thing for the cfx driver while flashing the code? We appreciate the help very much, as we're on a tight schedule when we receive the custom units.  const flexspi_nor_config_t mt25ql_minimal_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, // Identifier for FCB .version = FLEXSPI_CFG_BLK_VERSION, // FCB version // Use internal loopback for read sampling (no DQS pad) .readSampleClksrc=kFlexSpiReadSampleClk_InternalLoopback, .csHoldTime = 3, // Chip Select hold time .csSetupTime = 3, // Chip Select setup time // No device mode configuration (no QE bit needed) .deviceModeCfgEnable = 0, .deviceModeType = 0, .deviceModeSeq = {0, 0}, .deviceModeArg = 0, .configCmdEnable = 0, // No extra config commands // Misc options: // - Bit 4: Enable second pinmux group .controllerMiscOption = (1 << kFlexSpiMiscOffset_SecondPinMux), .deviceType = kFlexSpiDeviceType_SerialNOR, // Serial NOR flash .sflashPadType = kSerialFlash_1Pad, // Standard SPI mode .serialClkFreq = kFlexSpiSerialClk_60MHz, // 60 MHz clock .sflashA1Size = 256 * 1024 * 1024, // 256 MiB flash size .dataValidTime = {16, 16}, // Default timing .busyOffset = 0, // Status register offset .busyBitPolarity = 1, // Busy bit is active high // Lookup Table (LUT) for basic SPI commands .lookupTable = { // LUT[0] - Fast Read (0x0B) // 1. Send 0x0B command on 1 pad // 2. Send 24-bit address on 1 pad // 3. Send 8 dummy cycles // 4. Read data on 1 pad [0] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x0B, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18), [1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_DUMMY, kFLEXSPI_1PAD, 0x08, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04), // LUT[4] - Write Enable (0x06) [4] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0), // LUT[5] - Page Program (0x02) [5] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x02, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18), [6] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0), // LUT[7] - Sector Erase (0xD8) [7] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xD8, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18), // LUT[8] - Read Status Register (0x05) [8] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x01), }, }, .pageSize = 256, // Page size in bytes .sectorSize = 64 * 1024, // Sector size in bytes .blockSize = 256 * 1024, // Block size in bytes .isUniformBlockSize = true, // All blocks are same size }; Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi @anbn , Have you connected with your custom board in Serial Download mode and pressed the test button? Was the result passed? for query and cmd pads I think they should be one, only when you set it in quad mode , the flash uses 4 pads for data IOs. Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi Kan Thank you for that link - it helped my understanding. I'm trying to use the template of Secure Provisioning Tool to create the FCB but I consistently get this message.  I'm a little bit unsure about the quad mode setting - according to the datasheet entering quad i/o mode is handled by command 35h which doesnt seem available.  Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi @mns , I am referring to qspiflash_config which includs the parts as you mentioned. Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Thanks @Kan_Li for the quick reply. Regarding the statement: "...leave FCB as it was, .." I am not sure what you mean? Are you referring to leaving the 'lookupTable' structure (https://github.com/zephyrproject-rtos/zephyr/blob/88de138290b683c26abf81142756621a02169eb5/boards/nxp/mimxrt1170_evk/xip/evkbmimxrt1170_flexspi_nor_config.c#L52) meawhile filling out the remainder of the 'memConfig' (https://github.com/zephyrproject-rtos/zephyr/blob/88de138290b683c26abf81142756621a02169eb5/boards/nxp/mimxrt1170_evk/xip/evkbmimxrt1170_flexspi_nor_config.c#L26C3-L26C12) structure as the foundation for the FCB? Thanks again, Martin Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi @anbn , The drivers out of the SDK should be used with the EVKs, so if you design a custom board with flash other than the part used on EVKs , you have to customize the flash loader as well. We provide a guide for that purpose, please kindly refer https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/RT1170-flexSPI1-secondary-QSPI-flash-debug-flashdriver/tac-p/1938828#M222 for details. Hope that helps, Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi Kan Thank you for the quick reply. I'm on Martins team working on the same project.  Can we use the MIMXRT1170_FlexSPI2_A_SFDP_QSPI.cfx as is or do we need to customize the code for our Flash IC? I see config option for the secondary pin group which is also set by efuse - is this redundant?  Anything else we must customize in the driver? Specifically - do we need to set CONFIG_OPTION1 to use the secondary pin group and recompile iMXRT117x_FlexSPI_SFDP? (Also, does that example driver include anything from the board/project?) Does it need to be compiled with our pinmux and/or together with our custom board in MCUXpresso IDE? Are there any tools we can use to generate a working flexspi_nor_config for our Flash IC and board? We're trying to eliminate as many uncertainties as possible before bringup, so we appreciate the help very much.  Best regards Anders Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting Hi @mns , Yes, your understanding is correct! For your case, if FlexSPI2 2nd pin group is used for connecting with the nor flash, you have to develop a custom flash loader for the debugger, such as link server, and also you need to adapt the efuses as you mentioned with a proper FCB for your application, the FCB also set up the flexspi instance and pin group selection, so if you just program the efuse and leave FCB as it was, the boot ROM may find the flash with the help of efuses, but would be lead to a wrong place to fetch your application after checking the FCB part. the LUTs can be updated by your application code if you want to add more , the sdk demo of evkmimxrt1170_flexspi_nor_polling_transfer_cm7 provides an example for this topic. Hope that makes sense, Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. -------------------------------------------------------------------------------
查看全文
RT1170 FLexSPI (或非) 配置 - 闪存和启动 大家好, 我们正准备推出一款基于 i.MX RT1170 的定制板。微控制器通过辅助 FlexSPI 接口、次级引脚组填充了美光 MT25QL02GCBB QSPI 或非闪存。为了进行调试,我们打算连接 MCU-Link 调试探针,最终目标是运行 Zephyr 实时操作系统作为操作系统。 根据PRM的说法,我们预计会烧掉熔丝:BT_FUSE_SEL、FLEXSPI_INSTANCE和FLEXSPI_PIN_GROUP,以指示启动罗姆了解特定的接口和配置。   与 1170 EVKB 的刷新方式类似,我们想利用 LinkServer 观察 EVK json 文件(/usr/local/LinkServer/设备/MIMXRT1170-EVKB.json)指 MIMXRT1170_SFDP_QSPI.cfx 闪存驱动程序文件。一起来看看恩智浦为 RT1170 提供的基于 QSPI 和 SFDP 的驱动程序: $ fd cfx /usr/local/LinkServer | rg 1170 | rg SFDP | rg QSPI /usr/local/LinkServer/binaries/Flash/MIMXRT1170_FlexSPI2_A_SFDP_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1170_SFDP_QSPI.cfx   后者似乎用于 EVK。与参考设计相比,我们的设计在 FlexSPI 实例、引脚控制组以及特定的或非闪存方面有所不同。问题是,这些差异是否要求我们开发并为 LinkServer 提供定制的闪存驱动程序? 我们注意到 RT1180 驱动程序提供了更多种类的驱动程序,不知道是否可以使用其中的任何一种? $ fd cfx /usr/local/LinkServer | rg 1180 | rg SFDP | rg QSPI /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_A_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_A_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_B_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_B_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_A_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_A_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_B_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_B_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_A_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_A_QSPI_S.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_B_QSPI.cfx /usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_B_QSPI_S.cfx   假设闪存最终成功,我们还需要提供一个合适的 FlexSPI 配置块以供启动 ROM 解析(等效于 EVK 变体:https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/nxp/mimxrt1170_evk/xip/evkbmimxrt1170_flexspi_nor_config.c)。到目前为止,该结构中最复杂的部分是 LUT。 鉴于或非闪存支持 SFDP,它们实际上是初始启动所必需的还是仅仅是性能优化所必需的?我们有机会从现有的恩智浦Zephyr/MCUXpresso仓库中找到这些 LUT 吗?   谢谢! Martin Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 你好@anbn、 是的,你的理解是正确的!如果设置正确,点击测试按钮,工具就会将这些信息发送到 ROM 进行验证,就像 ROM 从闪存上的 FCB 获取这些信息一样。如果结果良好,您可以将其转换为完整的 FCB,然后 SPT 将在闪存上的 FCB 空间中进行编程,并将其作为 bin 文件保存在本地驱动器中,以供进一步使用。 希望这有感知, 祝您愉快, Kan ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 我们还没有收到板,因此我们正在尝试通过至少了解最低配置来最大限度地缩短启动时间。 使用单焊盘 SPI 还可以简化设置,因为我们不需要用速度来验证基本功能。 使用安全配置工具制作 fcb 是否需要在物理板上测试配置? 我试着按照数据表的要求,用单焊盘 spi 命令组装了这个最小的 FCB。 这看起来像是一个工作设置,还是我误解了什么? 另外,启动 ROM 是否使用 SFDP 来覆盖这些设置,还是只有 cfx 驱动程序在刷新代码时才会这样做? 我们非常感谢你们的帮助,因为我们收到定制设备的时间很紧。 const flexspi_nor_config_t mt25ql_minimal_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, // Identifier for FCB .version = FLEXSPI_CFG_BLK_VERSION, // FCB version // Use internal loopback for read sampling (no DQS pad) .readSampleClksrc=kFlexSpiReadSampleClk_InternalLoopback, .csHoldTime = 3, // Chip Select hold time .csSetupTime = 3, // Chip Select setup time // No device mode configuration (no QE bit needed) .deviceModeCfgEnable = 0, .deviceModeType = 0, .deviceModeSeq = {0, 0}, .deviceModeArg = 0, .configCmdEnable = 0, // No extra config commands // Misc options: // - Bit 4: Enable second pinmux group .controllerMiscOption = (1 << kFlexSpiMiscOffset_SecondPinMux), .deviceType = kFlexSpiDeviceType_SerialNOR, // Serial NOR flash .sflashPadType = kSerialFlash_1Pad, // Standard SPI mode .serialClkFreq = kFlexSpiSerialClk_60MHz, // 60 MHz clock .sflashA1Size = 256 * 1024 * 1024, // 256 MiB flash size .dataValidTime = {16, 16}, // Default timing .busyOffset = 0, // Status register offset .busyBitPolarity = 1, // Busy bit is active high // Lookup Table (LUT) for basic SPI commands .lookupTable = { // LUT[0] - Fast Read (0x0B) // 1. Send 0x0B command on 1 pad // 2. Send 24-bit address on 1 pad // 3. Send 8 dummy cycles // 4. Read data on 1 pad [0] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x0B, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18), [1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_DUMMY, kFLEXSPI_1PAD, 0x08, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04), // LUT[4] - Write Enable (0x06) [4] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0), // LUT[5] - Page Program (0x02) [5] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x02, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18), [6] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0), // LUT[7] - Sector Erase (0xD8) [7] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xD8, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18), // LUT[8] - Read Status Register (0x05) [8] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x01), }, }, .pageSize = 256, // Page size in bytes .sectorSize = 64 * 1024, // Sector size in bytes .blockSize = 256 * 1024, // Block size in bytes .isUniformBlockSize = true, // All blocks are same size }; Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 你好@anbn, 您是否在串行下载模式下连接了自定义板并按下了测试按钮?结果通过了吗?我认为查询和厘米垫应该是一体的,只有当你将其设置为四模式时,闪存才会使用 4 个垫来进行数据输入。 祝您愉快, Kan ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 嗨,Kan 谢谢你的链接--它有助于我的理解。 我正在尝试使用安全配置工具的模板来创建 FCB,但我经常收到这条消息。 我对四模式设置有点不确定--根据数据手册,进入四输入/输出模式由 35h 命令处理,而 35h 命令似乎不可用。 Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 嗨@mns, 我指的是 qspiflash_config,其中包括您提到的部分。 祝您愉快, Kan ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 感谢@Kan_Li的快速回复。关于声明: " ......让 FCB 保持原样,......." 我不明白你的意思?您是指离开 "lookupTable "结构吗(https://github.com/zephyrproject-rtos/zephyr/blob/88de138290b683c26abf81142756621a02169eb5/boards/nxp/mimxrt1170_evk/xip/evkbmimxrt1170_flexspi_nor_config.c#L52) 同时填写 "memConfig"(https://github.com/zephyrproject-rtos/zephyr/blob/88de138290b683c26abf81142756621a02169eb5/boards/nxp/mimxrt1170_evk/xip/evkbmimxrt1170_flexspi_nor_config.c#L26C3-L26C12)的其余部分结构作为 FCB 的基础? 再次感谢、 Martin Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 你好@anbn, 开发工具包中的驱动程序应与 EVK 一起使用,因此,如果您使用闪存设计的自定义板,而不是 EVK 上使用的部件,则还必须对闪存加载器进行自定义。我们为此提供了一份指南,详情请参阅https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/RT1170-flexSPI1-secondary-QSPI-flash-debug-flashdriver/tac-p/1938828#M222。 希望对你有所帮助、 祝您愉快, Kan ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 ------------------------------------------------------------------------------- Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 嗨,Kan 谢谢你的快速回复。我在马丁斯团队中负责同一个项目。 我们能否按原样使用 MIMXRT1170_FlexSPI2_A_SFDP_QSPI.cfx,还是需要为我们的闪存集成电路定制代码?我看到辅助针脚组的配置选项也是由 efuse 设置的,这是否多余? 驾驶员还有什么必须定制的吗? 具体而言 —— 我们需要设置 CONFIG_OPTION1 才能使用辅助引脚组并重新编译 imxrt117x_flexSPI_SFDP 吗?(另外,该示例驱动程序是否包含板/项目中的任何内容?) 它需要使用我们的 pinmux 和/或与 MCUXpresso IDE 中的自定义板一起编译吗? 我们可以使用任何工具为我们的闪存 IC 和板生成有效的 flexspi_nor_config 吗? 我们正试图在提交之前尽可能多地消除不确定因素,因此非常感谢大家的帮助。 问候 Anders Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting 你好@mns、 是的,你的理解是正确的!就你而言,如果使用FlexSPI2第二引脚组来连接或非闪存,你必须为调试器开发一个自定义的闪存加载器,例如链接服务器,还需要像你提到的那样对efus进行调整,为你的应用程序使用合适的FCB,FCB还会安装flexspi实例和引脚组选择,因此,如果你只是对efuse进行编程并保持FCB原样,启动ROM可能会在 efuses 的帮助下找到闪光灯,但在检查 FCB 部分后会被引导到错误的地方提取应用程序。 如果您想添加更多 LUT,可以通过应用程序代码进行更新,evkmimxrt1170_flexspi_nor_polling_transfer_cm7 的 sdk 演示为这一主题提供了一个示例。 希望这有感知, 祝您愉快, Kan ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 -------------------------------------------------------------------------------
查看全文
关于 MCU SDK SBOM? 你好,恩智浦、 请问恩智浦是否为其 MCU SDK 提供官方 SBOM?例如,SDK 版本 24.12。 Re: About MCU SDK SBOM? 你好@Omar_hong、 当然,我会为您创建一个私人案例。 BRs, 西莱斯特 Re: About MCU SDK SBOM? 你好@Celeste_Liu 感谢您的反馈, 为了保护客户隐私,您能否私下给我留言? Re: About MCU SDK SBOM? 你好@Omar_hong、 谢谢您的帖子。 我需要就这个问题询问相关的内部团队。为此,能否请您帮助提供以下信息? 1.您使用的是什么产品? 2.您的最终应用名称。 BRs, 西莱斯特
查看全文
由于大量预分配,Matter PacketBuffer 池为空 我正在开发 Matter 设备 FRDM-RW612。我注意到,有时 PacketBuffer 池会空。我将日志附在这里 [29889] [INFO] [IN] CASE Server received Sigma1 message . Starting handshake. EC 0x2005cd68 [29898] [INFO] [SC] Received Sigma1 msg [29901] [TRACE] [SC] Found MRP parameters in the message [29907] [TRACE] [SC] Peer assigned session key ID 582 [29912] [INFO] [DL] KVS, get key id:: f/1/g [29916] [INFO] [DL] KVS, get key id:: f/1/k/0 [29922] [INFO] [SC] CASE matched destination ID: fabricIndex 1, NodeID 0x00000000000022B8 [30054] [INFO] [CSL] LWIP:PacketBuffer::New Request size=870, aAvailable=758, aReserved=112, MaxSize=64000 [30064] [INFO] [EM] <<< [E:14060r S:0 M:111174838] (U) Msg TX from 0000000000000000 to 0:0ED014D28E28AE99 [0000] [TCP:[FE80::FE84:A7FF:FE51:F90A]:40004] --- Type 0000:31 (SecureChannel:CASE_Sigma2) (B:748) [30083] [INFO] [SC] Sent Sigma2 msg [30087] [ERR] [DL] Long dispatch time: 219 ms, for event type 3 [30092] [TRACE] [DL] DeviceEventCallback: 0x8016 [30214] [INFO] [EM] >>> [E:14060r S:0 M:239333775] (U) Msg RX from 0:0ED014D28E28AE99 [0000] to 0000000000000000 --- Type 0000:32 (SecureChannel:CASE_Sigma3) (B:594) [30229] [TRACE] [EM] Found matching exchange: 14060r, Delegate: 0x2005bd74 [30236] [INFO] [SC] Received Sigma3 msg [30288] [INFO] [DL] KVS, get key id:: g/sri [30293] [ERR] [DL] KVS, key not found! [30296] [INFO] [DL] KVS, put key id:: f/1/s/000000000001B669 [30304] [INFO] [DL] KVS, put key id:: g/s/HuzH83xHX2H4MZ6LiDY1cw== [30312] [INFO] [DL] KVS, put key id:: g/sri [30318] [TRACE] [SC] Sending status report. Protocol code 0, exchange 14060 [30325] [INFO] [CSL] LWIP:PacketBuffer::New Request size=120, aAvailable=8, aReserved=112, MaxSize=64000 [30334] [INFO] [EM] <<< [E:14060r S:0 M:111174839] (U) Msg TX from 0000000000000000 to 0:0ED014D28E28AE99 [0000] [TCP:[FE80::FE84:A7FF:FE51:F90A]:40004] --- Type 0000:40 (SecureChannel:StatusReport) (B:30) [30354] [INFO] [SC] SecureSession[0x2005af10, LSID:25190]: State change 'kEstablishing' --> 'kActive' [30363] [TRACE] [IN] SecureSession[0x2005af10]: Activated - Type:2 LSID:25190 [30371] [TRACE] [IN] New secure session activated for device <000000000001B669, 1>, LSID:25190 PSID:582! [30380] [INFO] [IN] CASE Session established to peer: <000000000001B669, 1> [30387] [TRACE] [IN] SecureSession[0x2005aff0]: Allocated Type:2 LSID:25191 [30394] [TRACE] [SC] Allocated SecureSession (0x2005aff0) - waiting for Sigma1 msg [30402] [ERR] [DL] Long dispatch time: 114 ms, for event type 2 [30408] [INFO] [CSL] LWIP:PacketBuffer::New Request size=163, aAvailable=51, aReserved=112, MaxSize=64000 [30418] [INFO] [EM] >>> [E:14061r S:25190 M:250050934] (S) Msg RX from 1:000000000001B669 [578C] to 00000000000022B8 --- Type 0001:08 (IM:InvokeCommandRequest) (B:59) [30433] [TRACE] [EM] Handling via exchange: 14061r, Delegate: 0x2005723c [30440] [TRACE] [DMG] Received command for Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0004 [30449] [INFO] [FS] GeneralCommissioning: Received CommissioningComplete [30455] [INFO] [DL] KVS, put key id:: g/fs/c [30461] [INFO] [DL] KVS, put key id:: f/1/m [30467] [INFO] [FP] Metadata for Fabric 0x1 persisted to storage. [30473] [INFO] [DL] KVS, put key id:: f/1/o [30479] [INFO] [DL] KVS, put key id:: f/1/n [30485] [INFO] [DL] KVS, put key id:: f/1/i [30492] [INFO] [DL] KVS, put key id:: f/1/r [30498] [INFO] [TS] Committing Last Known Good Time to storage: 2024-08-17T05:19:27 [30506] [INFO] [DL] KVS, put key id:: g/lkgt [30510] [INFO] [DL] KVS, put key id:: g/fidx [30516] [INFO] [ZCL] OpCreds: Fabric index 0x1 was committed to storage. Compressed Fabric Id 0x51EB0A41B403578C, FabricId 0000000000000001, NodeId 00000000000022B8, VendorId 0xFFF1 [30532] [INFO] [DL] KVS, deleting key id:: g/fs/c [30538] [INFO] [FS] GeneralCommissioning: Successfully commited pending fabric data [30545] [INFO] [FS] Fail-safe cleanly disarmed [30550] [TRACE] [DMG] Endpoint 0, Cluster 0x0000_0030 update version to e5eec16d [30557] [INFO] [DL] endpointId 0x0000_0000 clusterId 0x0000_0030 attribute ID: 0x0000_0000 Type: 39 Value: 0, length 8 [30568] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30578] [ERR] [CSL] PacketBuffer: pool EMPTY. [30582] [ERR] [DMG] Adding response failed: b. Returning failure instead. [30590] [ERR] [DMG] Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0004 status 0x01 (no additional context) [30599] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30609] [ERR] [CSL] PacketBuffer: pool EMPTY. [30614] [ERR] [DMG] Failed to add command status: b [30619] [TRACE] [DMG] Decreasing reference count for CommandHandlerImpl, remaining 1 [30626] [TRACE] [DMG] Decreasing reference count for CommandHandlerImpl, remaining 0 [30634] [ERR] [DMG] Failed to finalize command response: 3 [30640] [TRACE] [DMG] Command handler moving to [AwaitingDe] [30645] [ERR] [DMG] Failed to send InvokeResponseMessage [30650] [TRACE] [DMG] Command response sender moving to [AllInvokeR] [30657] [ERR] [DL] Long dispatch time: 249 ms, for event type 3 [30663] [TRACE] [DL] DeviceEventCallback: 0x8018 [30667] [INFO] [SVR] Commissioning completed successfully [30673] [INFO] [DIS] Updating services using commissioning mode 0 [30679] [INFO] [DIS] CHIP minimal mDNS started advertising. [30685] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30695] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30705] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30716] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30726] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30736] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30746] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30757] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30767] [TRACE] [DL] Using WiFi MAC for hostname [30772] [INFO] [DIS] Advertise operational node 51EB0A41B403578C-00000000000022B8 [30779] [TRACE] [DIS] Responding with _matter._tcp.local [30784] [TRACE] [DIS] Responding with 51EB0A41B403578C-00000000000022B8._matter._tcp.local [30793] [TRACE] [DIS] Responding with 51EB0A41B403578C-00000000000022B8._matter._tcp.local [30801] [TRACE] [DIS] Responding with C095DA0152EF.local [30806] [TRACE] [DIS] Responding with C095DA0152EF.local [30812] [TRACE] [DIS] Responding with _I51EB0A41B403578C._sub._matter._tcp.local [30819] [INFO] [DIS] CHIP minimal mDNS configured as 'Operational device'; instance name: 51EB0A41B403578C-00000000000022B8. [30830] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30841] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30851] [INFO] [CSL] LWIP:PacketBuffer::New Request size=624, aAvailable=512, aReserved=112, MaxSize=64000 [30861] [INFO] [CSL] LWIP:PacketBuffer::New Request size=1536, aAvailable=1424, aReserved=112, MaxSize=64000 [30871] [INFO] [DIS] mDNS service published: _matter._tcp [30877] [TRACE] [DL] CHIPoBLE advertising set to off [30882] [TRACE] [IN] Expiring all PASE sessions [30886] [TRACE] [IN] SecureSession[0x2005ae30]: MarkForEviction Type:1 LSID:25189 [30894] [INFO] [SC] SecureSession[0x2005ae30, LSID:25189]: State change 'kActive' --> 'kPendingEviction' [30903] [TRACE] [IN] SecureSession[0x2005ae30]: Released - Type:1 LSID:25189 [30910] [TRACE] [IN] Clearing BLE pending packets. [30915] [INFO] [BLE] Releasing end point's BLE connection back to application. [30922] [INFO] [DL] Closing BLE GATT connection (ConnId 00) [30930] [TRACE] [ZCL] Commissioning complete, notify platform driver to persist network credentials. [30939] [INFO] [DL] KVS, put key id:: wifi-ssid [30944] [INFO] [DL] KVS, put key id:: wifi-pass [30948] [TRACE] [DL] DeviceEventCallback: 0x800f [30953] [ERR] [DL] Long dispatch time: 286 ms, for event type 32783 [30988] [INFO] [DL] Current number of connections: 0/1 [30993] [INFO] [DL] BLE GAP connection terminated (reason 0x16) [30999] [TRACE] [BLE] No endpoint for connection error [31004] [TRACE] [DL] DeviceEventCallback: 0x8007 下面是重点部分: [30418] [INFO] [EM] >>> [E:14061r S:25190 M:250050934] (S) Msg RX from 1:000000000001B669 [578C] to 00000000000022B8 --- Type 0001:08 (IM:InvokeCommandRequest) (B:59) [30433] [TRACE] [EM] Handling via exchange: 14061r, Delegate: 0x2005723c [30440] [TRACE] [DMG] Received command for Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0004 [30449] [INFO] [FS] GeneralCommissioning: Received CommissioningComplete [30455] [INFO] [DL] KVS, put key id:: g/fs/c [30461] [INFO] [DL] KVS, put key id:: f/1/m [30467] [INFO] [FP] Metadata for Fabric 0x1 persisted to storage. [30473] [INFO] [DL] KVS, put key id:: f/1/o [30479] [INFO] [DL] KVS, put key id:: f/1/n [30485] [INFO] [DL] KVS, put key id:: f/1/i [30492] [INFO] [DL] KVS, put key id:: f/1/r [30498] [INFO] [TS] Committing Last Known Good Time to storage: 2024-08-17T05:19:27 [30506] [INFO] [DL] KVS, put key id:: g/lkgt [30510] [INFO] [DL] KVS, put key id:: g/fidx [30516] [INFO] [ZCL] OpCreds: Fabric index 0x1 was committed to storage. Compressed Fabric Id 0x51EB0A41B403578C, FabricId 0000000000000001, NodeId 00000000000022B8, VendorId 0xFFF1 [30532] [INFO] [DL] KVS, deleting key id:: g/fs/c [30538] [INFO] [FS] GeneralCommissioning: Successfully commited pending fabric data [30545] [INFO] [FS] Fail-safe cleanly disarmed [30550] [TRACE] [DMG] Endpoint 0, Cluster 0x0000_0030 update version to e5eec16d [30557] [INFO] [DL] endpointId 0x0000_0000 clusterId 0x0000_0030 attribute ID: 0x0000_0000 Type: 39 Value: 0, length 8 [30568] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30578] [ERR] [CSL] PacketBuffer: pool EMPTY. [30582] [ERR] [DMG] Adding response failed: b. Returning failure instead. 收到的实际消息,invokeCommandResponse 为 59 字节,也可能是调用完成命令。但是,为什么这里的预分配要求几乎是 64KB? 我还在这里添加了 PacketBuffer::New 函数,用于跟踪 PacketBufferHandle PacketBufferHandle::New(size_t aAvailableSize, uint16_t aReservedSize) { // Sanity check for kStructureSize to ensure that it matches the PacketBuffer size. static_assert(PacketBuffer::kStructureSize == sizeof(PacketBuffer), "PacketBuffer size mismatch"); // Setting a static upper bound on kStructureSize to ensure the summation of all the sizes does not overflow. static_assert(PacketBuffer::kStructureSize <= UINT16_MAX, "kStructureSize should not exceed UINT16_MAX."); // Setting a static upper bound on the maximum buffer size allocation for regular sized messages (not large). static_assert(PacketBuffer::kMaxSizeWithoutReserve <= UINT16_MAX, "kMaxSizeWithoutReserve should not exceed UINT16_MAX."); #if INET_CONFIG_ENABLE_TCP_ENDPOINT // Setting a static upper bound on the maximum buffer size allocation for // large messages. #if CHIP_SYSTEM_CONFIG_USE_LWIP // LwIP based systems are internally limited to using a u16_t type as the size of a buffer. static_assert(PacketBuffer::kLargeBufMaxSizeWithoutReserve <= UINT16_MAX, "In LwIP, max size for Large payload buffers cannot exceed UINT16_MAX!"); #else // Messages over TCP are framed using a length field that is 32 bits in // length. static_assert(PacketBuffer::kLargeBufMaxSizeWithoutReserve <= UINT32_MAX, "Max size for Large payload buffers cannot exceed UINT32_MAX"); #endif // CHIP_SYSTEM_CONFIG_USE_LWIP #endif // INET_CONFIG_ENABLE_TCP_ENDPOINT // Ensure that aAvailableSize is bound within a max and is not big enough to cause overflow during // subsequent addition of all the sizes. if (aAvailableSize > UINT32_MAX) { ChipLogError(chipSystemLayer, "PacketBuffer: AvailableSize of a buffer cannot exceed UINT32_MAX. aAvailableSize = 0x" ChipLogFormatX64, ChipLogValueX64(static_cast (aAvailableSize))); return PacketBufferHandle(); } // Cast all to uint64_t and add. This cannot overflow because we have // ensured that the maximal value of the summation is // UINT32_MAX + UINT16_MAX + UINT16_MAX, which should always fit in // a uint64_t variable. uint64_t sumOfSizes = static_cast (aAvailableSize) + static_cast (aReservedSize) + static_cast (PacketBuffer::kStructureSize); uint64_t sumOfAvailAndReserved = static_cast (aAvailableSize) + static_cast (aReservedSize); // Ensure that the sum fits in a size_t so that casting into size_t variables, // viz., lBlockSize and lAllocSize, is safe. if (!CanCastTo (sumOfSizes)) { ChipLogError(chipSystemLayer, "PacketBuffer: Sizes of allocation request are invalid. (aAvailableSize = " ChipLogFormatX64 ", aReservedSize = " ChipLogFormatX64 ")", ChipLogValueX64(static_cast (aAvailableSize)), ChipLogValueX64(static_cast (aReservedSize))); return PacketBufferHandle(); } #if CHIP_SYSTEM_CONFIG_USE_LWIP // LwIP based APIs have a maximum buffer size of UINT16_MAX. Ensure that // limit is met during allocation. if (sumOfAvailAndReserved > UINT16_MAX) { ChipLogError(chipSystemLayer, "LwIP based systems require total buffer size to be less than UINT16_MAX!" "Attempted allocation size = " ChipLogFormatX64, ChipLogValueX64(sumOfAvailAndReserved)); return PacketBufferHandle(); } #endif // CHIP_SYSTEM_CONFIG_USE_LWIP // sumOfAvailAndReserved is no larger than sumOfSizes, which we checked can be cast to // size_t. const size_t lAllocSize = static_cast (sumOfAvailAndReserved); PacketBuffer * lPacket; CHIP_SYSTEM_FAULT_INJECT(FaultInjection::kFault_PacketBufferNew, return PacketBufferHandle()); if (lAllocSize > PacketBuffer::kMaxAllocSize) { ChipLogError(chipSystemLayer, "PacketBuffer: allocation exceeding buffer capacity limits: %lu > %lu", static_cast (lAllocSize), static_cast (PacketBuffer::kMaxAllocSize)); return PacketBufferHandle(); } #if CHIP_SYSTEM_CONFIG_USE_LWIP // This cast is safe because lAllocSize is no larger than // kMaxSizeWithoutReserve, which fits in uint16_t. lPacket = static_cast ( pbuf_alloc(PBUF_RAW, static_cast (lAllocSize), CHIP_SYSTEM_PACKETBUFFER_LWIP_PBUF_TYPE)); SYSTEM_STATS_UPDATE_LWIP_PBUF_COUNTS(); ChipLogProgress(chipSystemLayer,"LWIP:PacketBuffer::New Request size=%u, aAvailable=%u, aReserved=%u, MaxSize=%u",lAllocSize,aAvailableSize,aReservedSize,PacketBuffer::kMaxAllocSize); #elif CHIP_SYSTEM_PACKETBUFFER_FROM_CHIP_POOL #if !CHIP_SYSTEM_CONFIG_NO_LOCKING && CHIP_SYSTEM_CONFIG_FREERTOS_LOCKING if (!sBufferPoolMutex.isInitialized()) { Mutex::Init(sBufferPoolMutex); } #endif LOCK_BUF_POOL(); lPacket = PacketBuffer::sFreeList; if (lPacket != nullptr) { PacketBuffer::sFreeList = lPacket->ChainedBuffer(); SYSTEM_STATS_INCREMENT(chip::System::Stats::kSystemLayer_NumPacketBufs); } UNLOCK_BUF_POOL(); ChipLogProgress(chipSystemLayer,"CHIP POOL:PacketBuffer::New Request size=%u",lAllocSize); #elif CHIP_SYSTEM_PACKETBUFFER_FROM_CHIP_HEAP // sumOfSizes is essentially (kStructureSize + lAllocSize) which we already // checked to fit in a size_t. const size_t lBlockSize = static_cast (sumOfSizes); lPacket = reinterpret_cast (chip::Platform::MemoryAlloc(lBlockSize)); SYSTEM_STATS_INCREMENT(chip::System::Stats::kSystemLayer_NumPacketBufs); ChipLogProgress(chipSystemLayer,"CHIP HEAP:PacketBuffer::New Request size=%u",lAllocSize); #else #error "Unimplemented PacketBuffer storage case" #endif if (lPacket == nullptr) { ChipLogError(chipSystemLayer, "PacketBuffer: pool EMPTY."); return PacketBufferHandle(); } lPacket->payload = lPacket->ReserveStart() + aReservedSize; lPacket->len = lPacket->tot_len = 0; lPacket->next = nullptr; lPacket->ref = 1; #if CHIP_SYSTEM_PACKETBUFFER_FROM_CHIP_HEAP lPacket->alloc_size = lAllocSize; #endif return PacketBufferHandle(lPacket); } Re: Matter PacketBuffer Pool Empty due to Large Pre-Allocation 示例为 all-clusters-app Re: Matter PacketBuffer Pool Empty due to Large Pre-Allocation 希望你也一切顺利。 设置在 Ubuntu 22.04 上,在 GN+Ninja 版本中 我遵循了以下命令 ~ git clone https://github.com/NXP/matter.git ~ cd matter ~ scripts/checkout_submodules.py --shallow --platform nxp --recursive ~ source ./scripts/activate.sh ~ ./third_party/nxp/nxp_matter_support/scripts/update_nxp_sdk.py --platform common ~ git submodule update --init --recursive ~ source ./scripts/activate.sh ~ cd examples/all-clusters-app/nxp/rt/rw61x ~ gn gen --args="chip_enable_wifi=true chip_inet_config_enable_tcp_endpoint=true board_version=\"frdm\"" out/debug ~ ninja -C out/debug 案件版本是发行版/v1.4.0,这是默认版本。 我使用 chip-tool onoff 在 --allow-large-payload true 测试芯片工具的大负载能力。 [30568] [INFO] [CSL] LWIP:PacketBuffer::New Request size=63940, aAvailable=63828, aReserved=112, MaxSize=64000 [30578] [ERR] [CSL] PacketBuffer: pool EMPTY. [30582] [ERR] [DMG] Adding response failed: b. Returning failure instead. 问题出现在 matter/src/app/CommandHandlerImpl.cpp 中。如下代码所示 const size_t commandBufferMaxSize = mpResponder->GetCommandResponseMaxBufferSize(); auto commandPacket = System::PacketBufferHandle::New(commandBufferMaxSize); VerifyOrReturnError(!commandPacket.IsNull(), CHIP_ERROR_NO_MEMORY); mpresponder-> getCommandResponseMaxBufferSize () 始终返回大约 63,940 字节,这个 PacketBuffer 用于同一 .cpp 中的两个函数 invokeResponderResponse和PrepareStatus锉刀 为了解决这个问题,我将 matter/src/system/SystemConfig.h 中的 CHIP_SYSTEM_CONFIG_MAX_LARGE_BUFFER_SIZE_BYTES 从 64 KB 改为 10 KB、因为我的邮件从不超过 10 KB。不过,为发送状态报告或 InvokeResponse 分配最大大小的 PacketBuffer 仍然是高估了。 Re: Matter PacketBuffer Pool Empty due to Large Pre-Allocation 你好@farazahmed8,希望你一切都好。 为了尝试重现你的问题,你能否分享一下你的 Matter 和 SDK 发布版本以及你正在使用的示例?另请确认你使用的是 MCUXpresso VS Code 扩展程序还是 Linux 上的 GN/Ninja 版本。
查看全文
デバイスが安全な状態で s32k で EEPROM の書き込みと読み取りを行う EEPROM への書き込みと読み取りを試しましたが、デバイスが安全でない場合でも動作します。ただし、FSEC ビットを介してデバイス セキュリティを有効にし、16 進ファイルをフラッシュすると、EEPROM は動作を停止します。 Re: EEPROM write and read in s32k while device is secure こんにちは@Saranraj 、 フラッシュ構成フィールドでは、エミュレートされた EEPROM の保護もCAN設定できます。 MCU が安全な状態で 0x400-0x40F メモリの内容を送信するために使用できる通信インターフェースはありますか? よろしくお願いいたします。 ダニエル
查看全文
S32k311+MC33774A 等待 Phy 响应时控制停止 我正在使用 S32K311 MCU 和 MC33774A AFE 制作一个 FreeRTOS 电池管理系统 应用程序。与 AFE 的通信是通过中断模式下的直接 SPI 驱动器进行的。 此外,我还在中断模式下使用 CAN 端口与车辆和充电器通信。当我以少于 100 毫秒的间隔向任何端口发送 CAN 数据时,代码会在以下位置停止运行 CAN ISR 如下 可能出了什么问题? Re: S32k311+MC33774A Control halts while waiting for Phy response 将 CAN ISR 的优先级设置得比 SPI 低,就能解决问题。现在 MCU 不会停止,CAN 任务在运行时不会丢失数据。 Re: S32k311+MC33774A Control halts while waiting for Phy response 您好, 如果 SPI 因 CAN 负载过高而被阻塞,这很可能意味着 CAN ISR 占用了太多 CPU 时间,或使其他中断(尤其是 SPI,它也是中断驱动的)处于饥饿状态。这可能会导致 SPI 事务永远无法完成,从而使您的 TD_Wait () 函数停留在轮询循环中。 CAN ISR 优先级可能过高,导致 SPI ISR 无法执行。 解锁 SPI 的办法是降低 CAN 中断优先级,将其设置为低于 SPI 且低于 configMAX_SYSCALL_INTERRUPT_PRIORITY。 这样,SPI ISR 就能在需要时抢先 CAN ISR。 下面是一些其他提示...... - 减少 CAN ISR 负载 尽量减少 CAN ISR 中的工作。通过队列将日志记录和处理移至 FreeRTOS 任务。 -将 DMA 用于 SPI 如果应用程序支持,请将 SPI 切换到 DMA 模式以减少 ISR 依赖性并提高吞吐量。 -将超时添加到 TD_Wait () 通过添加超时或使用 FreeRTOS 同步(例如信号量)来 防止无限阻塞。 -我的 ISR 执行时间 使用逻辑分析器或 MCU 跟踪工具来测量 ISR 持续时间并确定瓶颈。 BR, Petr
查看全文
S32k311+MC33774A 制御はPhy応答を待つ間停止します S32K311 MCU と MC33774A AFE を使用して FreeRTOS BMS アプリケーションを作成しています。AFE との通信は、割り込みモードの直接 SPI ドライバを介して行われます。 それに加えて、車載と充電器との通信に割り込みモードで CAN ポートを使用しています。いずれかのポートで100ms未満の間隔でCANデータを送信すると、コードは停止します。 CAN ISRは次のようになります 何が問題なのか、そしてどのように対処すべきか Re: S32k311+MC33774A Control halts while waiting for Phy response CAN ISR の優先度を SPI よりも低く設定すると、問題は解決しました。現在、MCU は停止しておらず、CAN タスクはデータ損失なしで実行されています。 Re: S32k311+MC33774A Control halts while waiting for Phy response こんにちは、 CAN 負荷が高いために SPI がブロックされている場合、CAN ISR が CPU 時間を過剰に消費しているか、他の割り込み (特に割り込み駆動型の SPI) が不足していることを意味している可能性があります。これにより、SPI トランザクションが完了せず、TD_Wait() 関数がポーリング ループから抜け出せなくなるCANがあります。 CAN ISR の優先度が高すぎるため、SPI ISR の実行が妨げられている可能性があります。 SPI のブロックを解除する解決策としては、CAN 割り込み優先度を下げ、SPI よりも低く、configMAX_SYSCALL_INTERRUPT_PRIORITY よりも低く設定することが考えられます。 これにより、SPI ISR は必要に応じて CAN ISR をプリエンプトできるようになります。 以下にいくつかの追加のヒントを示します... - CAN ISR負荷を軽減 CAN ISR で行われる作業を最小限に抑えます。ログ記録とプロセッシングをキュー経由で FreeRTOS タスクに移動します。 - SPIにDMAを使用する アプリでサポートされている場合は、SPI を DMA モードに切り替えて ISR への依存を減らし、スループットを向上させます。 - TD_Wait() にタイムアウトを追加する タイムアウトを追加するか、FreeRTOS 同期 (セマフォなど) を使用することで、無限ブロックを防止します。 - ISR実行時間のプロファイル ロジック アナライザーまたは MCU トレース ツールを使用して、ISR 期間を測定し、ボトルネックを特定します。 BR、ペトル
查看全文
动态斜坡饱和度趋于零的问题 我正在使用 RTCESL 4.62 版实现 DRamp 功能,当绝对斜坡值下降时,会出现饱和问题。 根据文档,停止标志会使斜坡值转向给定的实例,但在我所做的实现中却不起作用。 我两种都试过。正请求斜坡和负请求斜坡。 是否存在已知问题或其他原因导致坡道不遵守停止标志? Re: Dynamic ramp saturation issue towards zero 你好@Harry_Zhang、 我们只运行 gflib_DRAMP _F16 和 gflib_DRAMP_F32,因为我们的软件仍然基于较旧的控制器,不支持浮点单元。 BR 伦纳特 Re: Dynamic ramp saturation issue towards zero 你好@LEGR 您只需修复 GFLIB_DRamp_FLT 并重建函数库,还是只需修复应用程序中使用的 GFLIB_DRamp_F16、GFLIB_DRamp_F32 函数? 如果所有 3 个 DRamp 都需要修理,我们估计下周就会送去重建库。 BR 哈利 Re: Dynamic ramp saturation issue towards zero 你好@LEGR 我们已经重现并修复了这个问题。 下一个版本将等待一段时间。 因此,我们要为您重新编译库。 BR 哈利 Re: Dynamic ramp saturation issue towards zero 你好@Harry_Zhang、 我想知道,您需要的信息是什么时候可以重现这个问题。我已经花了相当长的时间,让你真正看看所描述的行为。 我正在使用的编译器是: arm-none-eabi-gcc(GNU Arm Embedded Toolchain 10.3-2021.07)10.3.1 20210621(版本) BR 伦纳特 Re: Dynamic ramp saturation issue towards zero 你好@LEGR 请问您使用的是什么编译器? BR 哈利 Re: Dynamic ramp saturation issue towards zero 你好@LEGR 我们可以重现这个问题。 我们目前正在内部调查这个问题,如果有任何进展,我会及时通知您。感谢您提供的信息。 BR 哈利 Re: Dynamic ramp saturation issue towards zero 你好@Harry_Zhang、 我使用 RTCESL 4.8.1 版 CM33F 尝试了斜坡,但结果还是一样。 只有当绝对斜坡值增加时,饱和才会起作用。 BR Lennart Re: Dynamic ramp saturation issue towards zero 你好@LEGR 最新的 RTCESL 不会单独在恩智浦网站上发布。 您可以从 GIThub (nxp-mcuxpresso/rtcesl:恩智浦实时控制嵌入式软件库) BR 哈利 Re: Dynamic ramp saturation issue towards zero 你好@Harry_Zhang、 遗憾的是,我只能找到 CM33F 的 4.7.1 版本。 实时控制嵌入式软件电机控制和功率转换库|恩智浦半导体 在哪里可以找到 4.8.1 版? 目前,我们使用的是 4.6.3 版,而 4.7.1 版的唯一变化是使用新的编译器重新编译 KEIL 库。 我附上了用于测试该功能的代码。 问候 Lennart Re: Dynamic ramp saturation issue towards zero 你好@LEGR 我试用了 CM33F 的 RTCESL 4.8.1 版,没有发现您提到的问题。请尝试使用最新的 RTCESL 库。 请将代码发给我,以便我帮您分析。 BR 哈利 Re: Dynamic ramp saturation issue towards zero 嗨,@Harry_Zhang、 我们使用的是 LPC5534JBD100。 问候 Lennart Re: Dynamic ramp saturation issue towards zero 你好@LEGR 请问您使用的是哪种芯片? BR 哈利
查看全文
DS 3.6.3不包括完整的 MSYS2? 刚刚从 Design Studio 3.6.1 更新到 3.6.3(全新安装),在窗户上。现在我的版本系统找不到 mingw gcc 了: S32DS.3.6.3/S32DS/build_tools/msys32/mingw32/bin/i686-w64-mingw32-gcc.exe 确实没有。 DS 3.6.1 和 DS 3.6.3 的版本说明两者都声称设计工作室包括"MSYS2 2022.06-1。" 、因此版本相同,我认为 DS 3.6.3 不会有变化、然而,比较两个 DS 版本的 msys32 文件夹后发现,除了缺少 gcc 之外,还有很多不同之处。 这是故意的吗? 会有 DS 3.6.4 吗?"维修" ? 我是否可以将 MSys32 文件夹从我的 DS3.6.1 安装中复制到我的 DS3.6.3 安装中,作为一种变通办法? Re: DS 3.6.3 does not including full MSYS2? 你好、 抱歉耽搁了。在 S32DS v3.6.3 及更高版本中,完整的 MSYS2 已被移除——只剩下构建工具所需的部件。如果您需要完整的 msys2,可以自行安装。
查看全文
MCXN947: PWM SDKs コンポーネントの追加エラー NXPチームの皆様 次の例を確認しています: https://github.com/nxp-appcodehub/dm-fashion-mnist-recognition-on-mcxn947/tree/df78550534b2a30410f56311cad05eb18956ed16 この例は私の FRDM-MCXN947 でうまく動作します。「SDKs コンポーネントの管理」ツールを使用して PWM SDKs コンポーネントを 1 つ追加しようとすると、多くのエラーが発生してコンパイルが中断されます。 この状況を解決する方法はあるでしょうか? ちなみに、私はMCUXpressio IDE 24.9とSDKバージョン2.16.1を使用しています。 ありがとうございます。 MCX N Re: MCXN947: Erros Adding PWM SDK Components こんにちは@wklee このプロジェクトに pwm ドライバを手動で追加してみませんか? BR ハリー Re: MCXN947: Erros Adding PWM SDK Components GitHub から例をダウンロードし、mcuxpresso にインポートしました。 次に、SDK マネージャを通じて PWM ドライバを追加してみます。 ソースコードの更新を要求されたので、同意しました。その後、多くのコンパイルが中断されました。 ありがとうございます。 Re: MCXN947: Erros Adding PWM SDK Components こんにちは@wklee 新しいプロジェクトを作成していただけますか? この問題を再現するにはCANでしょうか? BR ハリー
查看全文
LLCE LIN interrupt S32G3 has 4 LLCE lin channels, I configured Lin1 channel as slave and Lin0, 2, 3 as master. I need to verify the slave's receive response function. I have configured and enabled Lin1's interrupt in EB, the callback function is Lin_CmdFromLlceIsr, when I send a Lin message to Lin1, Lin1 does not enter the interrupt response, only when I enable Lin2 interrupt instead, it can enter the interrupt, Lin1 will give a response at this time, why is this happening? Re: LLCE LIN interrupt Hello, @pmboat  Thanks for your reply. By default, The Lin LLCE firmware is running on the internal CORE 2, so that the LLCE_INT2 is used for LLCE LIN cases. BR Chenyin Re: LLCE LIN interrupt Yes, thanks for the reply. The packages I use are: 1. SW32G_RTD_4.4_5.0.0_QLP03 2. S32G_LLCE_1_0_10 The chip is s32g399a. Re: LLCE LIN interrupt Hello, @pmboat  Thanks for your post. 1. Seems you are working with LLCE LIN? is it right? 2. Which version RTD/LLCE FW you are working with?  BR Chenyin
查看全文
S32K MC Devkit 软件在特定速度下的电机控制异常 你好,我正在使用 S32K BLDC/PMSM 开发套件中的固件(特别是 PMSM FOC 2Sh 固件)在空载条件下运行 BLDC 电机。在操作电机时,我注意到某些转速(如 2000、3000 和 4000)下的图形与其他转速(如 2500 和 3500)下的图形不同,后者通常遵循更一致的模式。使用转速计测量时,实际转速通常与目标转速一致,但在特定转速下,电机无法准确保持所需的转速,尽管误差不是很大。(例如 ±10 RPM)您能解释一下为什么会出现这个问题吗? Set RPM to 2000将转速设置为 2000 Set RPM to 2500将转速设置为 2500 Set RPM to 3000将转速设置为 3000 Set RPM to 3500将转速设置为 3500 Set RPM to 4000将转速设置为 4000 Re: Anomaly motor control at certain speed on S32K MC Devkit software 感谢您关注我们的产品并为我们的社区做出贡献。 似乎是电机参数调整问题... 根据 S32K BLDC/PMSM 开发套件的不同,默认使用Sunrise 电机 42BLY3A78-24110或Linix 45ZWN24-40 电机,并使用以下参数文件(例如): 如果更换电机,必须输入相应的电气参数,并调整不同控制方案的参数。 我建议您将以下培训作为参考,学习如何使用我们的 MCAT 工具: 电机控制应用调谐 (MCAT) 工具 - PMSM 伺服调谐 希望这些信息对您有所帮助。
查看全文
i.MX93 EVK SDIO Wifi DTS リセットピン imx93 EVK で外部 uSD モジュール (TI cc33xx) を起動できません。linux-imx github リポジトリからカーネルと DTS ファイルをコンパイルしてビルドし、EVK 上の eMMC から起動して実行しました。 DTS では、M.2 SDIO インターフェース usdhc3 を無効にし、usdhc2 を変更して microSD スロットをサポートするようにしました。Wi-Fi カードの電源が入り、初期化を試みますが、モジュールのリセット ピンへの接続がないため、ファームウェアのロードに失敗します。 さまざまな設定を試しましたが、CANうまく動作しません。モジュールのリセット ピンを imx 93 EVK (11x11) の 40 ピン GPIO ヘッダーに接続しようとしています。コードと EVK リファレンス・マニュアルから判断すると、imx93 40 ピン ヘッダーは gpio2 としてアドレス指定されており、DTS 設定には次の関連部分があります。 reg_usdhc2_vmmc: regulator-usdhc2 { compatible = "regulator-fixed"; regulator-name = "WLAN_EN"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio2 7 GPIO_ACTIVE_HIGH>; /* * IW612 wifi chip needs more delay than other wifi chips to complete * the host interface initialization after power up, otherwise the * internal state of IW612 may be unstable, resulting in the failure of * the SDIO3.0 switch voltage. */ startup-delay-us = <20000>; enable-active-high; regulator-always-on; }; usdhc2_pwrseq: usdhc2_pwrseq { compatible = "mmc-pwrseq-simple"; // reset-gpios = <&pcal6524 20 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio2 7 GPIO_ACTIVE_LOW>; post-power-on-delay-ms = <10>; power-off-delay-us = <80>; }; &usdhc2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_wlan>; mmc-pwrseq = <&usdhc2_pwrseq>; vmmc-supply = <&reg_usdhc2_vmmc>; bus-width = <4>; keep-power-in-suspend; cap-power-off-card; non-removable; max-frequency = <10000000>; status = "okay"; #address-cells = <1>; #size-cells = <0>; wlcore: wlcore@2 { compatible = "ti,cc33xx"; reg = <2>; //interrupt-parent = <&pcal6524>; //interrupts = <5 IRQ_TYPE_EDGE_FALLING>; }; btti: btti@1 { compatible = "ti,cc33xxbt"; reg = <1>; }; }; pinctrl_reg_usdhc2_vmmc: regusdhc2vmmcgrp { fsl,pins = < MX93_PAD_SD2_RESET_B__USDHC2_RESET_B 0x31e >; }; モジュールのリセット ピンを 40 ピン ヘッダーのピン 26 にコネクテッドしています。何が間違っているのでしょうか?リセットには EVK の別のピンを使用する必要がありますか? Re: i.MX93 EVK SDIO Wifi DTS Reset Pin こんにちは! 良さそうですね。唯一の推奨事項は、有効化とリセットに 2 つの異なる PAD を使用することです。このCASE、SAM GPIO2_IO07 を使用します。 よろしくお願いいたします。 サラス。 Re: i.MX93 EVK SDIO Wifi DTS Reset Pin @Manuel_Salas返信ありがとうございます。これらの usdhc2 パーツは見た目が良いですか? reg_usdhc2_vmmc: regulator-usdhc2 { compatible = "regulator-fixed"; regulator-name = "WLAN_EN"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio2 7 GPIO_ACTIVE_HIGH>; /* * IW612 wifi chip needs more delay than other wifi chips to complete * the host interface initialization after power up, otherwise the * internal state of IW612 may be unstable, resulting in the failure of * the SDIO3.0 switch voltage. */ startup-delay-us = <20000>; enable-active-high; regulator-always-on; }; usdhc2_pwrseq: usdhc2_pwrseq { compatible = "mmc-pwrseq-simple"; // reset-gpios = <&pcal6524 20 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>; post-power-on-delay-ms = <10>; power-off-delay-us = <80>; }; &usdhc2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_wlan>, <&pinctrl_reg_usdhc2_vmmc>; mmc-pwrseq = <&usdhc2_pwrseq>; vmmc-supply = <&reg_usdhc2_vmmc>; bus-width = <4>; keep-power-in-suspend; no-1-8-v; cap-power-off-card; //non-removable; max-frequency = <10000000>; status = "okay"; #address-cells = <1>; #size-cells = <0>; wlcore: wlcore@2 { compatible = "ti,cc33xx"; reg = <2>; //interrupt-parent = <&pcal6524>; //interrupts = <5 IRQ_TYPE_EDGE_FALLING>; }; btti: btti@1 { compatible = "ti,cc33xxbt"; reg = <1>; }; }; pinctrl_reg_usdhc2_vmmc: regusdhc2vmmcgrp { fsl,pins = < MX93_PAD_GPIO_IO07__GPIO2_IO07 0x31e >; }; pinctrl_usdhc2_wlan: usdhc2wlangrp { fsl,pins = < MX93_PAD_CCM_CLKO1__GPIO3_IO26 0x31e >; }; または、&usdhc2 の pinctrl-0 とは異なる方法でアドレス指定する必要がありますか? Re: i.MX93 EVK SDIO Wifi DTS Reset Pin こんにちは@rtwheato とても順調にやっていると思います。 PAD に関して混乱が生じています。 40 ピン ヘッダーの PAD 26 は &gpio2 7 (EXP_GPIO_IO07) ですが、デバイス ツリー SD2_RESET_B では別の PAD を使用しています。 PIN 26 (EXP_GPIO_IO07) を使用する場合は、次のように変更する必要があります。 MX93_PAD_GPIO_IO07__GPIO2_IO07 よろしくお願いいたします。 サラス。
查看全文
Windows tool suggestions Hi NXP Team, We are using kw45 to send data to windows application can nxp suggest any sniffer tool to check data in windows. Please suggest if there are any tools to send data from KW45 to Any windows applications in which we can see data. Development Board Re: Windows tool suggestions Hello, Hope you are doing well. NXP does not currently offer a dedicated sniffer tool for Windows. You are welcome to use any sniffer tool of your preference that meets your requirements. Best Regards, Ana Sofia.
查看全文
Yocto 电路板支持包 imx-5.4.70-2.3.0构建 imx-image-full 时读取失败(spirv-tools / glslang) 你好 我正在尝试版本 Yocto 电路板支持包。 imx-5.4.70-2.3.0(分支:imx-linux-zeus,清单:imx-5.4.70-2.3.0.xml),但在版本 imx-image-full 的过程中遇到了提取失败。 这些错误是 ERROR: spirv-tools-git-r0 do_fetch:Fetcher failure for URL:git://github.com/KhronosGroup/SPIRV-Tools.git;name=spirv-tools;branch=main;protocol=https'。无法从任何来源获取 URL。 ERROR: glslang-git-r0 do_fetch:Fetcher failure for URL:git://github.com/KhronosGroup/glslang'.无法从任何来源获取 URL。 有趣的是,当我尝试在 bitbake 之外手动获取数据时,它却运行正常: git clonehttps://github.com/KhronosGroup/glslang.git git checkout 703bd9caab50b139428cea1aaff9974ebee5742e git clonehttps://github.com/KhronosGroup/SPIRV-Tools.git git checkout 9b3cc3e05337358d0bd9fec1b7a51e3cbf55312b 因此,网络连接良好,存储库可以访问。 有谁能帮我弄明白 Yocto 的 fetcher 为什么会在这里失效? 是否存在协议不匹配(git:// vs https://)? 我需要更新配方或为 zeus 分支应用补丁吗? 或者有什么建议的变通方法可以成功获取这些依赖项? 先行致谢。 评估板 Re: Yocto BSP imx-5.4.70-2.3.0 Fetch failure (spirv-tools / glslang) while building imx-image-full 你好@binil! 在查看文档时,我注意到 GitHub 不再支持 git:// 协议。要继续使用版本库,您需要切换到 HTTPS 或 SSH。 请相应更新版本库 URL。 致以最崇高的敬意, Chavira Re: Yocto BSP imx-5.4.70-2.3.0 Fetch failure (spirv-tools / glslang) while building imx-image-full 请查看附图 Re: Yocto BSP imx-5.4.70-2.3.0 Fetch failure (spirv-tools / glslang) while building imx-image-full 嗨,@binil、 感谢您联系恩智浦支持中心! 能否请您提供显示获取错误的日志文件?我想在我这边进行分析,以便更好地了解问题。 同时,我将尝试在我这边复制该错误。 致以最崇高的敬意, Chavira
查看全文
産業用センサーのエッジ処理とクラウド同期に関するアドバイスが必要です 皆さん、こんにちは。私は、エッジ デバイスが基本的な異常検知を処理するNXP i.MX RT MCUを使用したインダストリアル センサ プロジェクトに取り組んでいますが、より深い分析を行うために、クラウドとデータを同期する信頼性の高い方法も必要です。 主な課題は、コネクティビティの問題時にノードをオフラインで実行し、接続が回復したら安全に同期できる #ハイブリッド クラウドセットアップをビルディングすることです。安全な MQTT/HTTPS に最適な NXP コネクティビティモジュール、断続的な同期中にデータ損失を回避する方法、大規模なファームウェアの無線 (@FOTA) 更新の管理に関するヒントなどに関する提案を探しています。 同様のアーキテクチャやリファレンス・デザインの経験がある方がいらっしゃいましたら、アドバイスをいただければ幸いです。
查看全文
Copy: Get Partition ID not working correctly This post is a copy from here Hello NXP Support,  I was trying to use the Get Partition ID in your OsIf module and I was running into issues. I think I have 3 major issues.  1. The index you are trying to use is very unclear to me. In OsIf_apxMultiPartitionPredefinedConfig, I would have expected to see macros that are defined by the real OS, not actual numbers. I believe part of my issue is that you are defining this array according to the Index in EcuC for the Partition, but the OS I am using (ETAS) is generating the Partitions based alphabetically, so the numbers aren't lining up. Is generating a hardcoded list a long term strategy that I need to account for?  2. I seem to have differing Partitions indexes from the different modules. In Adc, the table that is generated is placing my partition 'ASILDCoreA' in index 2, but Spi puts that partition in the zero index. I'm not sure how I can make that work... since they are accessed via the exact same function from OsIf. I would expect all of these tables to have 'ASILDCoreA'  be in the same index. Can you confirm this is a defect in your generation code? I have attached a screenshot of the generated code and I have also attached my project.  3. You are attempting to use GetApplication() in OsIf inside your RTD modules to determine which partition they are executing from in EcuM_Driver_Init  the way I have my project structured. ETAS doesn't support calling any OS functions until the end of EcuM Init. So... Do you think the Mcal modules should be sequenced after the Os starts, like in an Rte_Init Task, or do you think ETAS should support GetApplication() before the OS starts? I'm unsure who needs to change their design assumptions... but today, no one trying to use MCU1 for GM will get it to work.  Regards,  Spencer Priority: MEDIUM RTD Source: NXP Internal Re: Copy: Get Partition ID not working correctly Hi @Luis_Garabo , 1.2, I tried to configure multicore for the release RTM600 but I didn't see any problem with Adc, Spi. What SW package are they using? 3. From Mcal view, the return value of GetApplicationID() from Os to identify the application identifier of the running task, so, from my point of view, you just need to make sure that you're getting the application identifier correctly to pass to OsIf_apxMultiPartitionPredefinedConfig[application identifier], like this: Best regards, Nhi
查看全文
在将 FW 加载到内部 PSRAM 时,计算 RT595 的内存映射和起始地址/偏移量。 尊敬的先生, 为了在通过基于 RT595 的 BLHost 将 FW 加载到内部 PSRAM 时找出起始地址/偏移量。在通过 BLHost 将 FW 加载到内部 PSRAM 时,什么是起始地址/偏移量,如何根据 FW 确定起始地址/偏移量?谢谢。 @RossZWChen Re: Figure out the memory map of RT595 and start address/offset while loading FW into internal PSRAM 你好@Mike_Sun 您在使用我们的 EVK 吗? 这是图 2 的快照。MIMXRT595-EVK 方框图(来自 UM12285 MIMXRT595-EVK 板用户手册)我重点介绍了 PSRAM 与 flexSPI0 或 FlexSPI0 的连接。 您是否将 PSRAM 连接到 FlexSPI0/1? 谢谢! 迪亚戈
查看全文