stm32 error A9555E

error A9555E 产生的原因:

“Error code "-25" indicates to that License server system does not support this version of the product. This usually means that you are trying to use an older license with a more recent tool. ”

意思是,你的破解许可证不支持你MDK的版本,通常意味着许可证的版本太落后匹配不上新版的工具。

解决方案:

1.可能是破解的过程出来问题,实在不行可以重新破解一遍或者重装MDK。

2.或者是联系 Flex license server administrator 去更新 the Flex license 

3. 又或者可以降低MDK的版本来适应你的许可证。

具体查看许可证匹配版本方法可以参考 

转载 http://www.keil.com/support/docs/3699.htm

Run lmutil.exe utility tool in your cmd.exe window as follows:

C:\keil_v5\UV4\FlexNet\lmutil.exe lmstat -c 8224@Flex-LIC-Server.Company.COM -a -i

Please note that "8224@Flex-LIC-Server.Company.COM" should be replaced by the port@server_name of your Flex license server.

After such a command is executed, you will see the output similar as follows:

lmutil - Copyright (c) 1989-2014 Flexera Software LLC. All Rights Reserved.
Flexible License Manager status on Tue 4/28/2015 15:30

[Detecting lmgrd processes...]
License server status: 8224@Flex-LIC-Server.Company.COM
    License file(s) on Flex-LIC-Server.Company.COM: C:\Flex-Server\license.dat:

  Flex-LIC-Server.Company.COM: license server UP (MASTER) v11.12.1

Vendor daemon status (on Flex-LIC-Server.Company.COM):

    armlmd: UP v11.12.1

Feature usage info:
Users of mdk_pro:          (Total of 1 license issued;  Total of 0 licenses in use)
Users of mdk_pro_µVision:  (Total of 1 license issued;  Total of 0 licenses in use)
Users of mdk_pro_armasm5:  (Total of 1 license issued;  Total of 0 licenses in use)
Users of mdk_pro_compiler5:(Total of 1 license issued;  Total of 0 licenses in use)
Users of mdk_pro_armlink5: (Total of 1 license issued;  Total of 0 licenses in use)
Users of mdk_pro_fromelf5: (Total of 1 license issued;  Total of 0 licenses in use)
Users of mdk_pro_arm_lcf5: (Total of 1 license issued;  Total of 0 licenses in use)

NOTE: lmstat -i does not give information from the server,
      but only reads the license file.  For this reason,
      lmstat -a is recommended instead.

Feature                         Version     #licenses    Expires      Vendor
_______                         _________   _________    __________   ______
mdk_pro                         5.0          1           1-jan-0      armlmd
mdk_pro                         5.0201408    1           1-jan-0      armlmd
mdk_pro_µVision                 5.0          1           1-jan-0      armlmd
mdk_pro_µVision                 5.0201408    1           1-jan-0      armlmd
mdk_pro_armasm5                 5.0          1           1-jan-0      armlmd
mdk_pro_armasm5                 5.0201408    1           1-jan-0      armlmd
mdk_pro_compiler5               5.0          1           1-jan-0      armlmd
mdk_pro_compiler5               5.0201408    1           1-jan-0      armlmd
mdk_pro_armlink5                5.0          1           1-jan-0      armlmd
mdk_pro_armlink5                5.0201408    1           1-jan-0      armlmd
mdk_pro_fromelf5                5.0          1           1-jan-0      armlmd
mdk_pro_fromelf5                5.0201408    1           1-jan-0      armlmd
mdk_pro_arm_lcf5                5.0          1           1-jan-0      armlmd
mdk_pro_arm_lcf5                5.0201408    1           1-jan-0      armlmd

From such an output you can see the version number 5.0201408 supported by the license on the Flex license server, which means this Flex license only support the products with the valid support date up to the end of August 2014 (201408 means 2014/08). However, your product requires a valid support and maintenance up to at least the end of November 2014 as given above.


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在STM32MP157A上MFRC522的驱动代码。需要注意的是,该代码是在Linux环境下运行的,因此需要使用Linux的GPIO库进行GPIO操作。 ```c #include <linux/module.h> #include <linux/kernel.h> #include <linux/gpio.h> #include <linux/delay.h> #include <linux/spi/spi.h> // GPIO pins used for the MFRC522 #define MFRC522_RST_PIN 114 #define MFRC522_IRQ_PIN 115 // MFRC522 commands #define MFRC522_CMD_IDLE 0x00 #define MFRC522_CMD_CALCCRC 0x03 #define MFRC522_CMD_TRANSMIT 0x04 #define MFRC522_CMD_RECEIVE 0x08 #define MFRC522_CMD_TRANSCEIVE 0x0C #define MFRC522_CMD_AUTHENT 0x0E #define MFRC522_CMD_SOFTRESET 0x0F // MFRC522 registers #define MFRC522_REG_COMMAND 0x01 #define MFRC522_REG_COMMIEN 0x02 #define MFRC522_REG_DIVIEN 0x03 #define MFRC522_REG_COMMIRQ 0x04 #define MFRC522_REG_DIVIRQ 0x05 #define MFRC522_REG_ERROR 0x06 #define MFRC522_REG_STATUS1 0x07 #define MFRC522_REG_STATUS2 0x08 #define MFRC522_REG_FIFO_DATA 0x09 #define MFRC522_REG_FIFO_LEVEL 0x0A #define MFRC522_REG_WATERLEVEL 0x0B #define MFRC522_REG_CONTROL 0x0C #define MFRC522_REG_BITFRAMING 0x0D #define MFRC522_REG_COLL 0x0E #define MFRC522_REG_MODE 0x11 #define MFRC522_REG_TX_MODE 0x12 #define MFRC522_REG_RX_MODE 0x13 #define MFRC522_REG_TX_CONTROL 0x14 #define MFRC522_REG_TX_AUTO 0x15 #define MFRC522_REG_TX_SELL 0x16 #define MFRC522_REG_RX_SELL 0x17 #define MFRC522_REG_RX_THRESHOLD 0x18 #define MFRC522_REG_DEMOD 0x19 #define MFRC522_REG_MF_TX 0x1C #define MFRC522_REG_MF_RX 0x1D #define MFRC522_REG_SERIALSPEED 0x1F #define MFRC522_REG_CRC_RESULT_MSB 0x21 #define MFRC522_REG_CRC_RESULT_LSB 0x22 #define MFRC522_REG_MOD_WIDTH 0x24 #define MFRC522_REG_RF_CFG 0x26 #define MFRC522_REG_GS_N 0x27 #define MFRC522_REG_CWGS_PREG 0x28 #define MFRC522_REG_MODGS_PREG 0x29 #define MFRC522_REG_T_MODE 0x2A #define MFRC522_REG_T_PRESCALER 0x2B #define MFRC522_REG_T_RELOAD_MSB 0x2C #define MFRC522_REG_T_RELOAD_LSB 0x2D #define MFRC522_REG_T_COUNTER_VALUE_MSB 0x2E #define MFRC522_REG_T_COUNTER_VALUE_LSB 0x2F struct mfrc522 { struct spi_device *spi; unsigned int irq_gpio; unsigned int rst_gpio; }; static inline int mfrc522_send_command(struct mfrc522 *mfrc, u8 cmd, u8 *data, size_t len) { int ret; u8 buffer[64]; buffer[0] = cmd; if (len > 0) { memcpy(buffer + 1, data, len); } ret = spi_write(mfrc->spi, buffer, len + 1); if (ret < 0) { dev_err(&mfrc->spi->dev, "Error sending command %02x: %d\n", cmd, ret); return ret; } return 0; } static inline int mfrc522_receive_data(struct mfrc522 *mfrc, u8 *data, size_t len) { int ret; u8 buffer[64]; ret = spi_read(mfrc->spi, buffer, len); if (ret < 0) { dev_err(&mfrc->spi->dev, "Error receiving data: %d\n", ret); return ret; } memcpy(data, buffer, len); return 0; } static inline int mfrc522_reset(struct mfrc522 *mfrc) { gpio_set_value(mfrc->rst_gpio, 0); udelay(100); gpio_set_value(mfrc->rst_gpio, 1); udelay(100); return 0; } static inline int mfrc522_init(struct mfrc522 *mfrc) { int ret; u8 version; u8 buffer[25]; // Reset the MFRC522 mfrc522_reset(mfrc); // Read the MFRC522 version ret = mfrc522_send_command(mfrc, 0x00, NULL, 0); if (ret < 0) { return ret; } ret = mfrc522_receive_data(mfrc, &version, 1); if (ret < 0) { return ret; } dev_info(&mfrc->spi->dev, "MFRC522 version: %d\n", version); // Configure the MFRC522 ret = mfrc522_send_command(mfrc, MFRC522_CMD_SOFTRESET, NULL, 0); if (ret < 0) { return ret; } mdelay(100); // Configure the timer buffer[0] = 0xA0; // TPrescaler = 0xA0 buffer[1] = 0x03; // TReloadVal = 0x3E8 ret = mfrc522_send_command(mfrc, MFRC522_REG_T_MODE, buffer, 2); if (ret < 0) { return ret; } // Configure the TX/RX registers buffer[0] = 0x40; // 100% ASK modulation buffer[1] = 0x3F; // Maximum RX waiting time buffer[2] = 0x03; // Enable MIFARE Crypto1 ret = mfrc522_send_command(mfrc, MFRC522_REG_TX_MODE, buffer, 3); if (ret < 0) { return ret; } buffer[0] = 0x08; // Transceive FIFO level is 8 ret = mfrc522_send_command(mfrc, MFRC522_REG_RX_MODE, buffer, 1); if (ret < 0) { return ret; } // Configure the ModWidthReg buffer[0] = 0x26; // ModWidthReg = 0x26 ret = mfrc522_send_command(mfrc, MFRC522_REG_MOD_WIDTH, buffer, 1); if (ret < 0) { return ret; } dev_info(&mfrc->spi->dev, "MFRC522 initialized\n"); return 0; } static irqreturn_t mfrc522_irq_handler(int irq, void *dev_id) { struct mfrc522 *mfrc = (struct mfrc522 *) dev_id; // TODO: handle the IRQ return IRQ_HANDLED; } static int mfrc522_probe(struct spi_device *spi) { int ret; struct mfrc522 *mfrc; // Allocate memory for the MFRC522 device mfrc = devm_kzalloc(&spi->dev, sizeof(*mfrc), GFP_KERNEL); if (mfrc == NULL) { dev_err(&spi->dev, "Error allocating memory\n"); return -ENOMEM; } // Save a reference to the SPI device mfrc->spi = spi; // Set up the GPIO pins mfrc->irq_gpio = MFRC522_IRQ_PIN; ret = devm_gpio_request(&spi->dev, mfrc->irq_gpio, "MFRC522 IRQ"); if (ret < 0) { dev_err(&spi->dev, "Error requesting IRQ GPIO pin: %d\n", ret); return ret; } gpio_direction_input(mfrc->irq_gpio); mfrc->rst_gpio = MFRC522_RST_PIN; ret = devm_gpio_request(&spi->dev, mfrc->rst_gpio, "MFRC522 RST"); if (ret < 0) { dev_err(&spi->dev, "Error requesting RST GPIO pin: %d\n", ret); return ret; } gpio_direction_output(mfrc->rst_gpio, 1); // Initialize the MFRC522 ret = mfrc522_init(mfrc); if (ret < 0) { dev_err(&spi->dev, "Error initializing MFRC522: %d\n", ret); return ret; } // Register the IRQ handler ret = devm_request_irq(&spi->dev, gpio_to_irq(mfrc->irq_gpio), mfrc522_irq_handler, IRQF_TRIGGER_FALLING, "MFRC522", mfrc); if (ret < 0) { dev_err(&spi->dev, "Error registering IRQ: %d\n", ret); return ret; } return 0; } static int mfrc522_remove(struct spi_device *spi) { // TODO: cleanup return 0; } static const struct of_device_id mfrc522_of_match[] = { { .compatible = "mfrc522", }, {}, }; MODULE_DEVICE_TABLE(of, mfrc522_of_match); static struct spi_driver mfrc522_driver = { .driver = { .name = "mfrc522", .of_match_table = mfrc522_of_match, }, .probe = mfrc522_probe, .remove = mfrc522_remove, }; module_spi_driver(mfrc522_driver); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("MFRC522 driver for STM32MP157A"); MODULE_LICENSE("GPL"); ``` 需要注意的是,以上代码仅供参考,实际应用中可能需要进行更多的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值