Are all new GY-270 Board Magnetometers now fake?!

Hello, I had this issue recently but it turns out the board probably uses the QMC5883P chip which is made by these guys. Here is the data sheet and an example program.

#include <Wire.h>

// QMC5883P的I2C地址
const int QMC5883P_ADDR = 0x2C;

// 控制寄存器地址
const int MODE_REG = 0x0A;
const int CONFIG_REG = 0x0B;

// 数据输出寄存器地址
const int X_LSB_REG = 0x01;
const int X_MSB_REG = 0x02;
const int Y_LSB_REG = 0x03;
const int Y_MSB_REG = 0x04;
const int Z_LSB_REG = 0x05;
const int Z_MSB_REG = 0x06;

// 状态寄存器地址
const int STATUS_REG = 0x09;

// 初始化QMC5883P
void initQMC5883P() {
  Wire.begin();
  // 设置为连续测量模式,数据输出速率为200Hz,量程为±8G
  Wire.beginTransmission(QMC5883P_ADDR);
  Wire.write(MODE_REG);
  Wire.write(0xCF); // 0xCF: 连续模式, 200Hz数据输出速率
  Wire.endTransmission();

  Wire.beginTransmission(QMC5883P_ADDR);
  Wire.write(CONFIG_REG);
  Wire.write(0x08); // 0x08: 设置Set/Reset模式为开启,量程为±8G
  Wire.endTransmission();
}

// 读取QMC5883P的原始数据
void readQMC5883PData(int16_t& x, int16_t& y, int16_t& z) {
  Wire.beginTransmission(QMC5883P_ADDR);
  Wire.write(X_LSB_REG);
  Wire.endTransmission(false);
  Wire.requestFrom(QMC5883P_ADDR, 6);

  if (Wire.available() == 6) {
    byte x_lsb = Wire.read();
    byte x_msb = Wire.read();
    byte y_lsb = Wire.read();
    byte y_msb = Wire.read();
    byte z_lsb = Wire.read();
    byte z_msb = Wire.read();

    x = (x_msb << 8) | x_lsb;
    y = (y_msb << 8) | y_lsb;
    z = (z_msb << 8) | z_lsb;
  }
}

void setup() {
  Serial.begin(9600);
  initQMC5883P();
}

void loop() {
  int16_t x, y, z;
  readQMC5883PData(x, y, z);

  Serial.print("X: ");
  Serial.print(x);
  Serial.print("\tY: ");
  Serial.print(y);
  Serial.print("\tZ: ");
  Serial.println(z);

  delay(100);
}