diff --git a/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld b/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld index a018295..8a15697 100644 --- a/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld +++ b/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld @@ -31,7 +31,7 @@ SECTIONS { . = ALIGN(CL_SIZE); } >rom - .init_array : + .init_array (READONLY) : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) diff --git a/libraries/SPI/examples/SDcard_readInfo/SDcard_readInfo.ino b/libraries/SPI/examples/SDcard_readInfo/SDcard_readInfo.ino new file mode 100644 index 0000000..67582f5 --- /dev/null +++ b/libraries/SPI/examples/SDcard_readInfo/SDcard_readInfo.ino @@ -0,0 +1,96 @@ + +/* + An SD card connected via SPI is used for this test. + The example is taken from the arduino SD library. + + https://github.com/arduino-libraries/SD +*/ + +#include +#include + +// set up variables using the SD utility library functions: +Sd2Card card; +SdVolume volume; +SdFile root; + +const int chipSelect = 9; + +void setup() { + // Open serial communications and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + Serial.print("\nInitializing SD card..."); + + // we'll use the initialization code from the utility libraries + // since we're just testing if the card is working! + if (!card.init(SPI_QUARTER_SPEED, 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."); + } + + // print the type of card + 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"); + } + + // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32 + 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(); + + // print the type and size of the first FAT-type volume + 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); + + // list all files in the card with date and size + root.ls(LS_R | LS_DATE | LS_SIZE); +} + +void loop(void) { +} diff --git a/variants/standart/pins_arduino.h b/variants/standart/pins_arduino.h index 52624fc..d42138d 100644 --- a/variants/standart/pins_arduino.h +++ b/variants/standart/pins_arduino.h @@ -62,6 +62,8 @@ GPIO_TypeDef* digitalPinToPort(uint32_t digPinNumber); HAL_PinsTypeDef digitalPinToBitMask(uint32_t digPinNumber); // оtotal number of pins available for initialization uint16_t pinCommonQty(void); +// the function returns a reference to the OUTPUT address of the GPIO register +uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // ADC // determines the ADC channel number by the board pin number diff --git a/variants/standart/variant.c b/variants/standart/variant.c index 6b9fe62..7d9f779 100644 --- a/variants/standart/variant.c +++ b/variants/standart/variant.c @@ -94,6 +94,12 @@ uint16_t pinCommonQty(void) return (uint16_t)(sizeof(digitalPinToGpioPinArray)/sizeof(digitalPinToGpioPinArray[0])); } +// the function returns a reference to the OUTPUT address of the GPIO register +uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x) +{ + return &GPIO_x->OUTPUT_; +} + // ---------------------- АЦП ---------------------- // // determines the ADC channel number by the board pin number uint32_t analogInputToChannelNumber(uint32_t PinNumber)