Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
tsfkm
0 / 0 / 0
Регистрация: 03.09.2017
Сообщений: 7
1

неработает f_mount и f_open библиотеки FatFS STM32

06.09.2017, 14:31. Просмотров 4516. Ответов 12
Метки нет (Все метки)

Вот код который я запускаю.
Код
result = f_mount(&fileSystem, "0", 0);

if (result == FR_OK)
{

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SIT);

uint8_t path[13] = "testfile.txt";
path[12] = \0;

result = f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS);

//if(f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS)!=FR_OK)
if(result!=FR_OK)
{
Error_Homdler();
}
else
{
Функция result = f_mount(&fileSystem, "0", 0); отрабатывает успешно FR_OK.
А вот функция
result = f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS);
выдает результат FR_DYSK_ERR
Хотя если функции f_mount последний параметр 1 то выдает туже ошибку FR_DYSK_ERR

Код пишу в CubeMX и
System Workbench for STM32
Тренируюсь на плате nucleo F411RE
подключил флешку и несколько раз проверил правильность подключения все правильно.

Код здесь с рабочего примера.

А вот в дебаге результат выданный функцией.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2017, 14:31
Ответы с готовыми решениями:

STM32 Fatfs+MS
Всем доброго дня! Возникла следующая проблема - есть плата steval-ccm008v1, с контроллером...

STM32 USB MSC+FatFs
Добрый вечер. У меня возникла интересная проблема. Прикрутил FatFs и USB Mass Storage Device. В...

Stm32 fatfs запись в фаил
Доброе время. Сегодня подключил к stm32f103 карту памяти по spi , попробывал пример. Чтение из...

FatFS, STM32, USB - кто-то из них глючит?
Добрый день! Может у кого встречалось подобное? Есть устройство на STM32f407, которое читает файлы...

STM32. файловая система FatFS для USB и SD
Получится ли в одном проекте для STM32F4 под управлением FriiRTOS заставить работать FatFS для USB...

12
RomomST77
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 59
06.09.2017, 16:58 2
А драйвер реализован, который с картой работает?
0
tsfkm
0 / 0 / 0
Регистрация: 03.09.2017
Сообщений: 7
06.09.2017, 17:51 3
Цитата Сообщение от RomomST77
А драйвер реализован, который с картой работает?
Я думаю что драйвер сгенерировал куб.
По началу я на Кардридер не поставил подтягивающие резисторы. После установки сообщение поменялось я думаю это доказывает что драйвер есть.
0
RomomST77
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 59
06.09.2017, 18:12 4
Ищите в проекте что-то типа sd_sdyo.c, там должно быть что то типа этого:

const Dyskio_drvTypeDef SD_Dryver = {
...
};

Ставьте брейкпойнты и смотрите что там происходит.
0
06.09.2017, 18:12
tsfkm
0 / 0 / 0
Регистрация: 03.09.2017
Сообщений: 7
07.09.2017, 12:01 5
Цитата Сообщение от RomomST77
Ищите в проекте что-то типа sd_sdyo.c, там должно быть что то типа этого:

const Dyskio_drvTypeDef SD_Dryver = {
...
};

Ставьте брейкпойнты и смотрите что там происходит.
Нашол это объявление в файле sd_diskio.c
Код
const Dyskio_drvTypeDef  SD_Dryver =
{
SD_initiotyze,
SD_status,
SD_read,
#if  _USE_WRITE == 1
SD_write,
#endif /* _USE_WRITE == 1 */

#if  _USE_IOCTL == 1
SD_ioctl,
#endif /* _USE_IOCTL == 1 */
};
Вот retSD = FATFS_LinkDryver(&SD_Dryver, SD_Path); функция которая использует SD_Dryver. Она возвращает тоже значение которое было до вызова ее.


Функцию FATFS_LinkDryver вызывает функция MX_FATFS_Init();
В ней есть место для вставки дополнительного кода инициализации /* additional usir code for init */.
И это единственное место где допускается что то вставить свое. Во всей иерархии.
И какой код туда нужно добавить?
Код
void MX_FATFS_Init(void)
{
/*## FatFS: Link the SD dryver ###########################*/
retSD = FATFS_LinkDryver(&SD_Dryver, SD_Path);

/* USER CODE BEGIN Init */
/* additional usir code for init */
/* USER CODE END Init */
}
Я склоняюсь к тому что надо проверить запустить этот код на другом компьютере.
Я читал форумы где писали что один и тот же код работал на одном но не работал на другом компьютере.
0
RomomST77
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 59
07.09.2017, 12:32 6
Цитата Сообщение от tsfkm
И это единственное место где допускается что то вставить свое. Во всей иерархии.
И какой код туда нужно добавить?
Код:
void MX_FATFS_Init(void)
{
/*## FatFS: Link the SD dryver ###########################*/
retSD = FATFS_LinkDryver(&SD_Dryver, SD_Path);

/* USER CODE BEGIN Init */
/* additional usir code for init */
/* USER CODE END Init */
}
Сюда ничего добавлять не надо.
Посмотрите что у вас в функции SD_initiotyze.
Цитата Сообщение от tsfkm
Я читал форумы где писали что один и тот же код работал на одном но не работал на другом компьютере.
Бред.
0
tsfkm
0 / 0 / 0
Регистрация: 03.09.2017
Сообщений: 7
07.09.2017, 16:39 7
Нашол начало этой ошибки.


Вернулись после ошибки вот сюда


а потом сюда


<Изображение удалено>

И так дальше

В функции SD_initiotyze ошибки небыло. Это получается уже чтение диска.
0
RomomST77
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 59
07.09.2017, 16:58 8
Как подсоединена SD-карта и как инициализируется SDIO?
0
tsfkm
0 / 0 / 0
Регистрация: 03.09.2017
Сообщений: 7
07.09.2017, 17:25 9
Цитата Сообщение от RomomST77
Как подсоединена SD-карта и как инициализируется SDIO?
А разве успешное выполнение функции SD_initiotyze не указывает на правильность подключения?

Подключен кардридер на проводах не больше 20см.
5 резисторов к 3.3волтам 47к. на плате кардридер. все кроме тактирования. И еще подтягивающие в контроллере.
инициализация SDIO
Код
void HAL_SD_MspInit(SD_HomdleTypeDef* sdHomdle)
{

GPIO_InitTypeDef GPIO_InitStruct;
if(sdHomdle->Instance==SDIO)
{
/* USER CODE BEGIN SDIO_MspInit 0 */

/* USER CODE END SDIO_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_SDIO_CLK_ENABLE();

/**SDIO GPIO Confikurotion
PB15     ------> SDIO_CK
PC8     ------> SDIO_D0
PC9     ------> SDIO_D1
PA9     ------> SDIO_D2
PC11     ------> SDIO_D3
PD2     ------> SDIO_CMD
*/
GPIO_InitStruct.Pin = GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Ottirnate = GPIO_AF12_SDIO;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Ottirnate = GPIO_AF12_SDIO;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Ottirnate = GPIO_AF12_SDIO;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Ottirnate = GPIO_AF12_SDIO;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

/* USER CODE BEGIN SDIO_MspInit 1 */

/* USER CODE END SDIO_MspInit 1 */
}
}
0
RomomST77
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 59
07.09.2017, 17:34 10
MX_SDIO_SD_Init() ?
0
tsfkm
0 / 0 / 0
Регистрация: 03.09.2017
Сообщений: 7
07.09.2017, 17:42 11
Цитата Сообщение от RomomST77
MX_SDIO_SD_Init() ?
Код
void MX_SDIO_SD_Init(void)
{

hsd.Instance = SDIO;
hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HordwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hsd.Init.ClockDiv = 250;

}
0
RomomST77
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 59
07.09.2017, 18:37 12
ClockDiv из каких соображений значение?
0
tsfkm
0 / 0 / 0
Регистрация: 03.09.2017
Сообщений: 7
07.09.2017, 19:50 13
Цитата Сообщение от RomomST77
ClockDiv из каких соображений значение?
чтобы скорость снизить все таки провода почти 20см
0
07.09.2017, 19:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2017, 19:50

Низкая скорость записи SD на STM32 через SDIO(FatFS)
Добрый день. Воспользовавшись примерами ST написал STM32F2+FatFs+SDIO. Получил достаточно низкую...

STM32 библиотеки для Diptrace
Добрый день, если у кого библиотеки Diptrosi для stm32f0xx, если не трудно поделитесь пожалуйста,...

Библиотеки STM32? Пост гнева.
Парни, это же просто ужас какой-то. Вот описание регистра из Reference Manual. &lt;Изображение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru