1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2022 Chipsea Technologies (Shenzhen) Corp., Ltd. 3094332d3Sopenharmony_ci * 4094332d3Sopenharmony_ci * HDF is dual licensed: you can use it either under the terms of 5094332d3Sopenharmony_ci * the GPL, or the BSD license, at your option. 6094332d3Sopenharmony_ci * See the LICENSE file in the root of this repository for complete details. 7094332d3Sopenharmony_ci */ 8094332d3Sopenharmony_ci 9094332d3Sopenharmony_ci#ifndef PPG_CS1262_SPI_H 10094332d3Sopenharmony_ci#define PPG_CS1262_SPI_H 11094332d3Sopenharmony_ci 12094332d3Sopenharmony_ci#include "hdf_types.h" 13094332d3Sopenharmony_ci#include "sensor_platform_if.h" 14094332d3Sopenharmony_ci/***************************************** TYPEDEF ******************************************/ 15094332d3Sopenharmony_citypedef enum { 16094332d3Sopenharmony_ci CS1262_REG_BIT_RESET = 0, 17094332d3Sopenharmony_ci CS1262_REG_BIT_SET = 1, 18094332d3Sopenharmony_ci} Cs1262BitStatus; 19094332d3Sopenharmony_ci 20094332d3Sopenharmony_citypedef struct { 21094332d3Sopenharmony_ci uint16_t regAddr; 22094332d3Sopenharmony_ci union { 23094332d3Sopenharmony_ci uint16_t regVal; 24094332d3Sopenharmony_ci uint16_t *regValGroup; 25094332d3Sopenharmony_ci }; 26094332d3Sopenharmony_ci uint16_t regLen; 27094332d3Sopenharmony_ci} Cs1262RegGroup; 28094332d3Sopenharmony_ci 29094332d3Sopenharmony_citypedef struct { 30094332d3Sopenharmony_ci uint32_t reserve : 2; 31094332d3Sopenharmony_ci uint32_t adc_data : 22; 32094332d3Sopenharmony_ci uint32_t tl : 2; 33094332d3Sopenharmony_ci uint32_t rx : 2; 34094332d3Sopenharmony_ci uint32_t phaseGroup : 4; 35094332d3Sopenharmony_ci} Cs1262FifoVal; 36094332d3Sopenharmony_ci 37094332d3Sopenharmony_ci/****************************************** DEFINE ******************************************/ 38094332d3Sopenharmony_ci// lock reg 39094332d3Sopenharmony_ci#define CS1262_LOCK 0x0000 40094332d3Sopenharmony_ci// unlock reg 41094332d3Sopenharmony_ci#define CS1262_UN_LOCK1 0x0059 42094332d3Sopenharmony_ci#define CS1262_UN_LOCK2 0x0016 43094332d3Sopenharmony_ci#define CS1262_UN_LOCK3 0x0088 44094332d3Sopenharmony_ci 45094332d3Sopenharmony_ci/****************************************** OFFSET ******************************************/ 46094332d3Sopenharmony_ci// PRF 47094332d3Sopenharmony_ci#define PRF_START_BIT (0x0000) 48094332d3Sopenharmony_ci// REG WR PROT 49094332d3Sopenharmony_ci#define LOCK_REG_OFFSET (0x01u << 0) 50094332d3Sopenharmony_ci 51094332d3Sopenharmony_ci// RESET CON 52094332d3Sopenharmony_ci#define FIFORST_REG_OFFSET (0x01u << 1) 53094332d3Sopenharmony_ci#define TERST_REG_OFFSET (0x01u << 2) 54094332d3Sopenharmony_ci#define ADCRST_REG_OFFSET (0x01u << 3) 55094332d3Sopenharmony_ci 56094332d3Sopenharmony_ci// IER IFR 57094332d3Sopenharmony_ci#define INT_MODE_TRIGER (0 << 15) // 0 trigger 58094332d3Sopenharmony_ci 59094332d3Sopenharmony_ci#define LED_WARN_IER_OFFSET 5 60094332d3Sopenharmony_ci#define REG_ERR_IER_OFFSET 4 61094332d3Sopenharmony_ci#define TS_RDY_IER_OFFSET 3 62094332d3Sopenharmony_ci#define DATA_RDY_IER_OFFSET 2 63094332d3Sopenharmony_ci#define THR_DET_IER_OFFSET 1 64094332d3Sopenharmony_ci#define FIFO_RDY_IER_OFFSET 0 65094332d3Sopenharmony_ci 66094332d3Sopenharmony_ci#define LED_WARN_IFR_OFFSET 5 67094332d3Sopenharmony_ci#define REG_ERR_IFR_OFFSET 4 68094332d3Sopenharmony_ci#define TS_RDY_IFR_OFFSET 3 69094332d3Sopenharmony_ci#define DATA_RDY_IFR_OFFSET 2 70094332d3Sopenharmony_ci#define THR_DET_IFR_OFFSET 1 71094332d3Sopenharmony_ci#define FIFO_RDY_IFR_OFFSET 0 72094332d3Sopenharmony_ci 73094332d3Sopenharmony_ci#define IFR_RDY_FLAG 0x0001 74094332d3Sopenharmony_ci// TE CTRL 75094332d3Sopenharmony_ci#define PRF_START_OFFSET (0x01u << 0) 76094332d3Sopenharmony_ci 77094332d3Sopenharmony_ci// FIFO STATE 78094332d3Sopenharmony_ci#define FIFO_FULL_OFFSET (0x01u << 12) 79094332d3Sopenharmony_ci#define FIFO_EMPTY_OFFSET (0x01u << 11) 80094332d3Sopenharmony_ci#define FIFO_NUM_OFFSET 0x3FF 81094332d3Sopenharmony_ci 82094332d3Sopenharmony_ci// RESET OFFSET 83094332d3Sopenharmony_ci#define CS1262_FIFO_RST_OFFSET 1 84094332d3Sopenharmony_ci#define CS1262_TE_RST_OFFSET 2 85094332d3Sopenharmony_ci#define CS1262_ADC_RST_OFFSET 3 86094332d3Sopenharmony_ci 87094332d3Sopenharmony_ci/******************************************* REGS *******************************************/ 88094332d3Sopenharmony_ci// SYS_BA 89094332d3Sopenharmony_ci#define CS1262_SYS_BA (0x0000) 90094332d3Sopenharmony_ci#define CS1262_WRPROT_REG (CS1262_SYS_BA + 0x00) 91094332d3Sopenharmony_ci#define CS1262_CLOCK_REG (CS1262_SYS_BA + 0x01) 92094332d3Sopenharmony_ci#define CS1262_RSTCON_REG (CS1262_SYS_BA + 0x02) 93094332d3Sopenharmony_ci#define CS1262_IER_REG (CS1262_SYS_BA + 0x03) 94094332d3Sopenharmony_ci#define CS1262_IFR_REG (CS1262_SYS_BA + 0x04) 95094332d3Sopenharmony_ci#define CS1262_SYS_STATE_REG (CS1262_SYS_BA + 0x05) 96094332d3Sopenharmony_ci// TL_BA 97094332d3Sopenharmony_ci#define CS1262_TL_BA (0x0010) 98094332d3Sopenharmony_ci// TX_BA 99094332d3Sopenharmony_ci#define CS1262_TX_BA (0x0050) 100094332d3Sopenharmony_ci// RX_BA 101094332d3Sopenharmony_ci#define CS1262_RX_BA (0x0070) 102094332d3Sopenharmony_ci// TE_BA 103094332d3Sopenharmony_ci#define CS1262_TE_BA (0x00E0) 104094332d3Sopenharmony_ci#define CS1262_TE_CTRL_REG (CS1262_TE_BA + 0x00) 105094332d3Sopenharmony_ci// TE_BA 106094332d3Sopenharmony_ci#define CS1262_WEAR_BA (0x0120) 107094332d3Sopenharmony_ci// FIFO & ADC 108094332d3Sopenharmony_ci#define CS1262_ADC_BA (0x140) 109094332d3Sopenharmony_ci#define CS1262_FIFO_DATA_REG (CS1262_ADC_BA + 0x00) 110094332d3Sopenharmony_ci#define CS1262_FIFO_STATE_REG (CS1262_ADC_BA + 0x01) 111094332d3Sopenharmony_ci#define CS1262_FIFO_OFFSET_REG (CS1262_ADC_BA + 0x02) 112094332d3Sopenharmony_ci// ID_BA 113094332d3Sopenharmony_ci#define CS1262_ID_BA (0x1F0) 114094332d3Sopenharmony_ci#define CS1262_CHIP_ID1_REG (CS1262_ID_BA + 0x01) 115094332d3Sopenharmony_ci 116094332d3Sopenharmony_ci#define CS1262_ENTER_DEEPSLEEP_CMD 0x08C4 117094332d3Sopenharmony_ci#define CS1262_EXIT_DEEPSLEEP_CMD 0x08C1 118094332d3Sopenharmony_ci#define CS1262_CHIP_REST_CMD 0xC2 119094332d3Sopenharmony_ci 120094332d3Sopenharmony_ci/****************************************** DEFINE ******************************************/ 121094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_SINGLEWRITE 0x95 122094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_SINGLEWRITE 0x96 // checksum for single write 123094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_CONTINUOUSWRITE 0x99 124094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_CONTINUOUSWRITE 0x9A // checksum for continuous write 125094332d3Sopenharmony_ci 126094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_SINGLEREAD 0x65 127094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_SINGLEREAD 0x66 // checksum for single read 128094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_CONTINUOUSREAD 0x69 129094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_CONTINUOUSREAD 0x6A // checksum for continuous read 130094332d3Sopenharmony_ci 131094332d3Sopenharmony_ci#define CS1262_SPI_ACK_ADDR 0xA3 132094332d3Sopenharmony_ci#define CS1262_SPI_NACK_ADDR 0xA3 133094332d3Sopenharmony_ci#define CS1262_SPI_ACK_DATA 0xA5 134094332d3Sopenharmony_ci#define CS1262_SPI_NACK_DATA 0xAA 135094332d3Sopenharmony_ci 136094332d3Sopenharmony_ci#define CS1262_SPI_DUMMY_DATA 0x00 137094332d3Sopenharmony_ci/*********************************** function prototypes *************************************/ 138094332d3Sopenharmony_ciint32_t Cs1262ReadRegs(uint16_t regAddr, uint16_t *dataBuf, uint16_t dataLen); 139094332d3Sopenharmony_ciint32_t Cs1262WriteReg(uint16_t regAddr, uint16_t data); 140094332d3Sopenharmony_ciint32_t Cs1262WriteRegs(uint16_t regAddr, uint16_t *dataBuf, uint16_t dataLen); 141094332d3Sopenharmony_ciint32_t Cs1262WriteRegbit(uint16_t regAddr, uint16_t setbit, Cs1262BitStatus bitval); 142094332d3Sopenharmony_ciint32_t Cs1262WriteData(uint8_t *data, uint16_t dataLen); 143094332d3Sopenharmony_ciint32_t Cs1262WriteGroup(Cs1262RegGroup *regGroup, uint16_t groupLen); 144094332d3Sopenharmony_ciint32_t Cs1262ReadFifoReg(Cs1262FifoVal *fifoBuf, uint16_t fifoLen); 145094332d3Sopenharmony_ciint32_t Cs1262InitSpi(struct SensorBusCfg *busCfg); 146094332d3Sopenharmony_civoid Cs1262ReleaseSpi(struct SensorBusCfg *busCfg); 147094332d3Sopenharmony_ci#endif /* CS1262_SPI_H */ 148