با سلام با وجود اینکه از spi و ارتباط مطمن هستم و رجیسترهای mfrc522 را به درستی می توانم رید کنم ولی هیچ نوشتنی درست انجام نمی شودتابع نوشتنم درست است و حتی بالاجیک آنلایزر هم می بینم که دیتاها صحیح هستند
مشکل از کجا می تواند باشد
رجیستر VersionReg را می خوانم و مقدار 92 هگزدارد که نشان می دهد درست است و بقیه رجیسترها هم مقدار default زا دارند ولی هرکدام را تغییر می دهم بعد از رید کردن همان مقدار پیش فرض را دارد و رجیستر ErrorReg هم 0 است
و در نهایت برنامه کارتی ار نمی خواند
با لاجیک آنالایزر دستور نوشتن برای رجیستر 0x11 به مقدار 0x3d دقیقا می بینم که اول 0x22 و بعد 0x3d می آید که فکر کنم درست است
مشکل از کجا می تواند باشد
کد:
void WriteRawRC(unsigned char Address, unsigned char value) { uint8_t buf; buf = (Address << 1) & 0x7E; HAL_GPIO_WritePin(RD_SS_Port, RD_SS_Pin, GPIO_PIN_RESET); while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY_TX); HAL_SPI_Transmit(&hspi1,&buf,1,2000); while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY_TX); buf=value; HAL_SPI_Transmit(&hspi1,&buf,1,2000); while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY_TX); HAL_GPIO_WritePin(RD_SS_Port, RD_SS_Pin, GPIO_PIN_SET); } unsigned char ReadRawRC(unsigned char Address) { uint8_t val; uint8_t buf; HAL_GPIO_WritePin(RD_SS_Port, RD_SS_Pin, GPIO_PIN_RESET); buf = ((Address << 1) & 0x7E) | 0x80; if (HAL_SPI_Transmit(&hspi1, &buf, 1, 0xFFFF) == HAL_OK) { buf = MFRC522_DUMMY; HAL_SPI_TransmitReceive(&hspi1, &buf, &val, 1, 0xFFFF); } HAL_GPIO_WritePin(RD_SS_Port, RD_SS_Pin, GPIO_PIN_SET); return val; }
و در نهایت برنامه کارتی ار نمی خواند
با لاجیک آنالایزر دستور نوشتن برای رجیستر 0x11 به مقدار 0x3d دقیقا می بینم که اول 0x22 و بعد 0x3d می آید که فکر کنم درست است
دیدگاه