英飞凌
直播中

李丽华

7年用户 1403经验值
私信 关注

XMC1400试了很多次都无法与mfrc522连接,为什么?

我是 XMC 领域的新手,正在尝试与 mfrc522 通信,谁能指出我的代码哪里出了问题,我试了很多次都无法与 mfrc522 连接。  
以下是我的 SPI 设置和引脚布局
XMC_USIC_CH_t *spi_master_ch = XMC_SPI0_CH0;
//Master Mode U1C0
XMC_GPIO_CONFIG_t master_rx_pin_config;
XMC_GPIO_CONFIG_t master_tx_pin_config;
XMC_GPIO_CONFIG_t master_selo_pin_config;
XMC_GPIO_CONFIG_t master_clck_pin_config;
XMC_GPIO_PORT_t *master_rx_pin = XMC_GPIO_PORT1;
XMC_GPIO_PORT_t *master_tx_pin = XMC_GPIO_PORT1;
XMC_GPIO_PORT_t *master_selo_pin = XMC_GPIO_PORT0;
XMC_GPIO_PORT_t *master_clck_pin = XMC_GPIO_PORT0;
XMC_SPI_CH_CONFIG_t spi_config_masterMode;

int main(空白)
{
主机模式
/*SPI 配置*/
spi_config_masterMode.baudrate = 200000; //100000;
spi_config_masterMode.bus_mode = XMC_SPI_CH_BUS_MODE_MASTER;
spi_config_masterMode.selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS;
spi_config_masterMode.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE;

/*初始化 SPI*/
XMC_SPI_CH_Init(spi_master_ch, spi_config_masterMode);

XMC_SPI_CH_DisableFEM(spi_master_ch);

XMC_SPI_CH_SetBitOrderMsbFirst(spi_master_ch);
XMC_SPI_CH_SetWordLength(spi_master_ch, 8); //16
XMC_SPI_CH_SetFrameLength(spi_master_ch, (uint8_t)64);

/* 配置时钟极性和时钟延迟 */
XMC_SPI_CH_ConfigureShiftClockOutput(spi_master_ch、
已启用 xmc_spi_ch_brg_shift_clock_passive_level_0_delay_enabled、
xmc_spi_ch_brg_shift_clock_output_sclk);
/* 配置前导/后导延迟 */
XMC_SPI_CH_SetSlaveSelectDelay(spi_master_ch, 2U);

/*已选择输入源*/
XMC_SPI_CH_SetinputSource(spi_master_ch, XMC_SPI_CH_INPUT_DIN0 ,USIC0_C0_DX0_P1_1); //P1.1 MasterInSlaveOut MISO_USIC0_CH0.DX0D

GPIO 配置
master_rx_pin_config.mode = XMC_GPIO_MODE_INPUT_TRISTATE;
XMC_GPIO_Init(master_rx_pin, 1, master_rx_pin_config);
GPIO 配置
master_tx_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT7;
XMC_GPIO_Init(master_tx_pin, 0, master_tx_pin_config); //P1.0 主输出从输入 MOSI_USIC0_CH0.DOUT0

/*GPIO 从站选择线路引脚配置*/
master_selo_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6;
XMC_GPIO_Init(master_selo_pin, 13, master_selo_pin_config); //P0.13 ChipSelect_USIC0_CH0.SELO4

GPIO 配置
master_clck_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6; //P0.7 Clock_USIC0_CH0.SCLKOUT
XMC_GPIO_Init(master_clck_pin, 7, master_clck_pin_config);

/*启动 SPI*/
XMC_SPI_CH_Start(spi_master_ch);

/* 启动 RC522 */
MFRC522_Init();

而 (1U)
{
如果 (MFRC522_Check(CardID) == MI_OK)
{
XMC_GPIO_ToggleOutput(LED0);
}

}


下面是 RC522 修改后的代码:
外接 XMC_USIC_CH_t *spi_master_ch;

uint16_t SPI1SendByte(uint16_t data) {
uint16_t uiDataReceived = 0x00;

//XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4);
XMC_SPI_CH_Transmit(spi_master_ch, data, XMC_SPI_CH_MODE_STANDARD);
/*等待字节传送完毕*/
while((XMC_SPI_CH_GetStatusFlag(spi_master_ch)  XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION) ==0U)
{
/* 等待 ACK */
}
XMC_SPI_CH_ClearStatusFlag(spi_master_ch,XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION);
//XMC_SPI_CH_DisableSlaveSelect(spi_master_ch);
// while((XMC_SPI_CH_GetStatusFlag(spi_master_ch)  (XMC_SPI_CH_STATUS_FLAG_RECEIVE_INDICATION |)
// xmc_spi_ch_status_flag_alternative_receive_indication)) ==0u)
// {
// /* 等待 ACK */
// }
uiDataReceived = XMC_SPI_CH_GetReceivedData(spi_master_ch);
返回 uiDataReceived;
}


uint16_t test4=0;
void SPI1_WriteReg(uint8_t address, uint8_t value) {
// cs_reset();
XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4);
SPI1SendByte(address);
SPI1SendByte(value);
XMC_SPI_CH_DisableSlaveSelect(spi_master_ch);
// cs_set();;
}

uint8_t SPI1_ReadReg(uint8_t address) {
uint8_t val;
// cs_reset();
XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4);
SPI1SendByte(address);
val = SPI1SendByte(0x00);
XMC_SPI_CH_DisableSlaveSelect(spi_master_ch);
// cs_set();
return val;
}

回帖(1)

茶缸子

2024-5-22 17:31:02
首先,我们需要确保 SPI 设置和引脚布局是正确的。根据您提供的代码片段,我们可以逐步检查并找出可能的问题。

1. 确保 SPI 通道已正确初始化:
   确保您已经正确初始化了 XMC_SPI0_CH0,包括设置 SPI 时钟、数据速率等。

2. 检查引脚配置:
   根据您的代码,您已经为 SPI 设置了接收、发送、选择和时钟引脚。请确保这些引脚与您的硬件连接正确。

3. 检查 SPI 初始化函数:
   确保您已经调用了 SPI 初始化函数,例如 `XMC_SPI_CH_Init`,以正确配置 SPI 通道。

4. 检查 MFRC522 初始化代码:
   确保您已经正确初始化了 MFRC522 模块,包括设置 SDA 和 SCK 引脚。

5. 检查 SPI 通信代码:
   确保您的 SPI 通信代码是正确的,包括发送和接收数据。您可以参考 MFRC522 的数据手册来了解如何与其进行通信。

6. 检查错误处理:
   在您的代码中添加错误处理,以便在出现问题时能够及时发现并解决。

7. 使用调试工具:
   使用调试工具(如断点、监视窗口等)来检查 SPI 通信过程中的数据和状态。

8. 检查硬件连接:
   确保您的硬件连接正确,包括电源、地线、SPI 引脚等。

9. 参考示例代码:
   查找一些关于 XMC 和 MFRC522 的示例代码,以便更好地了解如何正确设置和通信。

通过以上步骤,您应该能够找到代码中的问题并解决它们。如果问题仍然存在,请提供更详细的代码和错误信息,以便我们能够更具体地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分