Giao tiếp với module thẻ từ RFID RC522

RFID RC522

Chào các bạn, hôm này mình sẽ hướng dẫn các bạn tìm hiểu và lập trình giao tiếp với module thẻ từ RFID RC522, vi điều khiển được sử dụng trong bài này kit stm32f103c8t6 và Cubemx để khởi tạo code

Kết nối

STM32RFID
B15MOSI
B14MISO
B13SCK
C15CS (SDA)

Khởi tạo code trên cubeMX

Chọn RCC chọn thạch anh ngoài
Chọn SYS bật serial debug
Bật SPI2 chế độ full master, tốc độ spi tầm 10Mhz trở lại
Cấu hình output chân C15

stm32f103 rc522 rfid

Sinh code và mở project lên

Lập trình

Có thể chia phần lập trình ra làm 2 nhóm chính

  • Nhóm chương trình giao tiếp với module RC522 (PCD)
  • Nhóm chương trình giao tiếp với miếng thẻ từ (PICC) ( thông qua mạch RC522)

Phần 1: Giao tiếp với module RC522

Trước tiên phải tải datasheet về đã: https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf

Module RFID mặc định ra chân SPI nên chúng ta sẽ sử dụng bộ SPI2 để giao tiếp với nó nhé

Hàm truyền nhận spi cơ bản

Hàm này không có gì phải giải thích, chỉ đơn giản là dùng bộ SPI để gửi 1byte đi và nhận về 1 byte

Các hàm đọc ghi module RFID

Quá trình giao tiếp về cơ bản là đọc và ghi giá trị vào các thanh ghi của module RFID, để đọc và ghi thì chúng ta cần biết địa chỉ của thanh ghi tương ứng cũng như chức năng tương ứng của thanh ghi đó. Nói chung, quá trình giao tiếp luôn bắt đầu bằng việc gửi đi địa chỉ của 1 thanh ghi nào đó. Địa chỉ thanh ghi được mã hóa bằng 6 bits

Quá trình đọc

Do trong giao thức SPI, byte dữ liệu trả về luôn muộn hơn byte gửi đi nên byte đọc về thứ 1 sẽ là byte rác. Và để đọc được byte cuối cùng thì gửi nhét thêm 1 byte rác (mặc định là 0x00)

Quá trình ghi

Để ghi dữ liệu vào thanh ghi nào đó, ta gửi địa chỉ của nó đi sau đó gửi kèm theo dữ liệu. Tùy thuộc vào địa chỉ đó yêu cầu mấy byte dữ liệu ta gửi đúng số byte dữ liệu tương ứng

Module RFID phân biệt lệnh đọc hay ghi bằng bit 0 của địa chỉ thanh ghi, do địa chỉ thanh ghi chỉ chiếm 6 bis nên vẫn còn thừa 2 bits, module này yêu cầu chúng ta phải dịch trái địa chỉ thanh ghi lên cao, chừa lại bit cao nhất (bit 7) để nó phân biệt lệnh này là đọc hay ghi và bit cuối (bits 0 ) nó bắt phải là 0
Cụ thể: bit 0 là 1 thì đây là đọc, ngược lại bit 0 là 0 thì đây là ghi

Hàm ghi dữ liệu vào 1 thanh ghi

Phép &0x7E có tác dụng xóa bit 0 về 0 và xóa bit 7 về 0 (thể hiện đây là lệnh ghi vào )

Hàm đọc dữ liệu vào 1 thanh ghi

Phép |0x80 có tác dụng set bit 7 lên cao thể hiện đây là đọc ra

Đôi khi chúng ta chỉ cần đọc và ghi 1 bit của cả thanh ghi, để làm được việc này chúng ta cần đọc toàn bộ dự liệu của thanh ghi đó ra rồi dùng toán tử OR và AND để set giá trị mong muốn lên bit cần sửa đổi. Do vậy mình tạo thêm 2 hàm tên là SetBitMaskClearBitMask để phục vụ việc thao tác lên 1 bit trên thanh ghi

Vậy là xong 2 hàm đọc ghi cơ bản, bây giờ tiến hành sử dụng 2 hàm này để thực hiện giao tiếp với module RC522

Hàm khởi tạo module

Đương nhiên rồi, moudule nào muốn hoạt động được thì cũng phải khởi tạo các chế độ hoạt động cho nó, một số thanh ghi cần quan tâm, cụ thể chi tiết nó là gì thì các bạn đọc datasheet nhé

Thanh ghi ModeReg register (0x11)

Giá trị cài đặt: 0x3D
RFID_write(0x11,0x3D);

Thanh ghi TReloadReg (0x2C 0x2D) đây là thanh ghi 16bit nên cần phải ghi 2 lần.
Giá trị cần ghi 0x0030
RFID_write(0x2D,30);
RFID_write(0x2C,0);

Thanh ghi TModeReg (0x2A 0x2B) đây cũng là thanh ghi 16 bit nên có cần ghi 2 lần

RFID_write(0x2A,0x8D);
RFID_write(0x2B,0x3E);

Thanh ghi TxASKReg (0x15)

RFID_write(0x15,0x40);

Đây là các cài đặt cơ bản cho module RFID, các bạn muốn hiểu rõ cụ thể nó ra làm sao thì tham khảo chi tiết chức năng các thanh ghi này trong datasheet nhé !

Thanh ghi điều khiển angten TxControlReg (0x14)

2 bit đầu tiên của thanh ghi này nếu được set=1 thì sẽ kích hoạt ang ten, ngược lại thì tắt

Còn nữa …

 

Từ tác giả:

Nếu có bất kì thắc mắc nào trong bài viết, vui lòng để lại comment dưới mỗi bài ! Mình sẽ không trả lời thắc mắc của các bạn ở facebook hay email !

Nếu trong phần code bạn nhìn thấy nhưng thứ kiểu như &amp; thì đó là lỗi hiển thị, cụ thể 3 kí tự < > & bị biến đổi thành như thế
&amp; là &
&lt;  là <
&gt; là >

Giới thiệu Đào Nguyện 68 bài viết
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT. Rất mong được giao lưu, kết bạn với các bạn cùng đam mê. Địa chỉ Facebook: https://www.facebook.com/nguyendao207

5 bình luận

  1. It is not surprising that online blackjack players are envious of slots players. Usually the juiciest bonuses are reserved for wagering on online slots. Omni Casino, which prides itself on listening to the players, is offering a Super Bonus Match Play for its blackjack aficionados. => 우리카지노 계열 대한민국 최고의 카지노사이트
    우리카지노

Để lại bình luận