Можно ли в ESP32-Cam одновременно использовать SD карту и периферийное устройство общающееся по SPI?
Хотел чтобы модуль RFID считывал карточку, ESP делала фотографию, и сохраняла на SD карте фото с идентификатором.
На данный момент получается либо считывать идентификатор, либо сохранять фотографию. А как это сделать вместе?
да, речь идёт именно об этом модуле, но я повесил RFID модуль(mfrc522) на отдельную линию SS(CS) но оно так и не заработало. Мне кажется что это из-за того что в начале я инициализирую SPI через SPI.begin(SCK, MISO, MOSI, SS); таким образом инициализируется и SD карта. На всякий случай вот тут весь код.
Алексей Бобров, я заглянул в исходник SPI для ESP32 arduino и вижу, что там нет поддержки для двух и более устройств на одной шине с аппаратным CS. Из этой ситуации вижу два выхода:
1) инициализировать класс SPI с аппаратным CS для одного из устройств, как у вас сейчас, а когда нужно работать с другим устройством -- вызывать SPI.setHwCs(false) и руками подавать сигнал на второй CS, по окончании транзакции -- вернуть всё в исходное состояние.
2) инициализировать класс SPI без аппаратного CS, включать CS нужного устройства как сигнал GPIO перед транзакцией, выключать после.
Алексей Бобров, вроде я видел где-то (может на Instructables?) проект одновременного использования с esp32-cam и sd-карточки и spi-дисплея. Так что шансы может и есть.
kalapanga, я нашёл ту статью которую вы имели ввиду. К сожалению в том проекте SD карта была встроенна в дисплей. НО. В комментариях к статье человек добавил отдельный SD картридер. Вот: . Но он не рассказал как он это сделал
Тут надо ковыряться, пробовать всё подряд. Вот тут сами Espressif пишут, что в принципе можно Sharing the SPI Bus Among SD Cards and Other SPI D...
Но опять же - модули sd карт бываюти разные, что и как китайцы на этом конкретном модуле насобирали хз. В общем - как повезёт.
kalapanga, а можно "руками" управлять CS? тоесть когда на SD карту что-то загружается давать на CS карты LOW и на mfrc522 HIGH, а когда надо получать/отправлять данные с mfrc522 давать на его CS LOW, а на CS карты HIGH
что вы подразумеваете под
руками подавать сигнал на второй CS, по окончании транзакции -- вернуть всё в исходное состояние.
Алексей Бобров, управлять этой линией CS как GPIO, в то время как аппаратное управление CS контроллером SPI отключено. Вернуть всё в исходное состояние -- перевести второй CS в неактивное состояние и включить аппаратное управление CS.