Netduino + Ethernet Shield: как записать на SD-карту?

Я попробовал несколько примеров программ для записи данных на SD-карту, установленную на Ethernet-шилд, но ни один не работал. Размер SD-карты составляет 4 ГБ и отформатирован как FAT32.

Экран Ethernet выглядит следующим образом:

(Куплено на Amazon — Arduino Ethernet Shield)

Введите здесь описание изображения

И это пример кода, который не работает при создании приложения Netduino (не приложения Netduino Plus) (первая строка выдает исключение):

public static void Main()
{
    StorageDevice.MountSD("SD1", SPI_Devices.SPI1, Pins.GPIO_PIN_D10);

    string[] directories = System.IO.Directory.GetDirectories(@"\");
    Debug.Print("directory count: " + directories.Length.ToString());

    for (int i = 0; i < directories.Length; i++)
    {
        Debug.Print("directory: " + directories[i]);
    }

    string[] files = System.IO.Directory.GetFiles(@"\SD1");
    Debug.Print("file count: " + files.Length.ToString());

    for (int i = 0; i < files.Length; i++)
    {
        Debug.Print("filename: " + files[i]);
        FileStream fs = new FileStream(files[i], FileMode.Open, FileAccess.Read, FileShare.None, 512);
        StreamReader sr = new StreamReader(fs);
        Debug.Print("contents: " + sr.ReadToEnd());
    }
}

Есть пример работающей программы?

Решение:

Благодаря Крису и Джеймсу мне удалось записать на SD-карту и прочитать с нее. Собрав все вместе, я написал статью На случай, если у кого-то возникнут такие же проблемы.


person Niko Gamulin    schedule 19.10.2011    source источник
comment
Не могли бы вы уточнить модель Ethernet Shield, которую вы используете. Я полагаю, что в течение долгого времени была доступна версия со слотом для SD-карты, но на самом деле она не поддерживала его. Так какой фирмы и примерно когда вы его купили?   -  person James    schedule 19.10.2011
comment
Это последняя версия, и в ней нет той проблемы, о которой я говорил. К сожалению, у меня нет никакого опыта в этом, и я не могу предложить большую помощь. Если вы хотите поделиться одним из примеров кода, с которым вы работаете, может быть, я и другие здесь смогу предоставить вам вторую пару глаз.   -  person James    schedule 19.10.2011


Ответы (2)


В последней версии Arduino Ethernet Shield для связи используется разъем «ICSP» (3x2, 6-контактный разъем на правой стороне платы). Данные ввода/вывода, идущие на вашу SD-карту, проходят через эти контакты.

Мы включили эти же заголовки в Netduino для совместимости; чтобы использовать этот экран, вам нужно припаять соответствующий разъем к вашему Netduino. Тогда вы должны быть готовы идти!

Кстати, Netduino Plus имеет встроенную карту памяти MicroSD и быструю сеть Ethernet... что также может быть простым решением. http://www.netduino.com/netduinoplus/

Крис (ООО «Секрет Лабс»)

person Chris Walker    schedule 21.10.2011
comment
Я добавил заголовок ICSP, обновил прошивку до версии 4.1.1.0 Beta1, но приложение по-прежнему выдает исключение: в SecretLabs.NETMF.IO.dll произошло необработанное исключение типа «System.IO.IOException». - person Niko Gamulin; 23.10.2011
comment
Теперь я добавил перемычку, соединяющую D4 и D10, и она работает. - person Niko Gamulin; 23.10.2011

Я нашел ссылку на этой странице форума http://forums.netduino.com/index.php?/topic/322-experimental-drivers-for-wiznet-based-ethernet-shields/

«В настоящее время вам нужно установить перемычку между D10 и D4, чтобы заставить SD-карту работать, хотя это не будет необходимо с прошивкой версии 4.1.1 (которая позволит вам указать строку выбора чипа SD-карты) ."

Что заставляет меня думать, что вам нужно использовать D4 вместо D10 для SD-карты. Я нашел несколько других ссылок на той же странице, где упоминалось, что D10 — это вывод SS для Ethernet. Прошивка, доступная на их странице загрузки, в настоящее время только 4.1.0, поэтому вам, вероятно, понадобится перемычка. Я не могу проверить это, но ссылка на форум должна быть хорошей отправной точкой.

person James    schedule 20.10.2011