Jump to content

    

MementoMori

Свой
  • Content Count

    933
  • Joined

  • Last visited

Community Reputation

0 Обычный

About MementoMori

  • Rank
    Знающий

Recent Profile Visitors

1891 profile views
  1. Красиво сказали)
  2. Поменял себе память QSPI на MT25QL128ABA1ESE-0SIT https://datasheet.lcsc.com/szlcsc/2005092006_Micron-Tech-MT25QL128ABA1ESE-0SIT_C524856.pdf С чтением в обычном и memory_mapped режиме проблем не возникло. Не хочет писать (а возможно и стирать) Отладка выдала проблему с функцией QSPI_WriteEnable Согласно даташиту (Table 18, стр.38) команда-адрес-данные настраиваются как 4-0-0 Включаю режим записи так Однако, если у меня 4_LINES - то срабатывает брейкпоинт. Если же 1_LINES - то функция работает без ошибок, но в микросхему ничего не пишется. Код команды правильный, по даташиту. Аналогично в следующем блоке функции writeEnable DATA_1_LINE - без ошибок, но записи не происходит, а по даташиту там 4 линии, ставлю 4 линии - срабатывает брейкпоинт Куда копать?
  3. Все! Заработало) Всем спасибо) А господину Hard_Egor - персональное спасибо
  4. Ах вот оно что.... Ладно... но и напряжение почему-то не выставляется.... буду копать...
  5. Спасибо, получилось, чтение и запись работают. Но.... не во все регистры пишется. Что я сделал - я тупо пишу 0xFFFF во все регистры. Номер регистра это Conand_byte. По идее я должен прочесть из них те же 0xFFFF, за минусом тех бит, которые Readonly или "Don't care" Command_byte = 0x01; DAC_REGISTER=0XFFFF; LSDB=DAC_REGISTER>>8; MSDB=DAC_REGISTER&0xFF; aTxBuffer[0] = Command_byte; aTxBuffer[1] = MSDB; aTxBuffer[2] = LSDB; HAL_I2C_Master_Transmit(&hi2c1, DevAddress, aTxBuffer, 3, 100); Command_byte = 0x01; aTxBuffer[0] = Command_byte; RESULT=HAL_I2C_Master_Transmit(&hi2c1, DevAddress, aTxBuffer, 1, 100); RESULT2=HAL_I2C_Master_Receive(&hi2c1, DevAddress, aRxBuffer, 2, 100); К примеру Запись в этот регистр 0xFFFF при чтении дает 0x0FFF. Отлично, идем дальше Запись в этот регистр 0xFFFF при чтении дает 0x0500 (в серединке читается DEVICE_ID, который в бинарном формате 010100). А вот регистры каналов Что бы я ни записал - читаются нули.... что может быть не так?
  6. Да картинка мне понятна, не совсем понятно, как функциями это реализлвывать Это ясно, HAL_I2C_Master_Transmit() и буфер размером в 1 байт. Посылаю как? Ещё одна функция transmit()? Или HAL_I2C_Master_Receive(), а она сама пошлёт байт адреса? В этой функции в качестве параметра есть rxBuffer. Его элементам ничего присваивать не надо, функция сама его заполнит? Так? Неправда ваша. Каждый из указанных регистров двухбайтный и читается по отдельности.
  7. Без ошибок. судя по исходному коду функции Receive, она сама туда пишет. Вот черт, я ведь так и подумал в начале. Даже на форуме написал, а потом решил, что это глупость, и стер. Я решил, что функция HAL_I2C_Mem_Read делает все сама. Так в Transmit в поле address_byte указывать адрес устройства, а в Recieve в поле address_byte указывать адрес регистра? Я правильно понял?
  8. Я любитель и STM мне за глаза. uint8_t MemAddress=0x02; uint8_t MemAddressSize=2; HAL_I2C_Mem_Read(&hi2c1, DevAddress, MemAddress,MemAddressSize, aRxBuffer, 2, 100); И вот так тоже нули...
  9. Спасибо, Теперь пытаюсь читать: Хочу прочитать STATUS_REGISTER, для его чтения COMMAND_BYTE должен быть равен 0x02 Читаю uint8_t aRxBuffer[3]; Command_byte = 0x02; aRxBuffer[0] = Command_byte; HAL_I2C_Master_Receive(&hi2c1, DevAddress, aRxBuffer, 3, 100); Пoлучаю aRxBuffer 0x00,0x00,0xFF Лажа какая-то.
  10. То есть по адресу 0х48 микросхем пересылается её же адрес? Извините, может я неправильно понимаю процесс. Мастер шлёт в сеть адрес, микросхема откликается ACK, это значит, что следующая посылка будет воспринять ей как руководство к действию, а остальные микросхемы, не распознавшие свой адрес, будут спать. Если я вызову вышеуказанную функцию отправки, получится, что она пошлёт следующую посылку Адрес Адрес Байт1 Байт2 Байт3? Или же мне нужно отправить буфер из 2,3,4 байт, а в первый будет поставлен DevAddress? Не сочтите за наглость, вас не затруднит показать, как вызывать функцию и как будет выглядеть посылка?
  11. Вот такой вот i2C ЦАП https://www.ti.com/lit/ds/symlink/dac43608.pdf Вот что в даташите про протокол написано То есть, шлем адрес, дальше тип команды (например номер канала), дальше данные (например значение напряжения на канале). И вот функция, которую предоставляет куб HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) Я не совсем пойму. Как в этом случае будет выглядеть протокол обмена? Вот так что ли? ADDRES BYTE ACK байт в pData ..... Получается что этой функцией можно только чередовать адрес и данные в посылке, а у меня адрес->команда->данные. Подскажите, как организовать обмен с этой микросхемой посредством HAL? Может я не ту функцию выбрал?
  12. Мне нужен один канал для звука и 6 для управления некоторыми потребителями. внешний цап 8 канальный, можно бы и оставшиеся два для звука использовать, но я не хочу - куда проще рулить регистром, да и внешний цап медленный. В общем куча компромисов. P.S. Скоро наверное тему про ЦАП на i2c создам, че-то не могу разобраться. Кто нить работал с DAC43608?
  13. Есть у меня такая. Она отделена от остальной земли, и через VIA сразу ныряет в слой PLANE. Ха... только сейчас обратил внимание - с LDO то же сто и без него (может я конечно путаю шумы и пульсации). Но.. пусть лучше будет. Я вот думаю, может и правда AVDD и AREF+ отсоединить и запитать от того же LDO?
  14. Так это уже другое измерение другой цепи при других настройках осциллографа.