it is SEEED XIAO NRF52840 SENSE.
Ya. initialization is correct and give correct id as expected but samples output is not correct. I have done inialization of sd card after max… when its done. it gives odd result…
also i observe that if i initilise sd first then max initilisation failed.
Are you sure the connections are as follows?
XIAO SD MAX
-----------------
3V3 3V3 VCC
GND GND GND
D0 CS
D7 CSB
D8 SCK SCK
D9 MISO MISO
D10 MOSI MOSI
INT1
INT2
FCLK
If the board name is “SEEED XIAO NRF52840 SENSE”, the BSP is non mbed.
actually i have changed non mbed board later to have same sd compitibility. and ya connection is same as you mentioned.
It seems to me that the SD process is taking too long and not reading the correct data from MAX.
Try to shorten the execution time by using open() in setup() and loop() only to write to the file, and close the file at an appropriate time. What will be the result?
What is the MAX data rate?
You must write to SD at a data rate of at least the MAX data rate.
actually i have tried that also. when i open file in setup then output will be as seen in attached schreenshot.
close() takes a long time.
i have also tested with closed() removed
also i have tested same circuit in xiao esp32c3 and it is working fine
Please show me a sketch that works properly with XIAO_ESP32C3.
I don’t think that is the cause, but the SPI configuration is different between nRF52 and ESP32.
here it is not allowing to post. 403 error.
The default sample rate appears to be 250 sps. You could try slowing it down to about 10 sps to test it out.
I do not have a MAX30003 board so I cannot actually try it out.
I cannot proceed any further without some new information.
ok. thanks. i have checked using logic analyser. when i simply run max30003 code then it gives correct output but when used sd.begin() then it gives issue to output of max30003 and make it 0.
The frequencies of SCK for MAX and SD are different. Is there any relation?
Please let me know if you have any new information.
I will leave you with this for today.
Hi there,
Just saying thank you…
This thread is a Clinic on HOW to ASK and answer posted questions.
Steller on both sides. Not to mention the outstanding INFORMATION exposed by the exercise. Knowledge Bomb
GL PJ
I used two SPI interfaces in this add External Grove FLASH Chip Demo
this snip from that code that may be relevant for using 2nd SPI int on the Nrf52840
@PJ_Glasso, thanks for the info.
The problem is to connect two SPI devices to one SPI interface. Since @kushal_patel seems to have a logic analyzer, I think he can solve this problem as long as he observes the proper waveforms.
I tried it with my BMP388 instead of the MAX30003. The SD part is a copy of your sketch.Even with the SPI clock set to 32 MHz, both SD and BMP388 operated without problems.
In your sketch, you operate the chip select to LOW and HIGH before and after accessing the device, but I don’t think this is necessary.
I don’t know if this will be helpful, but here is a sketch I tried.
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP3XX.h>
#include <SD.h>
#define BMP_SCK D8
#define BMP_MISO D9
#define BMP_MOSI D10
#define BMP_CS D7
#define chipSelect D0
#define SEALEVELPRESSURE_HPA (1013.25)
Sd2Card card;
SdVolume volume;
SdFile root;
Adafruit_BMP3XX bmp;
void setup() {
Serial.begin(115200);
while (!Serial);
delay(2000);
Serial.println("BMP388 / SD SPI TEST");
// SD card Initialization
Serial.print("\nInitializing SD card...");
pinMode(chipSelect,OUTPUT);
digitalWrite(chipSelect,LOW); //enable device
// if (!card.init(SPI_HALF_SPEED, chipSelect)) {
if (!card.init(32000000UL, chipSelect)) {
Serial.println("initialization failed. Things to check:");
Serial.println("* is a card inserted?");
Serial.println("* is your wiring correct?");
Serial.println("* did you change the chipSelect pin to match your shield or module?");
while (1);
} else {
Serial.println("Wiring is correct and a card is present.");
}
Serial.println();
Serial.print("Card type: ");
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println("SD1");
break;
case SD_CARD_TYPE_SD2:
Serial.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("Unknown");
}
if (!volume.init(card)) {
Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
while (1);
}
Serial.print("Clusters: ");
Serial.println(volume.clusterCount());
Serial.print("Blocks x Cluster: ");
Serial.println(volume.blocksPerCluster());
Serial.print("Total Blocks: ");
Serial.println(volume.blocksPerCluster() * volume.clusterCount());
Serial.println();
uint32_t volumesize;
Serial.print("Volume type is: FAT");
Serial.println(volume.fatType(), DEC);
volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we'll have a lot of clusters
volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB)
Serial.print("Volume size (Kb): ");
Serial.println(volumesize);
Serial.print("Volume size (Mb): ");
volumesize /= 1024;
Serial.println(volumesize);
Serial.print("Volume size (Gb): ");
Serial.println((float)volumesize / 1024.0);
Serial.println("\nFiles found on the card (name, date and size in bytes): ");
root.openRoot(volume);
root.ls(LS_R | LS_DATE | LS_SIZE);
digitalWrite(chipSelect,HIGH); //disable device
// BMP388 Initialization
// if (! bmp.begin_SPI(BMP_CS)) {
if (! bmp.begin_SPI(BMP_CS, &SPI, 32000000UL)) {
Serial.println("Could not find a valid BMP3 sensor, check wiring!");
while (1);
}
bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X);
bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X);
bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3);
bmp.setOutputDataRate(BMP3_ODR_50_HZ);
}
// **********************************************************************************
void loop(void) {
if (! bmp.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}
Serial.print("Temperature = ");
Serial.print(bmp.temperature);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.pressure / 100.0);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.println();
delay(1000);
}