为什么将 SX1272 的每个 SPI 寄存器与 0x80 进行或运算
Why OR every SPI register of the SX1272 with 0x80
我使用来自 GitHub 的库,它提供了通过 SPI 读取和写入 SX1272 寄存器的功能。
它工作得很好,但我不明白为什么 Lora_write_ref() 函数或每个寄存器都带有 0x80.
所以假设我想写入地址 0X00 上的寄存器 FIFO (RegFifo)。我不能,因为函数 Or 是带有 0X80 的寄存器。
我知道我的想法是错误的,因为它工作得很好,但为什么呢?
代码来自 https://github.com/Inteform/esp32-lora-library
/**
* Write a value to a register.
* @param reg Register index.
* @param val Value to write.
*/
void
lora_write_reg(int reg, int val)
{
uint8_t out[2] = { 0x80 | reg, val };
uint8_t in[2];
spi_transaction_t t = {
.flags = 0,
.length = 8 * sizeof(out),
.tx_buffer = out,
.rx_buffer = in
};
gpio_set_level(CONFIG_CS_GPIO, 0);
spi_device_transmit(__spi, &t);
gpio_set_level(CONFIG_CS_GPIO, 1);
}
根据SX1272/73 datasheet,它是用于写入寄存器的 SPI 接口的一部分:
The first byte is the address byte. It is comprises:
- A wnr bit, which is 1 for write access and 0 for read access.
- Then 7 bits of address, MSB first.
我使用来自 GitHub 的库,它提供了通过 SPI 读取和写入 SX1272 寄存器的功能。 它工作得很好,但我不明白为什么 Lora_write_ref() 函数或每个寄存器都带有 0x80.
所以假设我想写入地址 0X00 上的寄存器 FIFO (RegFifo)。我不能,因为函数 Or 是带有 0X80 的寄存器。 我知道我的想法是错误的,因为它工作得很好,但为什么呢?
代码来自 https://github.com/Inteform/esp32-lora-library
/**
* Write a value to a register.
* @param reg Register index.
* @param val Value to write.
*/
void
lora_write_reg(int reg, int val)
{
uint8_t out[2] = { 0x80 | reg, val };
uint8_t in[2];
spi_transaction_t t = {
.flags = 0,
.length = 8 * sizeof(out),
.tx_buffer = out,
.rx_buffer = in
};
gpio_set_level(CONFIG_CS_GPIO, 0);
spi_device_transmit(__spi, &t);
gpio_set_level(CONFIG_CS_GPIO, 1);
}
根据SX1272/73 datasheet,它是用于写入寄存器的 SPI 接口的一部分:
The first byte is the address byte. It is comprises:
- A wnr bit, which is 1 for write access and 0 for read access.
- Then 7 bits of address, MSB first.