Estoy intentando comunicarme con el chip rc522 con el uso de este código , solo modifiqué el SPI llamadas para usar las bibliotecas HAL y SPI inicializado con las bibliotecas HAL. Mantuvo todas las demás funciones intactas. Ahora la imagen de abajo es lo que capturé con mi analizador lógico y realmente no tengo idea de qué estoy haciendo mal. Para mi nuevo ojo, mi comunicación SPI se ve bien. Sin embargo, el chip no está devolviendo nada y recibo 0xFF cada vez (también capturé eso con mi analizador lógico mientras que el rc522 estaba conectado a mi STM32F7Discovery).
¿Alguientienealgunaideadeporquémichipnorespondeenabsoluto?
EstoyinicializandomiSPIcon:
/*SPISCKGPIOpinconfiguration*/GPIO_InitStruct.Pin=SPIx_SCK_PIN;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;GPIO_InitStruct.Alternate=SPIx_SCK_AF;HAL_GPIO_Init(SPIx_SCK_GPIO_PORT,&GPIO_InitStruct);/*SPIMISOGPIOpinconfiguration;MISOlineshouldbefloating*/GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Pin=SPIx_MISO_PIN;GPIO_InitStruct.Alternate=SPIx_MISO_AF;HAL_GPIO_Init(SPIx_MISO_GPIO_PORT,&GPIO_InitStruct);/*SPIMOSIGPIOpinconfiguration*/GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Pin=SPIx_MOSI_PIN;GPIO_InitStruct.Alternate=SPIx_MOSI_AF;HAL_GPIO_Init(SPIx_MOSI_GPIO_PORT,&GPIO_InitStruct);/*SPICSGPIOpinconfiguration*/GPIO_InitStruct1.Pin=SPIx_CS_PIN;GPIO_InitStruct1.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct1.Speed=GPIO_SPEED_HIGH;GPIO_InitStruct1.Pull=GPIO_PULLUP;HAL_GPIO_Init(SPIx_CS_GPIO_PORT,&GPIO_InitStruct1);SPIx_CLK_ENABLE();SpiHandle.Instance=SPIx;SpiHandle.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32;SpiHandle.Init.Direction=SPI_DIRECTION_2LINES;SpiHandle.Init.CLKPhase=SPI_PHASE_1EDGE;SpiHandle.Init.CLKPolarity=SPI_POLARITY_HIGH;SpiHandle.Init.DataSize=SPI_DATASIZE_8BIT;SpiHandle.Init.FirstBit=SPI_FIRSTBIT_MSB;SpiHandle.Init.TIMode=SPI_TIMODE_DISABLE;SpiHandle.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;SpiHandle.Init.NSS=SPI_NSS_SOFT;SpiHandle.Init.Mode=SPI_MODE_MASTER;
EstoyconectandoelpindereiniciodemiplacadirectamentealpindereinicioRFID-RC522.
Tambiénprobéelchipconlabibliotecademiguelbalboaparaarduinoyfuncionabienallí.
Despuésdepresionarelbotóndereinicioenmitablero,losdosprimerosvaloresnisiquierasondecodificadosporelsoftwaredelanalizador.Siveoloquesesuponequelabibliotecaestáenviandopararestableceres0x01<<1,entonces0x02comoladirecciónreg_command,luego0x0fcomocomandodereiniciodepcd.¿Porquéseríadiferente?
Aquíhayunaimagendecómosevelacomunicaciónjustodespuésdeunrestablecimiento:
Como se puede ver, mi selección de chip baja durante el reinicio y sigue siendo baja cuando comienza la comunicación, aunque puse un pullup en él.
También este párrafo de la hoja de datos me hace pensar que podría haber equivocado los valores de SPI CPOL / CPHA, ya que parece que los datos son estables durante la caída del límite del reloj (pensé que eso es lo que hacía SPI_PHASE_1EDGE):
Los bytes de datos en ambas líneas MOSI y MISO se envían con el MSB primero. Los datos de las líneas MOSI y MISO deben ser estables en el borde ascendente de El reloj y se puede cambiar en el borde descendente. Los datos son proporcionados por el MFRC522 en el borde del reloj descendente y es estable durante el levantamiento borde del reloj.
También a partir de este párrafo, que es el único que describe estos valores, no puedo descifrar cuál debería ser el valor base del reloj. Alto o bajo?