Кому нибудь приходилось цеплять CCS811 к esp8266?

МихCCS811

New member
Пытаюсь общаться с сим чудом на lua. Откликается на HW_ID=0x81, HW Version и т.п., однако при считывании данных из MEAS_MODE выдает данные по такому сценарию:
обратился к HW_ID получил HW_ID=0x81
далее обратился к ALG_RESULT_DATA (запрос на 4 байта) получил ALG_RESULT_DATA=0x81,0xfd,0xfd,0xfd:(
или так:
обратился к FW_Boot_Version получил FW_Boot_Version=0x10,0x00
далее обратился к ALG_RESULT_DATA (запрос на 4 байта) получил ALG_RESULT_DATA=0x10,0x00,0xfd,0xfd:mad:
обратился к ENV_DATA получил ENV_DATA=0x10,0x00,0xfd,0xfd
При этом как его только не инициализировал (например SW_RESET->MEAS_MODE->APP_START), какие только задержки не вводил- один хрен одно и тоже.:eek:
Может кто подскажет в чем дело?
 
Последнее редактирование:

МихCCS811

New member
Забросил надолго это дело под esp8266. Сегодня решил его прицепить к другому МК. Практически сразу разобрался. Если кому интересно для общего понимания asm код для c8051f340 (его значимая часть)
Код:
;---Инициализация чипа ccs811---
INSTccs811:;maxsentcounter- макс. кол-во передаваемых байт
;maxreccounter- макс. кол-во принимаемых байт
;TARGET- Адрес ведомого чипа
;SMB_DATA_OUT- Буфер передаваемых данных
;SMB_DATA_IN- Буфер принимаемых данных
;---
mov R0,#TARGET;- Адрес ведомого чипа
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x20;- адрес регистра "ID" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN
mov A,@R0
cjne A,#0x81,INSTccs811m3
jmp INSTccs811m4
INSTccs811m3:clr bit_ccs811;- =0- чип ccs811 не обнаружен;=1- чип ccs811 подключен
jmp INSTccs811m9
INSTccs811m4:setb bit_ccs811;- =0- чип ccs811 не обнаружен;=1- чип ccs811 подключен
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x00;- адрес регистра "STATUS" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN
mov A,@R0
;APP_VALID=1?
jnb ACC.4,INSTccs811m3;переход при APP_VALID=0
;APP_VALID=1- Valid application firmware loaded
;--
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0xF4;- адрес регистра "APP_START" чипа ccs811
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT+1
mov @R0,#0x00
mov R0,#SMB_DATA_OUT+2
mov @R0,#0x00
CALL    SMB_Write
;-
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x00;- адрес регистра "STATUS" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN;- Буфер принимаемых данных
mov A,@R0
;FW_MODE=1?
jnb ACC.7,INSTccs811m3;переход при FW_MODE=0
;FW_MODE=1- Firmware is in application mode. CCS811 is ready to take ADC measurements
;--
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x01;- адрес регистра "MEAS_MODE" чипа ccs811
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT+1
mov @R0,#0x10
mov R0,#SMB_DATA_OUT+2
mov @R0,#0x00
CALL    SMB_Write
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0xE0;- адрес регистра "ERROR_ID" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
;--
;---считываем через 1сек.
;eCO2=[400,8192]
;TVOC=[0,1187]
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x08; макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x02;- адрес регистра ALG_RESULT_DATA
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL    SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL    SMB_Write
CALL    SMB_Read
mov R0,#SMB_DATA_IN
mov DPTR,#BufCompCcs811HL;- данные из ccs811 [BufCompTsl2561HL,BufCompTsl2561HL+0x07]
mov R1,#0x08
INSTccs811m55:mov A,@R0
movx @DPTR,A
inc R0
inc DPTR
djnz R1,INSTccs811m55
;---
INSTccs811m9:
;---END---
 
Сверху Снизу