Работа SPI-устройств с Arduino Nano на LGT8F328P

Upper, добавил #define SPI_DRIVER_SELECT 1 в начало SDFatConfig.h - не работает. Мне одно не нравится: по сообщениям компилятора он неизменно берёт библиотеку SPI из аддона, а не старую: "Используем библиотеку SPI версии 1.0 из папки: C:\Users\User\AppData\Local\Arduino15\packages\lgt8fx\hardware\avr\2.0.7\libraries\SPI ". Может быть причина в этом? Посмотрите, пожалуйста, у вас какую библиотеку SPI берёт компилятор (у меня это 6-я строка от конца сообщений компилятора при включённых его сообщениях).

Он и должен брать из аддона. Ибо там библиотека оптимизирована под камень, а “стандартная” заточена под атмегу

Да библиотека SPI берется из аддона. Я специально привел скриншот на котором почти видно что откуда берется.
Попробуйте полностью повторить мой вариант.
Установить portable версию 1.8.13
Установить в нее dbuezas версия 2.0.7
Установить библиотеку SdFat последней версии 2.2.2
Добавить #define SPI_DRIVER_SELECT 1 в начало SDFatConfig.h
Прошить и запустить SdInfo из примеров.
https://www.arduino.cc/en/Guide/PortableIDE

Дополнение - и подключить CS к D10

Upper, в файле SDFatConfig.h библиотеки SdFat версии 2.2.2 уже есть #define SPI_DRIVER_SELECT 1 в 122 строке - его комментировать не нужно? Будет же два одинаковых определения. Если вставлять, то в строку 29? Как вы считаете, достаточно скопировать на диск D (а лучше на флешку, как написано в статье) папку с портативной версией IDE 1.8.13 - другие имеющиеся на компе версии IDE мешать не будут?

Да вставлять в 29 строку.
И не забудьте CS подключить к D10 (может у вас дело в этом?)

#ifndef SPI_DRIVER_SELECT
#define SPI_DRIVER_SELECT 0
#endif // SPI_DRIVER_SELECT

Говорит, что если раньше не объявили SPI_DRIVER_SELECT то объявить его как значение 0

Upper, Давайте уточним. Так вставлять три строки:

#ifndef SPI_DRIVER_SELECT
#define SPI_DRIVER_SELECT 0
#endif // SPI_DRIVER_SELECT

только с 1 вместо 0 или одну с 1?

“Говорит, что если раньше не объявили SPI_DRIVER_SELECT то объявить его как значение 0” - мы же объявляем раньше в 29 строке?

Я использовал вывод D4, но я заливал одну и ту же программу в LGT и атмел (обе нано), вставленный в одну и ту же макетку, конечно, с соответствующими настройками платы и порта в IDE. С атмелом работает.

#define SPI_DRIVER_SELECT 1
Добавить после 28 строки
Больше ничего не менять.

По поводу CS к D10 и прочего.
Я написал как делал я, и как у меня точно работает.
Тоже самое касается и других настроек приведенных на скриншоте. Так у меня работает точно.
Необходимо ли это, или можно по другому - я не знаю, а проверять мне не интересно.
Портативную версию достаточно скопировать на диск например D, на флешку не надо, если не собираетесь носить с собой. Например у меня
e:\arduino-LGT-dbuezas-1.8.13 для LGT
e:\arduino-MicroCore-1.8.19 для MicroCore
и т.д.

Проверил на lgt8f 3.3 + карта на 8гб. Результат тот же что у Upper.
ТС, не заморчивайтесь, “правильную” папку SPI подсуньте в пакет lgt8f , в программ файлes(x86)

Спойлер

SdFat version: 2.2.0

Assuming the SD is the only SPI device.
Edit DISABLE_CS_PIN to disable an SPI device.

Assuming the SD chip select pin is: 4
Edit SD_CS_PIN to change the SD chip select pin.

type any character to start
init time: 99 ms

Card type: SDHC
sdSpecVer: 2.00
HighSpeedMode: true

Manufacturer ID: 0X12
OEM ID: Vx
Product: ASTC
Revision: 3.4
Serial number: 0X580
Manufacturing date: 9/2013

cardSize: 7981.76 MB (MB = 1,000,000 bytes)
flashEraseSize: 128 blocks
eraseSingleBlock: true
dataAfterErase: ones

OCR: 0XC0FF8000

SD Partition Table
part,boot,bgnCHS[3],type,endCHS[3],start,length
1,0X0,0X82,0X3,0X0,0XB,0X64,0XDA,0XCA,8192,15581184
2,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
3,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
4,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0

Scanning FAT, please wait.

Volume is FAT32
sectorsPerCluster: 64
fatStartSector: 12580
dataStartSector: 16384
clusterCount: 243328
freeClusterCount: 20727

type any character to start

папку portable создаём ручками, до первого запуска IDE, затем обновить платы до 1.8.6 это создаст все остальные необходимые папки

Прошу прощения, но моя попытка понять, что написано в этой строке не очень успешна. Для того, чтобы я сделал всё правильно, разъясните пожалуйста, чтобы исключить ошибки. Заморачивайтесь - это понял. Кстати, я пытался в установленном пакете LGT8FX записать (заменить) вместо родной библиотеки SPI такую библиотеку от Arduino IDE, на что компилятор сообщил, что это устаревшая версия и компилировать не стал.

с любого стандартного пакета, я привык к minicore

Спойлер

то, что мы сейчас имеем - это, конечно, достаточно большой шаг вперед, но свой проект я пока на lgt8f и sdfat не перевел, походу есть еще какие-то проблемы.

Нужно знакомство заводить с девочкой, которая изучает китайский (желательно технический) и чаем/цветами и тп просить переводить ПРАВИЛЬНО документацию.

дайте людям скрины и логи, так быстрее будет

1 лайк

проверьте плиз, инициализирует ли у вас карту этот код, точнее, первая строка:

 if (sd.begin(chipSelect, SPI_FULL_SPEED)) { // initialise card on SPI to 8MHz SPI bus speed
    for (int dloop = 0; dloop < 4; dloop++) {
      digitalWrite(ledStart, !digitalRead(ledStart));
      delay(100);
    }
  } else {
      lcd.setCursor(0,1);
      lcd.print("SD Card not found");
    // if error, flash LED twice per second, until reset
    while (1) {
      digitalWrite(ledStart, !digitalRead(ledStart));
      delay(500);
    }
  }

BOOM, известна история.

  • Молодой человек, купите своей девушке цветы.
  • Нет у меня девушки.
  • Не может быть, чтобы у такого молодого и красивого не было девушки.
  • Нет. Жена не разрешает.
    На первый взгляд ваша идея выглядит вполне рабочей. Но, по моему мнению, до 70 спешить не стоит - это не пожар или понос, а дальше - как карта ляжет.