اطلاعیه

Collapse
No announcement yet.

نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

    با سلام با وجود اینکه از spi و ارتباط مطمن هستم و رجیسترهای mfrc522 را به درستی می توانم رید کنم ولی هیچ نوشتنی درست انجام نمی شودتابع نوشتنم درست است و حتی بالاجیک آنلایزر هم می بینم که دیتاها صحیح هستند
    مشکل از کجا می تواند باشد

    کد:
    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;
    
    
    }
    رجیستر VersionReg را می خوانم و مقدار 92 هگزدارد که نشان می دهد درست است و بقیه رجیسترها هم مقدار default زا دارند ولی هرکدام را تغییر می دهم بعد از رید کردن همان مقدار پیش فرض را دارد و رجیستر ErrorReg هم 0 است
    و در نهایت برنامه کارتی ار نمی خواند

    با لاجیک آنالایزر دستور نوشتن برای رجیستر 0x11 به مقدار 0x3d دقیقا می بینم که اول 0x22 و بعد 0x3d می آید که فکر کنم درست است
    جدیدترین ویرایش توسط dariush_abbasi868; ۲۰:۴۷ ۱۴۰۰/۰۹/۲۵.

    #2
    پاسخ : نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

    نوشته اصلی توسط dariush_abbasi868 نمایش پست ها
    با سلام با وجود اینکه از spi و ارتباط مطمن هستم و رجیسترهای mfrc522 را به درستی می توانم رید کنم ولی هیچ نوشتنی درست انجام نمی شودتابع نوشتنم درست است و حتی بالاجیک آنلایزر هم می بینم که دیتاها صحیح هستند
    مشکل از کجا می تواند باشد

    رجیستر VersionReg را می خوانم و مقدار 92 هگزدارد که نشان می دهد درست است و بقیه رجیسترها هم مقدار default زا دارند ولی هرکدام را تغییر می دهم بعد از رید کردن همان مقدار پیش فرض را دارد و رجیستر ErrorReg هم 0 است
    و در نهایت برنامه کارتی ار نمی خواند

    با لاجیک آنالایزر دستور نوشتن برای رجیستر 0x11 به مقدار 0x3d دقیقا می بینم که اول 0x22 و بعد 0x3d می آید که فکر کنم درست است
    با سلام و احترام
    کتابخانه مورد استفاده در لینک زیر بنا بر گفته نویسنده جواب داده است. میتوانید با بررسی آن برای حل مشکل احتمالی برنامه خودتان ایده بگیرید.
    راه*اندازی ماژول RC522 با STM32 - سیسوگ - Sisoog
    موفق باشید.

    دیدگاه


      #3
      پاسخ : نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

      با سلام و تشکر

      من این کتابخانه وسیسوگ را دیده ام و در واقع مبنای اولیه کار من هم روی آن بود ولی جواب سوال من در آنجا هم پیدا نشده و درواقع آنجا همچنین مشکلی نداشته

      دیدگاه


        #4
        پاسخ : نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد



        این هم از خروجی لاجیک آنالایزر
        وقتی در آدرس 0x11 مقدار 0x3d را می نویسم
        که با توجه به تغییر در شیفت ها اولین بایت 22 و بایت بعدی 3d در mosi صحیح به نظر می آید ولی
        اولا چرا miso اینجوری است در همان زمان 0x3d و بعد 0x10
        ثانیا در این رجیستر و یا هر رجیستر دیگری مقداری که منمی نویسم تغییر نمی کند

        همانطور که گفتم خواندن رجیسترها به درستی کار می کند و همه رجیسترها با مقدار پیش فرض و طبق دیتا شیت دریافت می شوند
        جدیدترین ویرایش توسط dariush_abbasi868; ۰۷:۴۹ ۱۴۰۰/۰۹/۲۷.

        دیدگاه


          #5
          پاسخ : نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

          نوشته اصلی توسط dariush_abbasi868 نمایش پست ها


          این هم از خروجی لاجیک آنالایزر
          وقتی در آدرس 0x11 مقدار 0x3d را می نویسم
          که با توجه به تغییر در شیفت ها اولین بایت 22 و بایت بعدی 3d در mosi صحیح به نظر می آید ولی
          اولا چرا miso اینجوری است در همان زمان 0x3d و بعد 0x10
          ثانیا در این رجیستر و یا هر رجیستر دیگری مقداری که منمی نویسم تغییر نمی کند

          همانطور که گفتم خواندن رجیسترها به درستی کار می کند و همه رجیسترها با مقدار پیش فرض و طبق دیتا شیت دریافت می شوند
          با سلام مجدد
          بعد از پایان خواندن و یا نوشتن توسط پروتکل ارتباطی SPI باید مجددا پایه SS/CS را به وضعیت 1 منطقی برگردانید که در نمودار ارسالی مشاهده نمیشود.
          موفق باشید

          دیدگاه


            #6
            پاسخ : نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

            با سلام و تشکر مجدد
            این پایه 1 می شد ولی با کمی تاخیر که در برنامه گذاشته بودم و در عکس دیده نمی شه
            به هر حال تاخیر را هم برداشتم و بلافاصله بعد از نوشتن پایه را 1 می کنم بازهم فرقی نکرد

            دیدگاه


              #7
              پاسخ : نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

              با سلام
              مشکل من با تعویض ماژول ریدر برطرف شد و مشکل از خود ریدر بود
              خیلی عجیب است آیا MFRC522 حالتی برای WRITE PROTECT دارد ؟

              دیدگاه


                #8
                پاسخ : نوشتن در رجیسترهای mfrc522 انجانم نمی شود ولی خواندن مشکلی ندارد

                باسلام.
                مهندس قیمت آیسی خام و بدون برد mfrc522 در خرده فروشی های امثال digikey یا sparkfun حول 3 تا 6 یورو میباشد.ماژول همین قطعه در فروشگاه سایت شاید با قیمت کمتر از 1 یورو به فروش میرسد.
                تو خود حدیث مفصل بخوان از این مجمل...

                دیدگاه

                لطفا صبر کنید...
                X