Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
S32N55: RTD Netc_Eth_Ip_ReadFrame 関数のホスト理由 RTDチームの皆さん、こんにちは。 お客様はSW32N_RTD_R21-11_1.8.0_CD05を使用します。RTU R コアの VSI1 を使用してフレームを受信し、受信タイムスタンプを取得したいと考えています。タイムスタンプ機能が有効になっています。 しかし、受信タイムスタンプを取得するには、以下のスクリーンショットのコードに示すように、フレームのホスト理由が NETC_ETH_IP_HOSTREASON_SW_PTP (マクロは 😎 である必要があることがわかりました。 ただし、Rx BD のホスト理由は 0 です。 NECT のドキュメントと RTD ユーザー マニュアルを確認しましたが、ホスト理由を 8 に設定する方法が見つかりませんでした。RTD チームは、Rx BD でホスト理由を 8 に設定する方法についてガイダンスを提供してもらえますか? ご返信よろしくお願いします。 よろしくお願いします、 ブリジット RTD Re: S32N55: host reason in RTD Netc_Eth_Ip_ReadFrame function こんにちは@Bridget 、 スイッチ ポットのホスト理由を設定する場所が 1 か所だけ見つかりましたが、デフォルトでは値 0 に設定されていました。SWチームが休暇から戻ったら聞いてみます。 よろしくお願いいたします。 ニ Re: S32N55: host reason in RTD Netc_Eth_Ip_ReadFrame function こんにちは@Bridget 、 SW は、ホスト理由を EthSwt で設定する必要があると応答し、関数 ReadFrame でホスト理由ステータスを返します。 これらのパラメータの説明については、EthSwt パッケージに添付されている RTD_ETHSWT_43_NETC_UM.pdf をお読みください。 よろしくお願いいたします。 ニ Re: S32N55: host reason in RTD Netc_Eth_Ip_ReadFrame function こんにちは@Bridget 、 このプロジェクトを送っていただけますか? よろしくお願いいたします。 ニ Re: S32N55: host reason in RTD Netc_Eth_Ip_ReadFrame function こんにちは、Nhiさん ご説明いただきありがとうございました。 もう一つ質問があります。GrayVIP CRS プロジェクトでは、EthSwtMgmtHostReason が常に 0 に設定されていることに気付きました。ただし、このプロジェクトで gPTP の例を実行すると、Netc_Eth_Ip_ReadFrame() で gPTP フレームのホスト理由が 8 であることがわかりました。そこで質問なのですが、おっしゃるとおり、EthSwtMgmtHostReason 以外に、ホスト理由の値に影響を与える可能性のある場所は他にありますか? よろしくお願いいたします。 ブリジット Re: S32N55: host reason in RTD Netc_Eth_Ip_ReadFrame function こんにちは@Bridget 、 はい、その通りです。申し訳ありませんが、再確認しませんでした。パラメーターは EthSwtIngressPortFilterHostReason になります。 よろしくお願いいたします。 ニ Re: S32N55: host reason in RTD Netc_Eth_Ip_ReadFrame function こんにちは@Bridget 、 ここに例を添付しました。 よろしくお願いいたします。 ニ
查看全文
S32K118 D-闪存和 EEEPROM 配置 您好, ,我是恩智浦生态系统的新成员,急需帮助。 我正在使用 S32K118 并一直在尝试使用 D-Flash 作为非易失性存储器,但无论我尝试哪种方式我似乎都无法让它起作用... 起初,我尝试对 FlexNVM 进行分区以模拟 EEEPROM,但总是出现 ACCERR。我试图在数据表中详细说明其中的所有原因,但我唯一能想到的是,该函数是写入 P-Flash 的,但必须在 RAM 中(" 程序分区命令不能从闪存中用上市,因为在 “程序分区” 命令执行期间无法访问 闪存资源。")。我也无法将函数写入 RAM,因为我遇到了一些链接器问题...... 既然不行,我就尝试手动写入 D-FLASH,但却出现了 MGSTAT 错误,这意味着它尚未被清除。当我试图清除它时,却出现了 HardFault...AI 认为这可能是没有再次从 RAM 运行功能的问题,但我无法像之前提到的那样让它工作...... ,我会在下面添加我的文件,非常感谢任何帮助。 Re: S32K118 D-flash and EEEPROM configuration 首先需要执行程序分区操作,根据 AN11983 第 2.2.2 节的要求配置 FlexRAM/FlexNVM。 S32DS SDK 中有一个示例代码(flash_partitioning_s32k144)。在对示例代码进行编程之前,它必须是空白的新设备或已执行大规模擦除操作。没有默认值,只需执行一次。 您也可以使用我以前做过的示例代码。它按照示例代码的意图将 FlexRAM 配置为 RAM,但它也将 FlexNVM 安装为 D-Flash: https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K146-Set-whole-FlexRAM-as-RAM-v0-0-S32DS-ARM-2-2/ta-p/1245841 FlexNVM 的 EEPROM 部分将通过 FlexRAM 内存地址空间访问。 FlexNVM 的数据闪存部分将以普通方式访问,即直接读取闪存地址和擦除/编程闪存地址。 如何为闪存编程的简单示例,请参见此处: https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K144-Flash-RW-simple/ta-p/1110000
查看全文
S32K358 GMAC MAC 地址 您好, 我正在与 GMAC 周边的 LWIP 合作。使用配置工具,我发现必须输入 MAC 地址才能生成配置。我可以访问集成电路上的硬件 MAC 地址吗?或可用于评估目的的范围? Re: S32K358 GMAC MAC address 感谢帕维尔的快速回放。 此致问候 埃文 Re: S32K358 GMAC MAC address 你好@ivanperino、 S32K3 设备(例如 S32K358)没有将 MAC 地址烧录到 OTP 存储器中。这些 MCU 不包含集成的以太网 PHY,也不提供内置的唯一 MAC 标识符。 MAC 地址管理是每个客户的责任。恩智浦不为 S32K3 设备分配或保证 MAC 地址。分配策略(静态、动态或基于正式注册的 OUI)必须由客户定义和实施。 典型选项 本地管理地址 (LAA),用于内部部署或有限部署(如 02:xx:xx:xx:xx:xx:xx:xx)。 商用产品的全球唯一 MAC 地址需要向 IEEE 注册 OUI: https://standards.ieee.org/products-services/regauth/ 作为参考,恩智浦确实为某些无线模块(BLE、Wi-Fi)提供了预编程的MAC地址,在这些模块中,全球唯一性是认证的必要条件。这不适用于 S32K3 MCU。 顺祝商祺! 帕维尔 Re: S32K358 GMAC MAC address 铺装 您的建议看起来并不符合 IEEE 标准。将相同的 MAC 地址分配给同一网络中的两台设备(无论是否意外)都会导致第 2 层防火墙通常会检测到 MAC 欺骗。 我们的产品不能包含"任何随机的" MAC 地址。对于其他产品,我们得到的是 OUI 和使用范围。一句话物理设备(虚拟系统除外)的 MAC 地址必须是唯一的。恩智浦是否有避免重复的范围或方法? 希望您能在这里帮助我们。 埃文 Re: S32K358 GMAC MAC address 你好@Greavesinator85、 没有,没有 HW MAC 地址。选择任何在网络/子网中唯一的 MAC 地址。 顺祝商祺! 帕维尔
查看全文
S32K144-33664-BCC33772B spi 从站回调问题 你好,论坛、 我在使用 S32K144 与 BCC33772 通信时遇到了问题。 我正确地唤醒了 TPL 收发器,为 BCC33772 分配了一个 ID,并询问了电压;我甚至得到了 BCC33772 对我的从属设备的响应。 问题就在最后,因为这种响应不会触发信号 spi 从站的回调,就好像它没有收到大小合适的传输,但总线上有总线。 令我不解的是,它确实正确接收了我为确保建立正确通信而分配的 ID 检索传输,但问题似乎出在要求多个响应上。 我使用该功能既与主站通信,又与从站接收: void spi_hw_transfer(zc_spi_hw* hw_config、数据包* 数据包){ hw_config->数据包= 数据包; uint16_ttotal_bytes = (((packet->消息字节长度<<3) - 1 + hw_config->帧数据字节数) / hw_config->帧数据大小比特)* hw_config->帧总字节数; 如果(hw_config->hw_mode== 主模式){ hw_config->zc_hw_load_spi_buffer(hw_config, packet->tx_buffer数据包>消息字节长度); LPSPI_DRV_MasterTransfer(hw_config->spi_id, hw_config->传输缓冲区, hw_config->接收缓冲区, total_bytes); }否则{ hw_config->zc_hw_load_spi_buffer(hw_config, packet->tx_buffer数据包>消息字节长度); LPSPI_DRV_SlaveTransfer(hw_config->spi_id, hw_config->传输缓冲区, hw_config->接收缓冲区, total_bytes); } } 数据包只是一个结构体,其中包含几个变量,用于指定我想要做的事情,但这里基本上有三个相关的数据包: send_order,其信息字节长度为 6 receive_single_response,其信息字节长度为 12 receive_voltage_response,其信息字节长度为 42 我使用这个函数将我想要发送的顺序填入 send_order: void BCC33772_load_binary_payload(数据包* 数据包、 uint8_tmemdata_high、 uint8_tmemdata_low、 uint8_tregister_addr、 uint8_tdevice_id、 uint8_tdevice_cr、 uint8_tcmd){ uint8_t* 缓冲区 = 数据包->tx_buffer; 缓冲区[0] = memdata_high; 缓冲区[1] = memdata_low; buffer[2] = register_addr; //我们假定响应位为零,因为这个 有效载荷是一个请求 缓冲区[3] = 设备 ID; buffer[4] = device_cr<< 4 | cmd; } 这些都是在配置后检查 ID 集和要求电压的调用: BCC33772_load_binary_payload(&send_order, 0x0, 0x1, BCC33772B_INIT_REGISTER, 0x1, 0, BCC33772B_READ_CMD); spi_hw_transfer(&spi_rx,&send_order); spi_hw_transfer(&spi_tx,&receive_single_response); ,这确实有效。然后调用六种电压: BCC33772_load_binary_payload(&send_order, 0x0, 0x6, BCC33772B_INIT_REGISTER, 0x1, 0, BCC33772B_READ_CMD); spi_hw_transfer(&spi_rx,&send_order); spi_hw_transfer(&spi_tx,&receive_voltage_response); ,而不是。(如果 BCC33772 关闭并且只是一遍又一遍地填充 send_order 数据,它确实会触发信号)。 这是 spi_rx 和 spi_tx 通道上的信息(延迟是因为 TPL 的缘故) rchust_0-1764241709697.png 这是我的配置: RX = { .bitcount = 48u、 .callback = NULL、 .callbackParam = NULL、 .clkPhase = LPSPI_CLOCK_PHASE_2ND_EDGE、 .clkPolarity = 0、 .lsbFirst = false、 .pcsPolarity = LPSPI_ACTIVE_LOW、 .rxDMAChannel = 0、 .transferType = LPSPI_USING_INTERRUPTS、 .txDMAChannel = 0、 .whichPcs = 0、 }; TX = { .bitcount = 48u、 .bitsPerSec = 2000000、 .callback = NULL、 .callbackParam = NULL、 .clkPhase = LPSPI_CLOCK_PHASE_2ND_EDGE、 .clkPolarity = 0、 .isPcsContinuous = true、 .lpspiSrcClk = 48000000、 .lsbFirst = false、 .pcsPolarity = LPSPI_ACTIVE_LOW、 .rxDMAChannel = 0xFF、 .transferType = LPSPI_USING_INTERRUPTS、 .txDMAChannel = 0xFF、 .whichPcs = 0、 }; (它们都配置为从 FIR 时钟馈电) Re: S32K144-33664-BCC33772B spi slave callback problem 您好, 您没有详细说明硬件(原理图、连接等),因此假定硬件已正确连接。 如果您使用的是 MC33772B,那么该 BCC 使用 40 位命令,而 C 版本使用 48 位命令。 因此,对于 MC33772B,您的代码是不正确的。无论如何你可以参考 MC33771B/MC33772B 的 BCC 软件驱动程序代码包,可在 https://www.nxp.com/design/design-center/software/analog-expert-software-and-tools/sdk-analog-expert-drivers/embedded-sw-battery-cell-controller-software-driver-for-mc33771b-mc33772b:EMBEDDED-SW-BCC#downloads 上获得 BR, Petr Re: S32K144-33664-BCC33772B spi slave callback problem 在此之前,我提供了一份我的代码简历,但现在我删掉了一些东西,只保留了主代码所需的最低限度,而这正是我的代码: #definevoltage_count 6 #defineID_33772 1 uint32_tsingle_response_counter; uint32_t电压响应计数器; zc_spi_packet发送顺序; zc_spi_packetreceive_single_response; zc_spi_packet 接收电压响应; zc_spi_hwspi_tx; zc_spi_hwspi_rx; zc_digital_out引脚 1; zc_digital_out引脚 2; zc_digital_out引脚 3; 无效 唤醒(zc_spi_hw* spi){ spi_hw_set_cs_polarity(spi, 0, true); //这将关闭它,因为我们没有发送信息,所以选中时为高电平 + 未选中时 = 低电平 zc_delay_microseconds(21U); spi_hw_set_cs_polarity(spi, 0, false); zc_delay_microseconds(600U); spi_hw_set_cs_polarity(spi, 0, true); zc_delay_microseconds(21U); spi_hw_set_cs_polarity(spi, 0, false); zc_delay_microseconds(1000U); } void load_binary_payload(数据包* 数据包、 uint8_tmemdata_high、 uint8_tmemdata_low、 uint8_tregister_addr、 uint8_tdevice_id、 uint8_tdevice_cr、 uint8_tcmd、 uint8_tcrc){ uint8_t* buffer = packet->tx_buffer; 缓冲区[0] = memdata_high; 缓冲区[1] = memdata_low; buffer[2] = register_addr; //我们假定响应位为零,因为这个 有效载荷是一个请求 缓冲区[3] = 设备 ID; buffer[4] = device_cr<< 4 | cmd; buffer[5] = crc; } void single_callback(数据包* 数据包){ single_response_counter++; } void 电压回调(数据包* 数据包){ 电压响应计数器++; } int main(){ zc_clock_init(); zc_start_scheduler(); zc_create_spi_packet(&send_order, 6, NULL, NULL); zc_create_spi_packet(&receive_single_response, 12, single_callback, NULL); zc_create_spi_packet(&接收电压响应, 42, voltage_callback, NULL); initialize_hw_spi(&spi_tx,SPI_1、 主); initialize_hw_spi(&spi_rx,SPI_2、 驱动); //在 33664 中启用 TPL2 zc_init_digital_out(&pin1,&PD4); zc_init_digital_out(&pin2,&PA16); zc_init_digital_out(&pin3,&PC13); zc_turn_on_do(&pin1); zc_turn_on_do(&pin2); zc_turn_on_do(&pin3); //启动 33664 wakeup(&spi_tx); wakeup(&spi_tx); //RESET 33772 uint8_tsoft_reset_data[2] = {0 、 bcc33772b_soft_reset}; load_binary_payload(&send_order, soft_reset_data[0], soft_reset_data[1]、 BCC33772B_SYS_CFG1_CONFIG_REGISTER, 0, 0, BCC33772B_WRITE_GLOBAL_CMD, 0x5A); spi_hw_transfer(&spi_tx,&send_order); zc_delay_microseconds(2000U); /设置 ID uint8_tset_id_data[2] = {0 , ID_33772}; load_binary_payload(&send_order, set_id_data[0], set_id_data[1]、 BCC33772B_INIT_REGISTER, 0, 0, bcc33772b_write_cmd, 0x85); spi_hw_transfer(&spi_tx,&send_order); zc_delay_microseconds(2000U); //读取设置 ID load_binary_payload(&send_order, 0, 1、 BCC33772B_INIT_REGISTER, ID_33772, 0、 bcc33772b_read_cmd, 0x1D); spi_hw_transfer(&spi_rx,&receive_single_response); spi_hw_transfer(&spi_tx,&send_order); zc_delay_microseconds(2000U); /设置 ID uint8_tset_id_data_2[2] = {0 , ID_33772+1}; load_binary_payload(&send_order, set_id_data_2[0], set_id_data_2[1]、 BCC33772B_INIT_REGISTER, 0, 0, bcc33772b_write_cmd, 0x75); spi_hw_transfer(&spi_tx,&send_order); zc_delay_microseconds(2000U); //读取设置 ID load_binary_payload(&send_order, 0, 1、 BCC33772B_INIT_REGISTER, id_33772+1, 0、 bcc33772b_read_cmd, 0x09); spi_hw_transfer(&spi_rx,&receive_single_response); spi_hw_transfer(&spi_tx,&send_order); zc_delay_microseconds(2000U); 而(1){ 如果(every_100_ms){ every_100_ms = false; //阅读电压 uint8_tadc_cfg_data[2] = { 0x4 | 0x8, 0x3F}; load_binary_payload(&send_order, adc_cfg_data[0], adc_cfg_data[1]、 bcc33772b_adc_cfg_config_register, ID_33772, 0、 bcc33772b_write_cmd, 0x39); spi_hw_transfer(&spi_tx,&send_order); zc_delay_microseconds(200); load_binary_payload(&send_order, 0, 6、 BCC33772B_MEASURE_CELL6_VOLTAGE, ID_33772, 0、 bcc33772b_read_cmd, 0x04); spi_hw_transfer(&spi_rx、&接收电压响应); spi_hw_transfer(&spi_tx,&send_order); } } 返回0; } zc_spi_hw.c 文件很长,但大部分内容都是配置和兼容性。这些都是在本案中可能很重要的: void spi_hw_transfer(zc_spi_hw* hw_config、数据包* 数据包){ hw_config->数据包= 数据包; uint16_ttotal_bytes = (((packet->消息字节长度<<3) - 1 + hw_config->帧数据字节数) / hw_config->帧数据大小比特)* hw_config->帧总字节数; 如果(hw_config->hw_mode== 主模式){ hw_config->zc_hw_load_spi_buffer(hw_config, packet->tx_buffer数据包>消息字节长度); LPSPI_DRV_MasterTransfer(hw_config->spi_id, hw_config->传输缓冲区, hw_config->接收缓冲区, total_bytes); }否则{ hw_config->zc_hw_load_spi_buffer(hw_config, packet->tx_buffer数据包>消息字节长度); LPSPI_DRV_SlaveTransfer(hw_config->spi_id, hw_config->传输缓冲区, hw_config->接收缓冲区, total_bytes); } } void spi_hw_set_cs_polarity(zc_spi_hw* hw_config、 uint8_tcs_id, bool high_on_select){ lpspi_signal_polarity_tpolarity = high_on_select ? 高电平: lpspi_active_low; LPSPI_DRV_SetPcs(hw_config->spi_id,cs_id,极性); } void __zc_hw_load_spi_buffer_full_byte(zc_spi_hw* hw_config、 uint8_t* 数据、 uint16_tdata_length){ uint16_tframe_data_size_bytes = (data_length - 1 + hw_config-)>frame_data_size_bytes)/ hw_config->帧数据字节数; 为(uint16_ti = 0; i< frames_to_send; i++){ memcpy(hw_config->传输缓冲区+ hw_config->frame_total_size_bytes*数据 + hw_config->帧数据大小字节*数据 + hw_config- frame_data_size_bytes>帧数据大小字节); uint32_t* last_word_of_frame = (uint32_t*) (hw_config->传输缓冲区+ hw_config->frame_total_size_bytes*(i+1) - 4); *last_word_of_frame = *last_word_of_frame<< hw_config->帧_比特_padding; } } void __zc_hw_unload_spi_buffer_full_byte(zc_spi_hw* hw_config、 uint8_t* 数据、 uint16_tdata_length){ uint16_t帧接收 = (data_length - 1 + hw_config-)>frame_data_size_bytes)/ hw_config->帧数据字节数; 为(uint16_ti = 0; i< frames_to_receive; i++){ uint32_t* last_word_of_frame = (uint32_t*) (hw_config->接收缓冲区+ hw_config->frame_total_size_bytes*(i+1) - 4); *last_word_of_frame = *last_word_of_frame>> hw_config->帧_比特_padding; memcpy(数据 + hw_config->frame_data_size_bytes数据 *i, hw_config->接收缓冲区+ hw_config->帧总数据字节数*帧>frame_data_size_bytes); } } void __zc_hw_spi_callback_master(void*驱动状态、 事件事件、 void*用户数据){ (void) 驱动状态; (void) 事件; zc_spi_hw* spi_handler = (用户数据*) userData; zc_spi_packet* packet = (spi_handler)->传输的数据包; 如果(packet != NULL&& packet->回调!= NULL){ 数据包>回调(数据包); } } void __zc_hw_spi_callback_slave(驱动状态*驱动状态、 事件事件、 void*用户数据){ (void) 驱动状态; (void) 事件; zc_spi_hw* hw_config = (zc_spi_hw*用户数据; zc_spi_packet* 数据包 = hw_config->传输的数据包; hw_config->zc_hw_unload_spi_buffer(hw_config, packet->rx_buffer数据包>消息字节长度); 如果(packet != NULL&& packet->回调!= NULL){ 数据包>回调(数据包); } } 问题是,当试图读取电压时,spi_rx 输出LPSPI_TRANSMIT_FAIL,我不知道为什么。在 spi_hw_transfer 中调用 LPSPI_DRV_SlaveTransfer 的结果是: LPSPI_DRV_SlaveTransfer(2, spi_rx->transfer_buffer, spi_rx->receive_buffer, 56) 56 来自 uint16_ttotal_bytes = (((packet->消息字节长度<<3) - 1 + hw_config->帧数据字节数) / hw_config->帧数据大小比特)* hw_config->帧总字节数; 因为我们发送的是 48 位大小的帧,而 SPI 外围设备是以全字工作的。因此,实际帧大小为 64 位,而且只发送其中的前 48 位。至少这是我在 PAL 库中读到的信息,而且似乎有效(除了最后一条信息)。   Re: S32K144-33664-BCC33772B spi slave callback problem 您好, 很抱歉我弄错了,是 33772C;我弄混了,因为我之前用的是 33771B,它确实有 40 位。 所有硬件、crc 计算、信息大小和 ID 分配都应该是正确的,因为我可以在逻辑分析仪上看到数据交换,而且 33772C 在我要求时也确实以我给它的 ID 回应我。事实上,如图所示,它也对电压数据做出了响应,只是我的从属设备没有捕捉到而已。 这是一个接收时的代码问题,我想我已经缩小了范围。错误似乎出在 TX 上,因为如果我在 tx 缓冲区中输入 NULL,它就能正常工作。从技术上讲,这种使用情况是可以解决的,因为这是 TPL 从站,33664 从站接收不到任何信息(甚至没有路由)。 不过,我还是想知道为什么发送时不工作。如果我将 zc_create_spi_packet(&receive_voltage_response,X,voltage_callback,NULL); 其中 X 为 32 或更低值,就能捕捉到它。所以看来它最多可以发送 32 字节但如果发送更多字节就会失败? Re: S32K144-33664-BCC33772B spi slave callback problem 您好, 对于 MC33772C,只需参考可用的驱动程序;https://www.nxp.com/webapp/Download?colCode=EMBEDDED-SW-BCC-MC33771C&appType=license 它还使用 NULL 作为从站/主站 TX/RX 缓冲区的参数。 PetrS_2-1764594742261.png PetrS_0-1764594498684.png 还要确定缓冲区的对齐方式和 SDK 传输函数中使用的 transferByteCount 值 PetrS_1-1764594690958.png BR, Petr Re: S32K144-33664-BCC33772B spi slave callback problem 我发现了发生了什么,至少我是这么认为的。 只有当我尝试使用 DRV 库从属接收长度超过 8 个字的报文时,问题才会出现。 我还发现,如果将传输缓冲区设置为空值,告诉 DRV 只接收,错误就不会再发生了。错误发生在传输过程中,我看到传输缓冲区中没有传输我给它的 0,而是出现了一些满是 1 的帧。 最后,我试着用另一个 s32k144 进行测试,发现只有在频率达到或超过 2MHz 时才会出现这种情况,而且我还为 MCU 配置了 48MHz 时钟,而不是 80MHz 时钟。 因此,似乎是软件运行不足,DRV 回调无法以足够快的速度向从属设备上的中断传输缓冲区提供数据,从而导致错误。至于 33772C,由于要通过 TPL,所以不需要在从属设备上转接,我就不转接了。今后,使用 DMA 代替中断很可能会解决这个问题。
查看全文
如何通过串行端口将 U-Boot 启动映像刷新到出厂新的 S32G274A 板上 你好 我目前有一块带有 S32G274A CPU 的 S32G-NXP-RDB2 开发板。我正在尝试在不使用 SD 卡的情况下通过串行端口将 U-Boot 启动映像闪存到主板的 eMMC 或闪存中,然后通过 U-Boot 继续进行进一步的操作。 能否提供相关的官方文件或解释相应的方法? 非常感谢! Re: How to Flash the U-Boot Image to a Factory-Fresh S32G274A Board via Serial Port 你好,@waitwang 谢谢你的帖子。 针对您的问题,我建议使用flashtool将引导加载程序(tfa、uboot)闪存到 RDB2 的 QSPI 或 eMMC 中。 你可以尝试安装它并根据代码包中的用户指南使用它。 BR 切宁 Re: How to Flash the U-Boot Image to a Factory-Fresh S32G274A Board via Serial Port 好的,我已经解决了问题,非常感谢!
查看全文
在 U-启动 中初始化 imx8MP PCIe 你好 一位客户正在 U-启动 中初始化 NVMe 驱动器,以便将他们的映像(内核和 rootfs)加载到 iMx8MP 上。这样可以正常工作,可以正确检测到 NVMe 磁盘,系统开始启动。不过,在某些特定的 SoM 中,当 Linux 内核初始化 PCIe 接口时,链接不会启动。在受影响的 SoM 上,大约有 30% 会出现这种情况。以下是初始化失败时的错误信息: phy phy-32f00000.pcie-phy.0: phy poweron failed --> -110 不受影响的 SoM 100% 。如果未在 U-启动 中初始化 PCIe,则受影响的 SoM 可在 Linux 上百分之百地运行,我们在 NVMe 磁盘上进行了 12 小时的压力测试,没有任何问题。 问题很可能与 Linux 内核初始化已初始化 PCIe 接口的方式有关。由于内核不知道接口已被初始化,所以整个过程都要从头开始,这在某些模块中有时会失败。 我认为在不处于 RESET 状态的情况下重新配置PLL时,可能无法正确锁定。但是,如前所述,这种情况在 100% 的硬件上无法重现,因此一定还有某种硬件差异(SoC、SoM)的影响。 谁能告诉我们可能出了什么问题? 谢谢! 拉斐尔 Re: iMX8MP PCIe initialization in U-Boot 您好, 需要在设备树中检查 pll,并在需要时进行更改。 此致 Re: iMX8MP PCIe initialization in U-Boot 谢谢您的回答! 我们的客户想从 NVMe 磁盘加载他们的内核映像和 rootfs,这就是他们添加 U-启动 初始化的原因。因此,启动后初始化 PCIe/NVMe 不是一个选项。 我已经检查过了,如果有办法在启动内核之前在 U-Boot 中正确取消初始化 PCIe 接口,他们就没问题了。我已经尝试过 PCIe RESET,但这并没有解决问题。 从你提到的情况来看,问题似乎与 PLL 有关,而不是 PCIe 外围设备。此外,从您提出的解决建议来看,问题可能出在 PLL 上,而不仅仅是 PCIe。 在 RESET 到 Linux 之前,我们可以尝试 RESET 特定的 PLL 吗?RESET它以避免这些问题的正确方法是什么? Re: iMX8MP PCIe initialization in U-Boot 你好 当 Linux 内核初始化一个已经初始化的 PCIe 接口时,我可以找出间歇性故障的可能原因。 你遇到的问题似乎与U-启动和Linux之间的PCIe接口初始化顺序有关。当 U-Boot 初始化 PCIe 接口以从 NVMe 加载映像,然后 Linux 尝试在未正确 RESET 的情况下重新初始化相同的接口时,会产生竞态条件,在受影响的 SOM 上大约有 30% 的时间会失败。 这与 PLL 配置问题相符。当 Linux 内核尝试重新配置已初始化的 PCIe 接口时,如果在两次初始化之间未正确 RESET 硬件,则可能会遇到 PLL 锁定问题。 有三种可能的解决方案: 1.在 U-启动 中完全禁用 PCIe 初始化,因为你已经确认这在 100% 的时间里都有效。这将是最可靠的方法。 2。通过添加系统条目在 Linux 中实现正确的 PCIe 暂停/恢复功能: -创建补丁为 PCIe 暂停/恢复添加 sys 条目-移除 PCIe EP 设备:`echo 1 > /sys/bus/pci/devices/0000\ :00\ :00.0/remove` -禁用 PCIe:`echo 1 > /sys/devices/platform/soc\ @0 /33800000.pcie/pcie_dis `-启用 PCIe:`echo 1 /sys/devices/platform/soc\ /33800000.pcie/pcie_CiE:`echo 0 > /sys/设备/平台/soc\ @0 /33800000.pcie/pcie_dis ` -重新扫描 PCIe 总线:`echo 1 > /sys/bus/pci/rescan `3. 将 PCIe 驱动程序构建为模块并修改启动顺序: -先启动到 Linux-等待必要的初始化 -在需要时加载 PCIe 驱动程序模块在其他 i.mx8MP 实现中已观察到 此问题,尤其是在不同 SoM 批次的硬件容差存在差异的情况下。Linux 内核的 PCIe 驱动程序假定它使用的是未初始化的硬件,如果情况并非如此,就会导致冲突。 此致 Re: iMX8MP PCIe initialization in U-Boot 谢谢,根据这些信息,我发现在 linux 驱动程序启动之前使用 RESET 可以解决问题。
查看全文
エラー: デバイスは安全です。消去して保護を解除 こんにちは、チームの皆さん 私は、A12323 ドキュメントを使用して、S32K144 で A/B パーティショニングをテストしていました。 まず、S32K144_Memory_Partition プロジェクトを RAM にフラッシュしました。 次に、S32K144_FOTA_Gateway_example を Flash にフラッシュしました。 同じボード上で、CAN アプリケーションのフラッシュを試みました。初めて成功しました。 しかし、同じアプリケーションをもう一度フラッシュしようとしたところ、 「デバイスはセキュリティで保護されています。消去するとセキュリティが解除されます。」というエラーが表示され、失敗しました。 Navina_0-1764133345139.png 今は何もフラッシュできません。 ありがとうございます。 Re: error: Device is secure. Erase to unsecure こんにちは@Navina 前のThreadに書いたように: MDM-AP を読み取るための Segger J-Link プローブまたは Lauterbach デバッガーをお持ちですか?残念ながら、Pemicro ではそれが不可能です。 デバイスがロックされる可能性があるまれなシナリオがあります。このThreadを確認してください: https://community.nxp.com/t5/S32K/Unbricking-S32K146/mp/937227 確認するにはMDM-APを読み取る必要があります。
查看全文
i.mxrt1010 有时会挂在启动 ROM 代码上 大家好, 客户遇到了一个问题,即i.MXRT1010有时会挂在启动ROM代码中,无法跳转到用户应用程序。 但是,使用 MCUXpresso 安全配置工具/闪存编程器读取或非闪存似乎可以解决问题。 造成这一问题的原因是什么,如何才能避免再次发生? 谢谢。 i.MX RT101x Re: The i.MXRT1010 sometimes hangs on the boot ROM code Hello 映像可能版本不正确,请验证该映像是否包含 FCB 和 IVT。 此外,确保 Boot_mode 和 Boot_cfg 是闪存的正确配置。 BR, Omar
查看全文
S32K3 的 gPTP 协议栈是否支持 HSE 模块? 在我将 s32k3 的 gPTP 演示下载到芯片上后,我无法再使用 JLink 的 jflash 连接到芯片。日志显示"HSE 固件检测到","无法读取 CPUID 寄存器" 。如何重新连接芯片并禁用演示程序中的 HSE 功能? 当我使用 JTAG 接口连接时,jflash 有时会要求我像这样输入 ID 代码NXP S32K3xx - 世纪佳缘知识库 我的运行环境是 • S32 Design studio 3.6.0(更新至 3.6.2)搭载恩智浦 GCC 10.2.0;版本 1728;版本 ID:202307190908 • S32K3xx 开发代码包 3.6.2(设计工作室 3.6.2 的一部分) • S32K3xx RTD 6.0.0(SW32K3_S32M27x_RTD_R21-11_6.0.0_D2506) • 可选的用于 FreeRTOS 示例应用程序 S32K3 FreeRTOS 5.0.0 (SW32K3_FreeRTOS_11.1.0_5.0.0_CD1_D2409) -SW32K3xx_M7_gPTP_1 .0.0_D2507 jflash 的正常连接日志为 正在连接... -通过 USB 连接到探头/编程器设备 0 -探测器/编程器固件:J-Link V11 已编译 2041 年 4 月 27 日 16:36:21 -探测器/编程器 S/N:*******-设备 " S32K344 " 已选择。 -目标接口速度:500 kHz(固定) -vTarget = 3.185V-configTargetSettings () 启动 -configTargetSettings () 结束 -花了 12us-initTarget () 启动 -检测到 SDA_AP-必要时解锁设备... -设备未锁定。不执行解锁程序。 - 检查是否已启用调试访问... - 调试访问尚未启用。执行启用调试访问序列... - 启用调试访问 - 检查是否安装了 HSE 固件... - 未安装 HSE 固件 - 检查 Cortex-M7_0 和 Cortex-M7_1 是否以锁步模式运行 - 启用锁步模式 - InitTarget() 结束 - 耗时 16.0ms - 找到 ID 为 0x6BA02477 的 SW-DP - DPIDR: 0x6BA02477 - CoreSight SoC-400 或更早版本 - 跳过 AP 映射检测。找到手动配置的 AP 映射。 - AP[0]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[1]:APB-AP (IDR:未设置,ADDR:0x00000000) - AP[2]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[3]:AHB-AP (IDR:未设置,ADDR:0x00000000) - AP[4]:AHB-AP(IDR:未设置,ADDR:0x00000000) - AP[5]:AHB-AP(IDR:未设置,ADDR:0x00000000) - AP[6]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[7]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[4]:跳过 ROMBASE 读取。CoreBaseAddr 由用户手动设置 - AP[4]:找到核心 - CPUID 寄存器:0x411FC272。实现者代码:0x41 (Arm) -缓存:L1 I/数据缓存 存在 -找到了 Cortex-M7 r1p2,小端节序。 - FPUnit:8 个代码 (BP) 插槽和 0 个字面插槽 - 跳过 ROM 表扫描。CorebaseAddr 由用户手动设置:0x40250400 -I-Cache L1:8 KB,128 个集,32 字节/行,2-Way-D-Cache L1:8 KB,64 个集,32 字节/行,4-Way -setupTarget () 启动-初始化 ECC RAM... -ramcodeAddr:0x20000000-raminitAddr:0x20000010 -raminitSize:0x00007FF0-initPattern:0xDeadBeef-ECC RAM 成功初始化 -正在初始化 ECC 内存... -ramcodeAddr:0x20000000-raminitAddr:0x20400000 -raminitSize:0x00004000-initPattern:0xDeadBeef-ECC RAM 成功初始化 -setupTarget () 结束-花了 53.8 毫秒 -正在执行初始序列... -成功初始化 -目标接口速度:1000 kHz(固定) -找到 1 个 JTAG 设备。核心 ID:0x6BA02477(无) - 连接成功 异常连接 Jflash 日志为 正在连接... -通过 USB 连接到探头/编程器设备 0 -探测器/编程器固件:J-Link V11 已编译 2041 年 4 月 27 日 16:36:21 -探测器/编程器 S/N:*******-设备 " S32K344 " 已选择。 -目标接口速度:500 kHz(固定)-vTarget = 3.225V -configTargetSettings () 启动 -configTargetSettings () 结束-花了 9us-initTarget () 启动 -检测到未知 SDA AP:0x00000000-initTarget() 结束 -花了 3.05 毫秒-configTargetSettings () 结束 -花了 18us-initTarget () 启动-SDATargetSettings () 启动 -花了 18us-initTarget() 启动-SDATargetsettings () 启动 -花了 18us 已检测到_AP -必要时解锁设备... -设备未锁定。不执行解锁程序。 - 检查是否已启用调试访问... - 调试访问尚未启用。执行启用调试访问序列... - 启用调试访问 - 检查是否安装了 HSE 固件... -检测到 HSE 固件(启用 SWAP) - 检查 Cortex-M7_0 和 Cortex-M7_1 是否在锁步模式下运行 - 启用锁步模式 - InitTarget() 结束 - 耗时 19.8ms - 找到 ID 为 0x6BA02477 的 SW-DP - DPIDR: 0x6BA02477 - CoreSight SoC-400 或更早版本 - 跳过 AP 映射检测。找到手动配置的 AP 映射。 - AP[0]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[1]:APB-AP (IDR:未设置,ADDR:0x00000000) - AP[2]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[3]:AHB-AP (IDR:未设置,ADDR:0x00000000) - AP[4]:AHB-AP(IDR:未设置,ADDR:0x00000000) - AP[5]:AHB-AP(IDR:未设置,ADDR:0x00000000) - AP[6]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[7]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[4]:跳过 ROMBASE 读取。CoreBaseAddr 由用户手动设置 - AP[4]:跳过。无法读取 CPUID 寄存器 - 连接 CPU 失败。在RESET下执行连接。 - DPIDR: 0x6BA02477 - CoreSight SoC-400 或更早版本 - 跳过 AP 映射检测。找到手动配置的 AP 映射。 - AP[0]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[1]:APB-AP (IDR:未设置,ADDR:0x00000000) - AP[2]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[3]:AHB-AP (IDR:未设置,ADDR:0x00000000) - AP[4]:AHB-AP(IDR:未设置,ADDR:0x00000000) - AP[5]:AHB-AP(IDR:未设置,ADDR:0x00000000) - AP[6]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[7]:MEM-AP (IDR:未设置,ADDR:0x00000000) - AP[4]:跳过 ROMBASE 读取。CoreBaseAddr 由用户手动设置 - AP[4]:跳过。无法读取 CPUID 寄存器 - 无法在 Coresight 设置中找到内核 - ERROR:连接失败。 无法建立与目标的连接。 - ERROR:连接失败 Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 是,正确 davidtosenovjan_0-1755158415261.png Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 你好,大卫 你说的正是我面临的问题。 我试过你建议的方法,但没用。先别管它了。我的另一个问题是,是否有可能禁用 S32K3 的这一功能?这种操作是否正确? 基于 gPTP 演示,我禁用了 Func_Threshold_Reset 并将 MCU_PRECOMPILE_SUPPORT 从 STD_ON 更改为 STD_OFF,然后代码就可以运行了。我目前还不知道是什么原因导致了 RESET。 close reset.png Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? S32K3 具有 RESET 升级功能,这意味着在一定数量的功能 RESET 之后,会发出破坏性 RESET,并且在一定数量的破坏性 RESET 之后,MCU 将保持 RESET 状态到下一个 POR。因此,如果出于任何原因(例如监视程序或某些时钟配置错误或类似原因)定期发出功能RESET,则可能导致MCU RESET,因为在POR之后从内部闪存中执行代码。 解决方案可以在POR之后立即停止设备并擦除代码闪存内容。 这里有一个 J-link 的解决方案(我个人没有经验): https://community.nxp.com/t5/S32-SDK/failed-to-power-up-dap-after-program-s32k312-with-pll0-equal/m-p/1612025 希望对您有所帮助 Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 我已经使用示波器捕获了 RESET 引脚的波形。该芯片确实在定期RESET。当我禁用 SXOSC 时,周期为 8 毫秒。当我启用 SXOSC 时,周期为 5 毫秒。 second.png Snipaste_2025-08-13_17-13-58.png Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 在这种情况下,我建议用示波器测量 RESET 信号,以了解设备是否处于 RESET 状态。 Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 我不明白你的意思。我的板是我自己开发的。在这个板上,我运行了其他普通程序。板上没有 RESET 指示灯。我根据 gpTP 演示修改了时钟和 EMAC 引脚。下载后,通过观察当前,我发现程序没有RESET。 Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 你看见 RESET LED 照明了吗? Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 谢谢您的答复。我从未在这个板中使用过 HSE。这是一个新董事会。我下载了照明演示版,运行正常。我能够重新连接 JTAG 并清除程序。然后,我下载了 gPTP 演示版 1.0。之后,我就再也无法连接芯片或清除程序了。我对 gPTP 不熟悉。演示中对 JTAG 有限制吗?或许是 Segger 的 jflash 软件出了问题? Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 我不认为 gPTP 演示与 HSE 有任何关系。 您的日志信息显示: - 检查是否安装了 HSE 固件... - 检测到 HSE 固件(已启用 SWAP)。 实际上,这可能仅仅意味着安装了 HSE FW 并应用了用于 A/B 交换的 HSE 内存布局。这个板使用了 HSE 吗? Re: Does the gPTP protocol stack of the S32K3 enable the HSE module? 如何获取调试身份验证 ID 代码? 我急需知道如何消除 JTAG 上的这一限制。亲爱的恩智浦员工,请帮帮我好吗? @VaneB
查看全文
在 imx93 A55 内核中使用 Flexio 仿真 PWM 你好,恩智浦技术支持 如何在 linux 系统中使用 i.MX93 上的 FlexIO 端口模拟 PWM 信号? 数据表中提到 FlexIO 具有此功能,但我在恩智浦论坛上找不到任何相关代码。 IRENE_U_0-1763517817753.png 我只找到了使用 TPM 或 M33 处理器模拟 PWM 信号的代码,但我们使用的是 GPIO_IO28 引脚。 谢谢! Re: Emulating PWM using Flexio in imx93 A55 core 你好@IRENE_U 在 linux 中没有可用的驱动程序来用 Flexio 仿真 PWM,你可以参考下面的链接。 https://www.nxp.com/docs/en/application-note/AN12713.pdf https://www.nxp.com/docs/en/application-note/AN5209.pdf https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/pwm/pwm_nxp_flexio.c https://github.com/nxp-mcuxpresso/mcux-sdk-examples/tree/MCUX_2.16.100/mcimx93evk/driver_examples/flexio/pwm 致敬, Zhiming
查看全文
mc33772c assign CIDs Hi,     I am currently connecting the mc33664 and then the mc33772c through the mcu, I am currently in the mode of connecting mc33664 and then mc33772c through the mcu. Now, I can get the correct response by sending the instruction to read the init register, but after I tried to write the cid and read it, I failed to get the correct response.    Is it normal that I keep sending without changing the read instruction (without modifying the message counter) and still get a response. kevinyuee_0-1752547683334.png     The following is a situation where I attempted to write the cid but received no response, while reading the init register also got a response. Moreover, other instructions sent thereafter can also receive the same response, unless an instruction to read the init register is sent here again, in which case the response data will be updated. kevinyuee_1-1752547826969.png     SPI Re: mc33772c assign CIDs Hi Kevin, I have checked your schematic, it seems to be correct. However I don't see how the individual BCC grounds are connected. Please make sure, that the BCC grounds are connected to the negative pole of the lowest Cell in the 6 Cell battery. Please refer to the schematic attached.  JozefKozon_0-1753077984635.png JozefKozon_1-1753077999631.png If the EEPROM is not present, the I2C ERR FLT should be ignored. For start, please disconnect the higher BCCs and try to write only to the first BCC, with the 6 Cell battery connected to only the first BCC. Something as below. JozefKozon_2-1753078569430.png With Best Regards, Jozef Re: mc33772c assign CIDs Hi Kevin, thank you for the schematic. Yes, I have received it. I will check it and I will come back. With Best Regards, Jozef Re: mc33772c assign CIDs Hi,    I have sent the schematic diagram as an attachment to your private message last Friday.Have you received it? Are there any questions? Best wish Kevin Re: mc33772c assign CIDs Hi Kevin, are you using our Evaluation boards? If yes, please state the full product numbers. If you are using your own design, please share your schematic with voltage levels and part values to check. With Best Regards, Jozef Re: mc33772c assign CIDs Hi,     I have connected the battery now, but still can't write the cid successfully. And by reading the FAULT1 STATUS$24 register, I observe that there is also fault detection after I execute the write instruction. I don't have an external EEPROM, so setting I2C ERR FLT to 1 should be normal.     My waveform is also normal. I really don't know why it can't be written correctly. image.png kevinyuee_0-1752751832970.png     Re: mc33772c assign CIDs Hi Kevin, yes, this might be the reason. Please refer to the section 5.2 in the MC33772C datasheet. Depending which MC33772C version you are using, there is a minimum number of Cells which must be connected to the BCC (Battery Cell Controller). Usually minimum number of Cells is 3. However even for the MC33772CTC0AE version, the CT and CB pins cannot be left floating. JozefKozon_0-1752653968155.png Please also refer to the AN12536.  JozefKozon_1-1752654057536.png With Best Regards, Jozef Re: mc33772c assign CIDs Hi,   I power the mc33772c through wiring. Will this method affect my reading and writing of the mc33772c chip, assign CIDs. kevinyuee_0-1752649773184.png     Re: mc33772c assign CIDs Hi Kevinyuee, INIT Register Read Works This suggests that the default CID (usually 0x00) is still active. The message counter and CRC are likely correct for this command. Writing the CID requires: A valid message counter (incremented from the last successful message). A correct CRC. The correct frame format for the CID assignment command. Please refer to the sections 9.3.2 and 9.3.3 in the full MC33772C full datasheet, for description of the Idle and Init modes.  With Best Regards, Jozef
查看全文
为什么无法接收诊断帧(0x3C,0x3D)? 我正在使用 S32K118,并导入了 ldf 来连接 lin 模块。它能正确接收 fames,但无法接收诊断帧,为什么? clip_20250710142605.png 1.png 2.png Re: Why can't receive the diagnostic Frame(0x3C,0x3D)? SW32K1_SW32M24_LIN_STACK_2.0.0_D2503 位于 S32K1xx 参考软件中: https://www.nxp.com/webapp/swlicensing/sso/downloadSoftware.sp?catid=SW32K1-REFSW-D BR,丹尼尔 Re: Why can't receive the diagnostic Frame(0x3C,0x3D)? 能否提供 LIN STACK 2.0.0 的软件? Re: Why can't receive the diagnostic Frame(0x3C,0x3D)? 你好@jx111、 我测试了这个例子: Lin_Slave_S32K144_Example_DS lin stack 2.0.0 您应该可以发送此 MasterReq danielmartynek_0-1752850568152.png 一旦钳位了这个标志,就开始对其进行处理。 danielmartynek_1-1752850600619.png 此致, 丹尼尔 恩智浦提供的任何支持、信息和技术("材料")均按原样提供,没有任何明示或暗示的保证,恩智浦在适用法律允许的最大范围内拒绝承担与材料有关的所有直接和间接责任及损害赔偿。恩智浦不承担任何应用或产品设计方面的协助责任。材料只能用于恩智浦产品。恩智浦可以不受限制地使用向恩智浦提供的有关材料的任何反馈。 Re: Why can't receive the diagnostic Frame(0x3C,0x3D)? 我使用的是 S32DS 3.4。我无法打开程序,但可以看到 C 代码。 1.请解释一下如何获取诊断框? 2.另一个问题: 我使用" LIN_NODE_STATE_SLEEP_MODE == lin_lld_get_state(...)" 来获取 lin 的睡眠状态,当 lin 超时时,它可以进入睡眠状态,但它无法获取睡眠帧(0x00,0xFF,0xFF,...),为什么? 是否丢失了某些配置? Re: Why can't receive the diagnostic Frame(0x3C,0x3D)? 你好@jx111、 请参阅此处的示例: https://community.nxp.com/t5/S32K/S32K-SDK-LIN-Stack-not-working-properly-with-UDS/m-p/1313360 I 类(正常信令)不支持诊断响应 (0x3D)。 LIN 规格代码包修订版 2.1 https://www.lin-cia.org/fileadmin/microsites/lin-cia.org/resources/documents/LIN-Spec_Pac2_1.pdf 此致, 丹尼尔
查看全文
嵌入式产品的安全应用案例,可提升产品和企业价值(日文博客) 随着欧洲的《网络安全法案》 、日本的JC-STAR系统以及美国的“网络信任标志”计划等各个国家建立网络安全体系,人们对安全的兴趣正在迅速增长,即使在以前没有重视安全功能的领域也是如此。   本文以用例为例,清晰简洁地解释了嵌入式产品安全的重要性,并阐述了威胁、影响和应对措施。   用例示例   1. 设备识别和访问权限管理   威胁与影响   将物联网设备(例如智能电表、监控摄像头、安全网关等)连接到网络(例如云端、内部网络、楼宇内网络等)或其他设备时,存在未经授权的设备通过“欺骗”连接的风险。这可能导致客户信息泄露、服务暂停或被滥用。此外,还存在外部未经授权的用户访问物联网设备并滥用其功能的风险。例如,他们可能窥探摄像头录像或控制物联网设备,并将其用作网络攻击的跳板。 对策   设备的“识别(认证)”和“防欺骗”至关重要。通过利用安全功能,可以保证设备的真实性(即设备是正品;在这种情况下,设备使用的识别名称是设备本身的名称,而不是冒充其他设备的人使用的识别名称),并创建安全的连接环境。 此外,通过利用安全功能,可以防止未经授权的用户从外部访问和使用物联网设备。   Keita_Nagashima_2-1761209125678.png 2. 假冒商品的鉴定   威胁与影响   假冒商品(包括名牌包、名酒和打印机墨粉)的流通不仅会导致正品销量下降,还会对用户造成伤害,损害品牌价值,并影响依赖正品的系统。   对策   安全功能可以“区分”真品和假冒产品(即确定其真伪) ,从而有助于消除假冒产品。   Keita_Nagashima_0-1761209017704.png     3. 知识产权保护   威胁与影响   如果产品中安装的软件和数据被分析和泄露,则存在侵犯知识产权的风险。事实上,软件已被复制,假冒产品也已销往海外。技术泄露还会导致竞争力下降。   对策   通过使用安全加密和识别(认证)功能,可以防止此类信息被读取和篡改,从而防止假冒产品的生产。即使发生篡改,也可以通过检测和处理问题来防止损失。 Keita_Nagashima_4-1761209246781.png 4. 安全的产品软件更新(OTA)   威胁与影响   产品交付后提供软件更新不仅是解决网络安全标准(例如CRA)中漏洞的必要措施,还能通过提升产品功能来增加产品价值。然而,如果更新系统存在漏洞,则可能导致产品和服务被滥用(例如通过安装未经授权的软件),或者知识产权被泄露(例如通过分析更新镜像)。   对策   通过使用安全加密和识别(认证)功能,可以“防止读取要安装在产品上的更新映像的内容”和“防止安装未经授权的软件”。 shinjihontanib_0-1762408102565.png   5. 用户机密信息的保护   威胁与影响   如果产品中存储的机密用户信息(例如个人姓名、位置信息和使用历史记录)泄露,可能会引发隐私侵犯和法律问题。   对策   对机密信息进行“加密”和“加强访问控制”等安全措施可以降低机密信息泄露的风险。 Keita_Nagashima_3-1761209186906.png 6. 安全日志的收集和分析   威胁与影响   忽视攻击迹象或异常行为可能会造成更大的损害。如果不做好记录,就很难确定原因并防止再次发生。   对策   为防止攻击痕迹被掩盖,收集和维护安全日志至关重要。此外,还需要根据收集到的数据采取措施,例如实施异常检测算法。   Keita_Nagashima_5-1761209482239.png   概括   引入安全措施不仅仅是遵守法规,更是提升竞争力的基石。它直接有助于提高产品可靠性、维护品牌价值并增强公司竞争力。展望未来,安全有望成为产品开发的“基本要求”。我认为,首先要提高安全意识,为下一步做好准备,并为公司的可持续发展奠定基础。   除了技术要求外,实施安全措施和遵守法律法规还需要满足非技术要求(组织和运营要求)。在下一篇文章中,我们将讨论软件或硬件安全,这是用户经常咨询的技术问题。     相关信息 应用案例:智能安全的医疗设备 应用案例:智能安全的能源管理(日语) 应用案例:符合FIPS和Matter标准的安全IP摄像机 应用案例:智能安全的电动汽车充电(日语) 使用案例:安全云端入职(日语)   =========================== 我们目前无法 回复 此帖子“ 评论”部分的评论。 对于由此造成的不便,我们深表歉意。如有任何疑问, 请 参考“ 如何就 技术问题 联系 NXP ( 日语 博客 ) ” 。 (如果您已经是 恩智浦的 分销商或 与 恩智浦 有业务往来 ,您可以直接联系负责人。 ) 随着欧洲的《网络安全法案》、日本的JC-STAR系统以及美国的“网络信任标志”计划等各个国家建立网络安全体系,人们对安全的兴趣正在迅速增长,即使在以前没有重视安全功能的领域也是如此。   本文根据安全功能的目的,介绍了实现安全功能的示例用例。 (阅读时间:5分钟) 安全 日本博客
查看全文
【入门指南】i.MX 95:LLM_RAG 实现实战 - eIQ Gen AI 流程 - (日语博客) 目前,智能手机和PC上广泛使用的大型语言模型(LLM)在云端运行,利用丰富的资源(处理性能、内存大小),但它们也被部署在嵌入式设备(边缘设备)上。为了在嵌入式设备有限的资源下实现准确性,可以通过在特定领域添加数据库来实现,这种领域被称为RAG(检索增强生成) 。 在本文中,我们将以实践操作的形式介绍 NXP 的LLM+RAG 解决方案“eIQ GenAI Flow” 。 [议程] 1. 关于 eIQ GenAI 流程 2. 运行环境 3. 设置 4. 法学硕士演示 5. RAG 演示 6. RAG数据库更新 7. 音频输入/输出演示 8. 总结 ================================ 1. eIQ Gen AI Flow是什么? eIQ GenAI Flow 是 NXP 推出的大规模语言模型 (LLM) 解决方案,它以切实可行的方式将生成式 AI 和 LLM 的优势带入边缘用例。 简介页 面向嵌入式应用的生成式人工智能 | 恩智浦半导体 介绍视频 - RAG 使用与不使用 RAG 的对比(视频时长:2 分 10 秒) (在“我的视频”中查看) eIQ Gen AI流程由五个模块组成: YuseiUegama_0-1749459775958.png 唤醒词引擎(WWE) (唤醒词检测) VIT(语音智能技术)*1: →唤醒词激活ASR(自动语音识别) *1:恩智浦的语音用户界面技术 自动语音识别(ASR) (语音转文字) 将语音输入转换为文本 大型语言模型(LLM) 根据捕获的上下文生成响应 检索增强生成(RAG) 利用相关的外部知识增强大规模语言模型(LLM) 文本转语音(TTS) 将响应转换为音频输出   2. 运行环境 *由于这是预生产产品,请联系您的 NXP 分销商或直接联系 NXP 购买电路板或获取软件和手册。 硬件 i.MX 95 EVK(本文中所用) 或者 ADLINK 的小型评估板“SMARC LEC-IMX95” 要使用“SMARC LEC-IMX95”操作 LLM,请参阅以下文章。 [NXP 处理器测试指南 7] 在 ADLINK SMARC LEC-IMX95 上使用 i.MX95 进行 LLM 演示的 Yocto 镜像构建和测试流程 – Macnica NXP 支持   软件 Yocto Linux 镜像:L6.12.3_1.0.0(注意:L6.12.20 仅支持 B0 芯片,如果您使用的是 A1 芯片,请使用 L6.12.3) eIQ GenAI Flow: GitHub - nxp-appcodehub/dm-eiq-genai-flow-demonstrator:eIQ GenAI Flow Demonstrator 是一个专为 NXP i.MX95 设备设计的对话式 AI 管道应用程序。 3. 设置 3.1.在主机上进行设置 3.1.1.为 i.MX 构建 Yocto 镜像 Linux L6.12.3_1.0.0 或更高版本需要BSP镜像文件。 根据您使用的板卡配置MACHINE (如果是 NXP EVK ,则使用imx95evk ) ,并构建imx-image-full环境。 有关构建 Yocto 环境的信息,请参阅本文。 3.1.2.自定义 Yocto 环境 将以下元层添加到 3.1 中创建的 Yocto Linux 环境中,然后运行 bitbake。 dm-eiq-genai-flow-demonstrator/meta-eiq-genai-flow 位于 main · nxp-appcodehub/dm-eiq-genai-flow-demonstrator · GitHub 详细说明请参见下面的自述文件。 dm-eiq-genai-flow-demonstrator/meta-eiq-genai-flow/README at main · nxp-appcodehub/dm-eiq-genai-flow-demonstrator · GitHub meta-eiq-genai-flow 包括: Linux 内核: matmul Neutron C-API 设备树:专用于 Neutron 的连续内存分配 (CMA) 区域 Onnxruntime:添加 Neutron 执行提供程序 Neutron 资产:用于处理 matmul 运算的驱动程序和固件。 3.1.3.eIQ Gen AI Flow 软件包设置 在主机 PC 上,运行以下命令克隆 eIQ Gen AI Flow。 $ git clone https://github.com/nxp-appcodehub/dm-eiq-genai-flow-demonstrator.git 此仓库使用Git 大型文件存储 (LFS) ,因此请按照以下步骤拉取: $ sudo apt install git-lfs $ cd dm-eiq-genai-流演示器 $ git lfs pull 使用 SD 镜像写入器或 FTP 将创建的 eiq-genai-flow 文件夹传输到目标根文件系统中的 /root/ 目录(为了清晰起见,我们指定了 /root/ 目录,但传输目标可以是任何目录)。 3.2.i.MX 95 EVK 的设置 本章中的命令在 i.MX 95 EVK 上执行。 3.2.1.网络设置 创建一个类似下面的 shell 并连接到网络 #!/bin/bash export SSID=" " export PASSWORD=" " modprobe moal mod_para=nxp/wifi_mod_para.conf wpa_passphrase ${SSID} ${PASSWORD} > imxrouter.conf wpa_supplicant -d -B -i mlan0 -c ./imxrouter.conf sleep 5 udhcpc -i mlan0 3.2.2.下载所需软件包 $ cd eiq_genai_flow $ ./install.sh 至此,演示环境的设置完成。 4. 法学硕士演示 将 EVK 的 J31 USB DBG 端口连接到 PC 并开机。 以 root 用户身份登录 Teraterm 等控制台。 移动到上一章中存储的 eiq_genai_flow 目录。 4.1.演示帮助检查 $ cd eiq_genai_flow $ ./eiq_genai_flow- 帮助 你会看到类似这样的日志: 剧透 (选中阅读) 用法:eiq_genai_flow [选项] lq 选项 x --input-mode -i [keyb|kasr|vasr] 输入模式:'keyb',适用于 x x 键盘输入,'kasr' 代表 x x 键盘触发 + ASR,'vasr' x x 用于 VIT 唤醒词 + ASR。x x [默认值:keyb] x x --system-prompt -p TEXT LLM 系统提示符。x x [默认值:你很乐于助人 x x 助理。x x --output-mode -o [text|tts] 输出模式:'text' x 文本回复或“tts”代表 x x音频响应。x x [默认值:tts] x x --use-rag -r 激活检索增强功能 x x 代定制 LLM x x 输出。x x --use-neutron -n 使用 Neutron ONNX 执行 x x 提供商。x x --continuous -c 连续模式,其中 ASR 为 x x 一直在倾听。x x --benchmark -b 基准测试模式 - 获取 x 的列表 提出 x 个问题并存储结果。x x --verbose -v 显示信息(例如 x x 次推理)。x x --help -h 显示此消息并退出。x QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ 用法:eiq_genai_flow [选项] lq 选项 x --input-mode -i [keyb|kasr|vasr] 输入模式:'keyb',适用于 x x 键盘输入,'kasr' 代表 x x 键盘触发 + ASR,'vasr' x x 用于 VIT 唤醒词 + ASR。x x [默认值:keyb] x x --system-prompt -p TEXT LLM 系统提示符。x x [默认值:你很乐于助人 x x 助理。x x --output-mode -o [text|tts] 输出模式:'text' x 文本回复或“tts”代表 x x音频响应。x x [默认值:tts] x x --use-rag -r 激活检索增强功能 x x 代定制 LLM x x 输出。x x --use-neutron -n 使用 Neutron ONNX 执行 x x 提供商。x x --continuous -c 连续模式,其中 ASR 为 x x 一直在倾听。x x --benchmark -b 基准测试模式 - 获取 x 的列表 提出 x 个问题并存储结果。x x --verbose -v 显示信息(例如 x x 次推理)。x x --help -h 显示此消息并退出。x QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ 您可以看到,在运行演示二进制文件时,您可以指定诸如“启用/禁用 NPU”、“输入/输出格式”和“启用/禁用 RAG”之类的参数。 4.2.演示运行 首先,尝试使用键盘输入模式。 如果运行演示程序时启用 NPU 选项,它将等待输入,如下所示。 $ ./eiq_genai_flow--使用中子 剧透 (选中阅读) root@imx95-19x19-lpddr5-evk:~/eiq_genai_flow# ./eiq_genai_flow--使用中子 目标设备:i.MX95 [NeutronEP:分配器] CMA 用户空间内存 1536 MB Neutron:内核缓冲区虚拟地址 0xfffe50e00000,填充地址 0x100000000,对齐地址 0x100000000,大小 0x80000000,对齐方式 0x0 高位 0x1,低位 0x0,偏移量 0x0 [NeutronEP:分配器] 0 0xfffe50e00000 512 MB [NeutronEP:分配器] 1 0xfffe70e00000 512 MB [NeutronEP:分配器] 2 0xfffe90e00000 512 MB 2025-05-20 21:21:54.180329391 [W:onnxruntime:, session_state.cc:1168VerifyEachNodeIsAssignedToAnEp] 某些节点未分配给首选执行提供程序,这可能会对性能产生负面影响,也可能不会。例如ORT 明确地将与形状相关的操作分配给 CPU 以提高性能。 2025-05-20 21:21:54.180415808 [W:onnxruntime:, session_state.cc:1170VerifyEachNodeIsAssignedToAnEp] 在非最小构建版本上以详细输出重新运行将显示节点分配。 使用的LLM:danube-onnx TTS模型采用16kHz量化 请输入您的问题: root@imx95-19x19-lpddr5-evk:~/eiq_genai_flow# ./eiq_genai_flow--使用中子 目标设备:i.MX95 [NeutronEP:分配器] CMA 用户空间内存 1536 MB Neutron:内核缓冲区虚拟地址 0xfffe50e00000,填充地址 0x100000000,对齐地址 0x100000000,大小 0x80000000,对齐方式 0x0 高位 0x1,低位 0x0,偏移量 0x0 [NeutronEP:分配器] 0 0xfffe50e00000 512 MB [NeutronEP:分配器] 1 0xfffe70e00000 512 MB [NeutronEP:分配器] 2 0xfffe90e00000 512 MB 2025-05-20 21:21:54.180329391 [W:onnxruntime:, session_state.cc:1168VerifyEachNodeIsAssignedToAnEp] 某些节点未分配给首选执行提供程序,这可能会对性能产生负面影响,也可能不会。例如ORT 明确地将与形状相关的操作分配给 CPU 以提高性能。2025-05-20 21:21:54.180415808 [W:onnxruntime:, session_state.cc:1170VerifyEachNodeIsAssignedToAnEp] 在非最小构建版本上以详细输出重新运行将显示节点分配。使用的LLM:danube-onnx TTS模型采用16kHz量化 请输入您的问题: 当我询问关于I2C(一种由NXP(前身为飞利浦)开发的通信标准)时,我得到了以下答复。(有关I2C总线的文章,请参见此处。) YuseiUegama_0-1749459986192.png 本演示中使用的 LLM 为 Danube(5 亿参数),量化级别为 int8。以下是基准测试信息。 平台 加速器 首次令牌到达时间 (TTFT) 托克/秒 命令 i.MX 95 CPU(6线程) 0.94秒 9.38 ./eiq_genai_flow -b i.MX 95 NPU(中子) 0.59秒 9.72 ./eiq_genai_flow -b --use_neutron 注意:此演示将在 2 小时后超时。 5. RAG 演示 5.1.什么是 RAG? RAG(搜索增强与生成)通过基于知识库中的事实信息来解释输入,从而增强 LLM 的响应。这显著提高了响应与提示的相关性,并减少了 LLM 的幻觉。此演示使用 all-MiniLM-L6-v2(2200 万个参数)和 int8 量化。 5.2.RAG 使用示例 该应用程序可用于各种产品,包括工业设备、汽车设备和医疗设备,但作为用例,我们将考虑胰岛素注射器。 首先,如果您询问在只有 LLM 而没有 RAG的环境中应该在哪里注射胰岛素,LLM 将使用其通用知识库生成以下答案: $ ./eiq_genai_flow--使用中子 YuseiUegama_1-1749460020221.png 生成的答案是“上臂”,但如果指定产品注射到不同的部位,这将出现问题,如下图所示。 YuseiUegama_2-1749460106966.png 在本演示中,上述说明已转换为 RAG 数据库,因此可以纠正答案。 使用 --use-rag 选项运行演示程序,并提出同样的问题。 $ ./eiq_genai_flow--use-neutron --use-rag YuseiUegama_3-1749460170890.png 我们确认所获得的答案符合数据库指令的规范。 6. RAG数据库更新 NXP 在以下链接提供了一个 RAG 数据库生成器: dm-eiq-genai-flow-demonstrator/retrieval-database-generator at main · nxp-appcodehub/dm-eiq-genai-flow-demonstrator · GitHub YuseiUegama_2-1749459852554.png 6.1.在主机上进行设置 在默认环境下,胰岛素注射器手册已经编译到 RAG 数据库中,但本章我们将从 PDF 文件更新数据库。 移动到 edm-eiq-genai-flow-demonstrator 下的 retrieval-database-generator 目录,该目录是您在第 3 章中克隆的。 $ cd retrieval-database-generator 安装所需软件包 $ ./install.sh 要在此生成器的解析过程中使用对接功能,请运行以下命令: $ pip install docling==2.14.0 检索数据库生成器目录具有以下结构: 将要转换为 RAG 数据库的 PDF 文件放在 input_files 目录下。 . ├── assets ├── install.sh ├── LICENSE.txt ├── pyproject.toml ├── README.md └── src ├── data │ ├── chunked_files │ ├── input_files │ │ └── <<< PUT PDF FILES HERE >>> │ ├── parsed_files │ └── rag_database.pkl ├── document_parsing └── rag 这次,我们将使用i.MX 机器学习用户指南作为验证文件,该指南总结了 i.MX 的 AI/ML 相关信息。 $ cd src/data.input_files $ wget https://www.nxp.com/docs/en/user-guide/IMX-MACHINE-LEARNING-UG.pdf 现在设置已经完成,我们将开始将 PDF 文件转换为数据库的过程。 6.2 解析 PDF 使用以下命令将 input_files 中的 pdf 文件转换为 md(Markdown)格式。 $ python -m document_parsing 解析成功完成后,您可以看到 PDF 已转换为 MD,如下所示。 PDF YuseiUegama_4-1749460249764.png md(Markdown) YuseiUegama_5-1749460272708.png 6.3.生成块(Markdown -> 块) 使用以下命令将 md 文件转换为块。 $ python -m rag.preprocessing.generate_chunks 分块成功完成后,将在 chunked_filesd 目录中生成一个 json 文件。 也可以通过手动编辑此文件来手动修改数据库。 请参阅Medical_hand_made_chunks.json 。 { "id": { <--- A unique identifier (mandatory) "chunks": [], <--- A list of text chunks (mandatory) "metadata": "...", <--- Additional metadata (optional) ... <--- Other optional metadata fields }, ... <--- Other dict of chunks and metadata } 6.4.生成 RAG 数据库(块->pkl) 使用以下命令将数据块转换为数据库(pkl)。 $ python -m rag.preprocessing.generate_embeddings 6.5.RAG数据库操作检查 您可以使用以下命令检查您创建的数据库的运行情况。 $ python -m rag -v 作为测试,我们来查询一下“tensorflow-lite demo”的路径,该路径在i.MX 机器学习用户指南中描述如下: PDF摘录 YuseiUegama_6-1749460330359.png RAG验证结果 YuseiUegama_7-1749460340073.png 得到了我想要的答案! 使用FTP、SD 卡写入器等方式,将上述过程中创建的pkl文件传输到i.MX 95EVK上的“eiq_genai_flow/rag/src/data/”文件夹,从而更新RAG数据库。 6.6.使用 EVK 进行验证 首先,我想问一下不使用 RAG 的TensorFlow lite 演示。 $ ./eiq_genai_flow--使用中子 YuseiUegama_0-1749461872635.png LLM 生成了一个通用答案。 接下来,启用 RAG并提出相同的问题。 $ ./eiq_genai_flow--use-neutron --use-rag YuseiUegama_1-1749461892853.png 我们已确认我们的自定义数据库在 EVK 上运行正常! 7. 音频输入/输出演示 eIQ Gen AI Flow 还支持语音输入和输出。 7.1.设置 如图所示,将扬声器和麦克风连接到 EVK 上的音频插孔。 YuseiUegama_1-1749459822093.png 7.2.演示运行 在 EVK 上运行演示程序,并使用选项“--input-mode vasr”。 $ ./eiq_genai_flow--use-neutron --输入模式 vasr 将显示以下等待窗口,说出唤醒词“Hey NXP”后即可开始语音输入。 剧透 (选中阅读) root@imx95-19x19-lpddr5-evk:~/eiq_genai_flow# ./eiq_genai_flow--use-neutron --i 输入模式 vasr 目标设备:i.MX95 [VITapp] 支持的唤醒词: [VITapp] '嘿,恩智浦!' 使用的ASR模型:whisper-small.en [NeutronEP:分配器] CMA 用户空间内存 1536 MB Neutron:内核缓冲区虚拟地址 0xfffdca200000,填充地址 0x100000000,对齐地址 0x100000000,大小 0x80000000,对齐方式 0x0 高位 0x1,低位 0x0,偏移量 0x0 [NeutronEP:分配器] 0 0xfffdca200000 512 MB [NeutronEP:分配器] 1 0xfffdea200000 512 MB [NeutronEP:分配器] 2 0xfffe0a200000 512 MB 2025-05-20 22:01:40.086599445 [W:onnxruntime:, session_state.cc:1168VerifyEachNodeIsAssignedToAnEp] 某些节点未分配给首选执行提供程序,这可能会对性能产生负面影响,也可能不会。例如ORT 明确地将与形状相关的操作分配给 CPU 以提高性能。 2025-05-20 22:01:40.086685028 [W:onnxruntime:, session_state.cc:1170VerifyEachNodeIsAssignedToAnEp] 在非最小构建版本上以详细输出重新运行将显示节点分配。 使用的LLM:danube-onnx TTS模型采用16kHz量化 ### ## Speak the wakeword to start ## ### root@imx95-19x19-lpddr5-evk:~/eiq_genai_flow# ./eiq_genai_flow--use-neutron --i 输入模式 vasr 目标设备:i.MX95 [VITapp] 支持的唤醒词: [VITapp] '嘿,恩智浦!' 使用的ASR模型:whisper-small.en [NeutronEP:分配器] CMA 用户空间内存 1536 MB Neutron:内核缓冲区虚拟地址 0xfffdca200000,填充地址 0x100000000,对齐地址 0x100000000,大小 0x80000000,对齐方式 0x0 高位 0x1,低位 0x0,偏移量 0x0 [NeutronEP:分配器] 0 0xfffdca200000 512 MB [NeutronEP:分配器] 1 0xfffdea200000 512 MB [NeutronEP:分配器] 2 0xfffe0a200000 512 MB 2025-05-20 22:01:40.086599445 [W:onnxruntime:, session_state.cc:1168VerifyEachNodeIsAssignedToAnEp] 某些节点未分配给首选执行提供程序,这可能会对性能产生负面影响,也可能不会。例如ORT 明确地将与形状相关的操作分配给 CPU 以提高性能。2025-05-20 22:01:40.086685028 [W:onnxruntime:, session_state.cc:1170VerifyEachNodeIsAssignedToAnEp] 在非最小构建版本上以详细输出重新运行将显示节点分配。使用的LLM:danube-onnx TTS模型采用16kHz量化 ### ## Speak the wakeword to start ## ### 您可以在下面的视频中看到音频输入和输出。 (在“我的视频”中查看) 8. 总结 使用eIQ Gen AI Flow和SoC i.MX 95 ,可以评估 LLM+RAG,这对于嵌入式设备来说是理想的选择。 我们拥有端到端的解决方案环境,其中不仅包括 LLM 和 RAG,还包括音频输入/输出环境。 通过使用RAG 生成器,即使是 LLM 和 RAG 初学者也可以轻松自定义他们的 RAG 数据库。 ========================= 我们目前无法回复此帖子“评论”部分的评论。 对于由此造成的不便,我们深表歉意。如有任何疑问,请参阅“ NXP技术问题-如何联系我们(日语博客) ”。 (如果您已经是恩智浦的分销商或与恩智浦有合作关系,您可以直接询问负责人。) 要在嵌入式设备的有限资源内使用 LLM,需要RAG 。 在本文中,我们将以实践操作的形式介绍 NXP 的 LLM + RAG 解决方案“eIQ GenAI Flow” 。 i.MX处理器 MCUXpresso SDK SW | 下载 技术聚焦 日本博客
查看全文
下一代非易失性存储器MRAM:其特性(日文博客) 下一代非易失性存储器, MRAM 随着制程技术的不断进步,将传统闪存集成到28纳米及以下世代的微控制器中变得越来越困难。因此,许多公司正在考虑用非易失性存储器(NVM)来替代闪存,用于其下一代微控制器。其中一种替代方案是磁阻随机存取存储器( MRAM ),这是一种利用磁性来存储数据的下一代非易失性存储器。 恩智浦半导体和台积电将携手推出业界首款采用16nm FinFET工艺的汽车嵌入式MRAM 。 https://www.nxp.jp/company/about-nxp/newsroom/NW-NXP-AND-TSMC-DELIVER-FIRST16NM-FINFET-MRAM 恩智浦半导体将在其最近发布的S32K5系列汽车微控制器中采用MRAM。 https://www.nxp.jp/products/S32K5 Keita_Nagashima_0-1753852859023.png 以下是MRAM与现有闪存相比的一些一般特性: 特征 MRAM 闪存​ 重写速度 高速 晚的 重写电阻 非常高 有限的 数据保留期限 几十年 几年到十年 即时的 高(接近DRAM) 低(带写入延迟) ・MRAM极快的写入速度不仅在产品开发过程中非常便捷,还能显著缩短大规模生产线上的程序写入时间,从而降低生产成本。我们相信,这也有助于实现高速处理,并在执行FOTA时降低功耗。 ・与闪存不同,MRAM 无需先擦除数据即可覆盖写入,这使得软件开发成为可能。 此外,MRAM 的重写次数远高于闪存,因此无需区分程序和数据记录用途,使用起来更加灵活。在某些情况下,它还可以用作速度稍慢的 SRAM。 概括 -虽然下一代主流汽车系统非易失性存储器的发展在一定程度上取决于未来的市场趋势,但我们相信,由于工艺小型化而实用性提高的 MRAM 无疑是下一代产品的领先候选者。 ========================= 我们目前无法回复此帖子“评论”部分的评论。 对于由此造成的不便,我们深表歉意。如有任何疑问,请参阅“ NXP技术问题-如何联系我们(日语博客) ”。 (如果您已经是恩智浦的分销商或与恩智浦有合作关系,您可以直接询问负责人。) ​ 随着制程技术的不断缩小,将传统闪存集成到28纳米及以下世代的微控制器中变得越来越困难,因此许多公司正在考虑用非易失性存储器(NVM)来替代闪存,用于其下一代微控制器。MRAM 就是这样一种非易失性存储器。 本文介绍了MRAM的特性。 (阅读时间:5分钟) 通用微控制器 技术聚焦 日本博客
查看全文
S32DSの証明書 サードパーティ認証要件を満たした S32DS の証明書を提供できますか? Re: Certificate of S32DS S32DSまたはRTDのリリースノートとMCUのエラッタシート Re: Certificate of S32DS はい、分かりました。まだいくつか質問があります。MCU (S32K144) の S32DS の既知の脆弱性と欠陥の対応する表はありますか?ソフトウェア開発におけるこれらの脆弱性や欠陥を回避するにはどうすればよいでしょうか? Re: Certificate of S32DS S32DS は、無料のコンパイラである GCC をネイティブで使用するため、ASIL 開発には使用できません。 CASE アプリケーションが ISO26262 に準拠する必要がある場合、認定コンパイラが必要です。IAR、GHS、Diab は認定されていますが、無料ではないことはわかっています。S32DS IDEs で使用される外部コンパイラ用のプラグインがあります。 Re: Certificate of S32DS プロジェクトのセーフティ認証に関して問題があります。機能安全評価の 1 つにツール信頼性評価があり、ソフトウェア開発プロセス中の関連ツールが ASIL レベルの要件を満たすことができるかどうかを評価する必要があります。無料のデフォルトツールとして、S32DS はソフトウェア開発の機能安全レベルを満たすことをCAN保証できますか?対応する証明書または認定資格をお持ちですか? Re: Certificate of S32DS もっと具体的に教えていただけますか?
查看全文
S32K312 Wkup 恩智浦的支持者们,你们好。我使用基于 LLD 的 S32K312 配置了一组代码。现在我想内置 WKUP 功能,但我遇到了一些问题。如果我不在代码中添加以下代码: Power_Ip_Init(&Power_Ip_HwIPsConfigPB); Power_Ip_GetResetReason(); Power_Ip_SetMode(&Power_Ip_aModeConfigPB[0]);   程序将进入待机模式,但唤醒后会异常运行。如果我添加以下代码 Power_Ip_Init(&Power_Ip_HwIPsConfigPB); Power_Ip_GetResetReason(); Power_Ip_SetMode(&Power_Ip_aModeConfigPB[0]);   调用 ADC、PWM 等其他外设接口获取数据时,会出现硬件错误,如 Adc_Sar_Ip_GetConvData、Emios_Icu_Ip_StartSignalMeasurement 等。 如果我不调用外围接口,程序通常可以进入待机模式并唤醒。原因何在?故障排除的方向是什么?很抱歉,我的代码不能共享。 Re: S32K312 Wkup 你好@ZZZZJH、 是的,有一些区别,正常待机退出将同时执行 HSE& sBAF 初始化代码和 HSE_FW 校验,而快速待机退出将绕过以节省时间。此外,快速待机退出将启动到用户定义的地址,在调用 Reset_Handler 和完全初始化 MCU 之前,用户可以在该地址执行一些关键任务。 Julin_AragnM_0-1754494200655.png 您可以从 S32K3 参考手册第 41.2 章中找到完整的详细信息。 致以最诚挚的问候, Julián Re: S32K312 Wkup 谢谢,朱利安!出现上述问题是因为我的电源中的MCU外设元器件未启用。这导致了硬件错误。问题已经解决。我目前使用的是正常的待机模式。请问 "快速 "和 "正常 "之间有什么区别吗? Re: S32K312 Wkup 你好@ZZZZJH、 我不确定第一段代码和第二段代码之间有什么区别,但听起来你好像缺少了 POWER 驱动程序中的某些配置。如果未启用元器件,则尝试初始化或使用它会导致硬故障。 例如,在运行模式下,在 MCUPersederAppertional 选项卡中确认是否启用了 ADC 和 PWM 实例: Julin_AragnM_0-1754409469175.png 另外,您使用的是快速待机还是普通待机退出?如果使用 fast,则必须在唤醒后跳转到 “RESET 处理器” 才能正确初始化 MCU。 下面的社区帖子中还有一些低功耗配置示例: [RTD400 & 500 MCAL & IP] S32K3 电源管理单元 AN 和演示-恩智浦社区 S32K3 电源管理单元 AN 和演示-恩智浦社区 致以最诚挚的问候, Julián
查看全文
S32K(ST05 板)上未收到 CAN FD 远程帧响应 说明: 你好、 我正在研究 CAN FD 设置,我使用 ST05 板作为一个节点,将 PeakCan 用作另一个节点。 我从 ST05 发送一个远程帧。 在 PeakCAN 上,我可以在 PeakView 中看到这个远程帧。 然后,我从 PeakCAN 手动发送一个数据帧(具有相同的 ID)作为响应。 问题: ST05 板未收到数据帧响应。 注意: 我使用的是一个信息缓冲器。缓冲区首先用于传输远程帧,然后在发送后自动切换到RX 模式。 远程帧传输正常,但接收不到响应数据帧。 问题 在发送远程帧和接收相应数据帧时使用同一个信息缓冲区是否有任何限制? 我是否需要配置单独的 RX 报文缓冲区,以便在发送远程帧后接收数据帧? 还是我遗漏了 FlexCAN 中的某些配置? 提前感谢! Re: CAN FD Remote Frame Response Not Received on S32K (ST05 board) 您好, 在 CAN FD 中,完全不支持远程帧 - 远程请求替换 (RRS) 始终占主导地位 (0)。当配置 TX MB 发送 CAN FD 帧时,RTR 必须为 0,因此不会切换到 RX MB。 对于经典 CAN 帧,RTR 是有效的,切换到 RX MB 将对 FlexCAN 起作用。 BR, Petr
查看全文
eMIOSによるDMAを定期的にトリガーする こんにちは、 私は S32K344 を使用しており、以前はPIT を使用して DMA 転送を定期的にトリガーしていました(具体的には、あるバッファーから別のバッファーにデータを移動していました)。この設定はうまく機能しました。 現在、 PIT を eMIOS に置き換えてDMAMUXを定期的にトリガーしようとしていますが、問題が発生しています。私は、OPWMB モードで eMIOS を使用してこれを実装し、周期的な信号を生成して、PIT と同様に DMAMUX をトリガーすることを期待しました。ただし、DMA 転送は行われていないようです。 デザインを明確にし、サポートを得るために、セットアップを再現する最小限のサンプル プロジェクトを作成しました。含まれるもの: 定期的な出力用に設定されたeMIOS トリガー時にデータを転送するためのDMAMUXとDMAのセットアップ 単純なバッファ間転送 どなたか調べていただき、何が問題なのかを特定したり、eMIOS が DMAMUX を確実にトリガーするための正しい構成を提案していただければ幸いです。 Re: Trigger the DMA by eMIOS periodically こんにちは、 はい、フラグが設定されると DMA 要求が生成されます。フラグ設定時間は使用するモードによって異なるCAN。 OPWMB モードでは、これは BS1 一致 (後縁) または AS1/BS1 両方一致 (前縁/後縁) のいずれかになります。 OPWMT モードでは、フラグは AS2 マッチ時にのみ設定されます。AS1、BS1、または BS2 の一致はフラグに影響しません。SO、フラグ生成はエッジの配置に依存せず、PWM 期間にわたって自由に設定できます。 BR、ペトル Re: Trigger the DMA by eMIOS periodically こんにちは、 今は動作しています。情報ありがとうございます! eMIOS PWMを使用して DMA を定期的にトリガーする必要があります。現在の設定では、 25 µs 周期のOPWMB モードを使用しています。私の理解では、DMA 要求はフラグが設定されたときに生成され、これはPWM 期間の終了時に発生します。 ご確認いただけますでしょうか: OPWMB モードでは、DMA 要求は後縁、つまり期間の終わりにタイムベース カウンタがリロードされるときにトリガーされますか? また、定期的な DMA トリガーの場合、 OPWMT モードの方がOPWMBよりも正確かどうかも検討しています。 たとえば、タイムベースを25 µs (つまり、1000 ティック)に設定し、 TRIGGR を1000 ティックでアクティブにするように設定した場合、 OPWMT はより優れた制御またはタイミング精度を提供しますか? 定期的な DMA トリガーに最適なモードについて、詳細な洞察や推奨事項を共有していただければ幸いです。 よろしくお願いいたします! Re: Trigger the DMA by eMIOS periodically こんにちは、 eMIOS チャネルで DMA トリガーが完全に有効化されていませんでした。以下のコードを追加 PetrS_0-1760514820816.png BR、ペトル
查看全文
在 i.MX 8MP 上拉动 RTSP 数据流失败 嗨,社区 # iMX 800 万像素 @ Harvey021 我在拉取 rtsp 数据流时遗漏了一个问题。 "RTSP_URL" 已通过 VLC 验证。 视频编码H264 命令:gst-用上市-1.0 rtspsrc location=$rtsp_URL 队列!rtph264depay !V4L2H264DEC !自动视频水槽 目标图像版本: linux6.6.36 full 目标机: i.MX 8mp noway_1-1762140306278.png Re: Pull RTSP stream failed on i.MX 8MP 你好, 是否有更多信息? 致敬, Zhiming Re: Pull RTSP stream failed on i.MX 8MP 视频的帧频为 10。详细信息如下。 noway_0-1762829616720.png Re: Pull RTSP stream failed on i.MX 8MP 你好@noway 如果你想解码 60FPS 的视频,最大分辨率是 1080p,而 gstreamer 的最大分辨率是有限的。 随着 VPU 分辨率的提高,性能也会下降。 对于 opencv,您可以尝试以下配置。 gst = f"rtspsrc location={RTSP_URL} protocols=tcp latency=50 ! " \ f"rtph265depay ! h265parse config-interval=-1 ! " \ f"decodebin ! videoconvert ! video/x-raw,format=BGR ! " \ f"queue max-size-buffers=1 leaky=downstream ! " \ f"appsink drop=true max-buffers=1 sync=false" cap = cv2.VideoCapture(gst, cv2.CAP_GSTREAMER) 致敬, Zhiming Re: Pull RTSP stream failed on i.MX 8MP 感谢您的回复,解码现已正常。不过,我仍然有两个问题: 当我将视频分辨率从 1080p 改为 2K 时,它无法解码 有关日志请参阅附件"pull.log" 。 2.使用 Python 解码时,我发现获取一帧数据需要 0.4 秒--为什么这么慢? 代码请参阅附件"rtsp.py" 。 noway_0-1762767557119.png Re: Pull RTSP stream failed on i.MX 8MP 您好, 请尝试使用以下命令分割音频和视频配置。 gst-launch-1.0 -v rtspsrc location=xxxxx name=src protocols=tcp latency=100 \ src. ! queue ! application/x-rtp,media=video,encoding-name=H264,payload=96 ! rtph264depay ! h264parse ! v4l2h264dec! videoconvert ! autovideosink \ src. ! queue ! application/x-rtp,media=audio,encoding-name=MPEG4-GENERIC,payload=97 ! rtpmp4gdepay ! aacparse ! avdec_aac ! audioconvert ! audioresample ! autoaudiosink 致敬, Zhiming Re: Pull RTSP stream failed on i.MX 8MP 他表示没有找到 avdec_h264。 noway_0-1762331427583.png 然后我尝试了 v4l2h264dec,或非成功。错误日志请参阅附件。 正在尝试命令:gst-用上市,不用发布-1.0-v rtspsrc location=$RTSP_URL protocols=tcp latency=100 !rtph264depay !V4L2H264DEC !autovideosink> pull.log 2>& 1 Re: Pull RTSP stream failed on i.MX 8MP 你好, ,请尝试使用以下命令。 gst-launch-1.0 -v rtspsrc location=$RTSP_URL protocols=tcp latency=100 ! rtph264depay ! avdec_h264 ! autovideosink 致敬, Zhiming
查看全文