Easyelectronics.ru

Электроника для всех
Текущее время: 18 июл 2018, 00:01

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 116 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 04:59 
Только пришел

Зарегистрирован: 15 июн 2018, 03:48
Сообщения: 17
Привет всем!
Я совсем недавно заинтересовался МК, прошу не судить строго.
Целевой контроллер 'stm32f103c8t6', он же 'blue pill', он же дешманский обрубок с aliexpress за 120 рублей.
Парни, дайте совет. Вот я, к примеру, желаю программно реализовать какой-либо протокол, пусть это будет 'I2C' как самый простой (на самом деле я хочу поднять USB 2.0, а то может и USB 3.x, на МК у которого нет их аппаратной реализации) или мне лениво ковырять 'Errata' и выяснять, а где там разрабы накосячили и что они мне по этому поводу хотят посоветовать или же мне просто интересно потрогать протокол за вымя, своими ручёнками.
У меня, после чтения кучи статей, образовалась некоторая каша с терминами и понятиями из мира МК, помогите разобраться.
Например понятие 'дрыгать ногой' - как первое и единственное что нужно уметь делать при реализации любого протокола.
Правильно ли я понимаю, что есть только '0' и '1', т.е. на ноге есть напряжение = '1', на ноге нет напряжения = '0', а все остальное - это высокоуровневая вошкотня вокруг того, как сделать эту простую истину сложной для понимания большинством людей.

Правильно ли я понимаю механизм 'дрыгания ногой':
1. Коню понятно, что нужно разрешить тактирование на выбранной ноге, в моем случае это будут ноги порта 'B' №6 и №7, именно там сидит аппаратная реализация протокола 'I2C1'
2. Обе ноги нужно сконфигурить на 'выход' как 'open drain' ну и пусть это будет 2 MHZ или надо больше?
3. А вот с этого места имеется затык:
3.1. Далее берем любой таймер, выставляем частоту его срабатывания на ту которая нужна, а в обработчике прерывания на ногу 'clock' выставляем единицу, а на ногу 'data' единицу или ноль, в зависимости от передаваемых данных, что и будет являтся однократным 'дрыгом ногой'.
3.2. На следующем срабатывании таймера: 'clock' в ноль, а 'data' надо в ноль или без разницы?
3.3. На следующем срабатывании таймера: 'clock' опять в единицу, 'data' как требуется и так в цикле 8 раз, передаем 8 бит = 1 байт.
Сам протокол мне понятен, мне не понятен только механизм 'дрыгания ногами', что бы дрыгнуть нужной ногой, в нужном месте и в нужное время.
Я вообще туда копаю или вручную дрыгать ногами не надо, а надо юзать аппаратный кварц, а как?
Чиркните, pls, сам механизм, пошагово, можно без кода, простыми рабоче-крестьянскими словами, без научных терминов, на примере посылки стартового байта '11010000'


//------------------------------------------------------------------------------------------------------------------------------------
// Отвечаю сам себе
//------------------------------------------------------------------------------------------------------------------------------------
711aa писал(а):
Правильно ли я понимаю, что есть только '0' и '1', т.е. на ноге есть напряжение = '1', на ноге нет напряжения = '0', а все остальное - это высокоуровневая вошкотня вокруг того, как сделать эту простую истину сложной для понимания большинством людей

Так точно, всё так и есть. Насчёт таймеров, ну можно, хотя катит и без них.
711aa писал(а):
Я вообще туда копаю или вручную дрыгать ногами не надо, а надо юзать аппаратный кварц

Надо, надо, если уметь ногодрыгом общаться с девайсами, то это само по себе большой плюс к карме, кроме того это значительно упростит чтение мануалов, понимание работы "аппаратных" реализаций и их использование. Кварц напрямую юзать не надо, его юзает камень, т.е. выполняет инструкции с определенной частотой, которую нужно учитывать. Если дрыгать ногами слишком быстро, ведомый девайс не успеет среагировать со всеми вытекающими, поэтому нужно либо снизить частоту камня, либо добавлять искусственные задержки между дрыганием ногой.
711aa писал(а):
Чиркните, pls, сам механизм, пошагово, можно без кода, простыми рабоче-крестьянскими словами, без научных терминов, на примере посылки стартового байта '11010000'

Механизм предельно прост, дрыгнуть нужной ногой, в нужном месте и в нужное время, примерно так:
Код:
//======================================================================
.equ SCL_LOW,   0x0298         // роняем бит №6 в регистре 'GPIOB_BRR'
.equ SCL_HIGH,   0x0218         // поднимаем бит №6 в регистре 'GPIOB_BSRR'

.equ SDA_LOW,   0x029C         // роняем бит №7 в регистре 'GPIOB_BRR'
.equ SDA_HIGH,   0x021C         // поднимаем бит №7 в регистре 'GPIOB_BSRR'
//======================================================================
.syntax unified
.thumb                     // тип инструкций Thumb
.cpu cortex-m3               // STM32F103C8T6
//======================================================================
//   Таблица векторов   
//======================================================================   
   .word 0x20005000         // SP address => 0x20000000 + 0x5000
   //.word 0x08000000 + reset + 1
   .word 0x20000000 + reset + 1
//======================================================================   
ssd1306:
   .byte 0xAE, 0x20, 0x10, 0xB0, 0xC8, 0x00, 0x10, 0x40
   .byte 0x81, 0xFF, 0xA1, 0xA6, 0xA8, 0x3F, 0xA4, 0xD3
   .byte 0x00, 0xD5, 0xF0, 0xD9, 0x22, 0xDA, 0x12, 0xDB
   .byte 0x20, 0x8D, 0x14, 0x2E, 0xAF, 0x00, 0x00, 0x00
//======================================================================
   .text
//======================================================================
//   reset
//======================================================================
reset:
   bl i2c_init               // инициируем 'GPIO Port B'
   bl ssd1306_init            // инициируем экран 'SSD1306'
//----------------------------------------------------------------------
//   Главный цикл:
//----------------------------------------------------------------------
loop:
   b loop
//======================================================================
//   i2c_send_byte
//======================================================================
i2c_send_byte:
//----------------------------------------------------------------------
//   Цикл отправки байта
//----------------------------------------------------------------------   
   mov r7, r7, ror #7         // прокатываем бит №7 в бит №0
   mov r2, #8               // передаем 8 бит (СТАРШИМ битом ВПЕРЁД)
SEND_NEXT_BIT:               // менять 'SDA' можно только при 'SCL' = 0
   str r6, [r0, SCL_LOW]      // роняем 'SCL' в ноль, готовим очередной клик
   
   str r7, [r0, #0x019C]      // отправляем текущий бит через регистр 'GPIOB_ODR.7'
   mov r7, r7, ror #31         // готовим к отправке следующий бит
   
   str r6, [r0, SCL_HIGH]      // поднимаем 'SCL' в единицу, генерируем очередной клик
   subs r2, r2, #1            // уменьшаем счётчик
   bne SEND_NEXT_BIT         // NE: если Z = 0 => счётчик != 0
//----------------------------------------------------------------------
//   Принимаем ACK от ведомого
//----------------------------------------------------------------------
   str r6, [r0, SCL_LOW]      // роняем 'SCL' в ноль, готовим очередной клик
   str r6, [r0, SDA_HIGH]      // поднимаем 'SDA' в единицу, далее ведомый роняет её в '0' = 'ACK' или не роняет = 'NACK'
   str r6, [r0, SCL_HIGH]      // поднимаем 'SCL' в единицу, генерируем клик 'ACK'
   
   // Проверяем, уронил ли ведомый 'SDA' в ноль   
   ldr r1, [r0, #0x011C]      // читаем 'GPIOB_IDR.7'
   tst r1, #0x0001            // 'GPIOB_IDR.7'
   bne loop               // если Z = 0 (бит = 1) => 'NACK'
//----------------------------------------------------------------------
   bx lr
//======================================================================
//   ssd1306_init
//======================================================================
ssd1306_init:
   push {lr}
//----------------------------------------------------------------------
   bl i2c_start
//----------------------------------------------------------------------
   mov r7, #0x78            // отправляем адрес ssd1306
   bl i2c_send_byte
   
   adr r5, ssd1306            // адрес массива с командами
   mov r4, #29               // счётчик цикла
//----------------------------------------------------------------------
//   НАЧАЛО ЦИКЛА
//----------------------------------------------------------------------
SEND_NEXT_COMMAND:
   mov r7, #0x80            // коммандный байт
   bl i2c_send_byte
   
   ldrb r7, [r5], #1         // текущая команда + переход к следующей
   bl i2c_send_byte
   
   subs r4, r4, #1            // уменьшаем счётчик
   bne SEND_NEXT_COMMAND      // NE: если Z = 0 => счётчик != 0
//----------------------------------------------------------------------
   bl i2c_stop
//----------------------------------------------------------------------
   pop {pc}
//======================================================================
//   i2c_start
//======================================================================
i2c_start:
//----------------------------------------------------------------------
//   Загружаем в регистр 'R0' базовый адрес 'GPIO Port B' (bit-banding)
//----------------------------------------------------------------------
   movw r0, #0x8000         // r0 = 0x00008000
   movt r0, #0x4221         // r0 = 0x42218000
//----------------------------------------------------------------------
   str r6, [r0, SDA_HIGH]      // поднимаем 'SDA' в единицу
   
   // читаем 'GPIOB_IDR', если у 'SDA' не встал, стартануть не получиться, выходим с ошибкой
   // здесь нужен код обработки ошибки
   
   str r6, [r0, SCL_HIGH]      // поднимаем 'SCL' в единицу
   str r6, [r0, SDA_LOW]      // 'SDA' 1->0, при 'SCL' = 1
   
   // читаем 'GPIOB_IDR', если 'SDA' не упал, то шина неисправна, выходим с ошибкой
   // здесь нужен код обработки ошибки
//----------------------------------------------------------------------
   bx lr
//======================================================================
//   i2c_stop
//======================================================================
i2c_stop:                  // 'SDA' 0->1, при 'SCL' = 1
   str r6, [r0, SCL_LOW]      // роняем 'SCL' в ноль
   str r6, [r0, SDA_LOW]      // роняем 'SDA' в ноль
   str r6, [r0, SCL_HIGH]      // поднимаем 'SCL' в единицу
   str r6, [r0, SDA_HIGH]      // поднимаем 'SDA' в единицу
   bx lr
//======================================================================
//   i2c_init
//======================================================================
i2c_init:                  // 'PB6 = SCL' и 'PB7 = SDA'
   mov r6, #1               // единица для записи в 'bit-banding'
//----------------------------------------------------------------------
//   Конфигурируем регистр 'RCC', адрес 0x40021000 (RM p.50, p.121)
//----------------------------------------------------------------------
   // 0x40021018 -> 0x42000000 + (0x00021018*32) + (3*4) = 0x42000000 + 0x00420300 + 0x0C = 0x4242030C
   movw r0, #0x030C
   movt r0, #0x4242         // адрес бита №3 регистра 'RCC_APB2ENR'
   str r6, [r0, #0x00]         // поднимаем бит №3 = 'IOPBEN'
//----------------------------------------------------------------------
//   Конфигурируем 'GPIO Port B', адрес 0x40010C00 (RM p.51, p.194, p.172)
//----------------------------------------------------------------------
   movw r0, #0x0C00
   movt r0, #0x4001         // базовый адрес 'GPIOB' = 0x40010C00
   
   ldr r1, [r0]            // читаем регистр 'GPIOB_CRL'
   bic r1, r1, 0xFF000000      // обнуляем биты №31:24 ('PB7-PB6')
   orr r1, r1, 0x77000000      // 0x7 => CNF = '01' = 'General purpose output Open-drain', MODE = '11' = 'Output mode, max speed 50 MHz'
   str r1, [r0, #0x00]         // сохраняем регистр 'GPIOB_CRL'
//----------------------------------------------------------------------
   bx lr
//======================================================================

Собирать так:
Код:
   arm-none-eabi-as -o main.o main.asm
   arm-none-eabi-objcopy -O binary main.o main.bin

Прошивать так:
Есть один момент, по умолчанию программа работает ТОЛЬКО в оперативной памяти МК, оставляя оригинальную прошивку без изменений, поэтому требуется физически переставить джамперы на '1:1'
Прошиваем:
Код:
   st-flash write main.bin 0x20000000

Если есть желание записать именно на флешку, то джамперы менять не требуется, нужно забанить строку:
Код:
   .word 0x20000000 + reset + 1

и разбанить строку:
Код:
   //.word 0x08000000 + reset + 1

После чего прошить так:
Код:
   st-flash write main.bin 0x08000000

Код не совершенен и умеет только зажигать (инициировать) экран 'SSD1306' на синей пилюле 'STM32F103C8T6' при следующих условиях:
- 'SDA' экрана воткнут в ногу 'PB7'
- 'SCL' экрана воткнут в ногу 'PB6'
Этого вполне достаточно, для понимания механизма работы.

А если интересуют подробности, можно посмотреть видос на ютабчике: в котором вменяемый дядька простым и понятным русским языком, буквально на пальцах объясняет интерфейс 'I2C': https://www.youtube.com/watch?v=_4KD29qnhNM
А так же почитать статьи в интернетах, например эту: http://easyelectronics.ru/interface-bus-iic-i2c.html

UPD:
Я мальца причесал первичный код и покоцал задержки, т.к. на дефолтных 2MHz они не требуются, по крайней мере в данном случае, а так же я убрал постфиксы '.w' из инструкций, на которые у меня были свои планы, но они изменились.
Если найду более красивые решения, то обновлю код, но для настоящих STM-щиков он всё одно НЕ сгодиться. Мои религиозные взгляды запрещают использовать набор инструкций 'THUMB2' в полном объёме, например блок 'IT = IF-THEN' и некоторые другие инструкции, ну а ВСЕМ остальным рекомендую самым активным образом юзать возможность условного исполнения и прочие 16 битные инструкции, что позволит писать более красивый и компактный код под 'CORTEX-M'.
Выкладывать свои 'шЫдевры' здесь я больше не буду, дабы не генерировать потоки говен местных "гуру", создам канал на ютабчике и буду пилить видосики для таких же задротов как и я.

А на этом все, неувязочка вышла, зашел не на тот форум и стал задавать не те вопросы, не тем людям, извините, если кого обидел.

Тем, кто зашел на ветку впервые: всю инфу я выложил в этом посте, тратить время на чтение всех остальных постов, включая мои, нет смысла, хотя решайте сами.


Последний раз редактировалось 711aa 12 июл 2018, 22:13, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 08:00 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1942
711aa писал(а):
лениво ковырять 'Errata' и выяснять, а где там разрабы накосячили

Эк вы сразу махнули - вам лениво читать, но поспешили сразу же обвинить производителей в вашей собственной косорукости. Это моветон (французское слово).
Как вы собрались делать программный USB 3.0, если даже не представляете, из чего он состоит.
С программным I2C завсегда ардуинщики маялись, это их прерогатива - если лень читать мануал - скачай скетч.
1. Если бы не ленились читать мануал (ИМЕННО МАНУАЛ, а не эррату), то знали бы, что тактирование включается целиком на весь 16-ножечный порт.
2. Опять же поленились прочитать физическую спецификацию I2C. Выходы - OD, подтяжка резистором к VDD, макс.частота в режиме fast - 1 МГц. Стандартные частоты - 100 и 400 кГц.
3. ...даже не буду терять время на ответ. Вы не знаете реализацию I2C и не читали мануалов. Аппаратный кварц - это что это и где это? Он не имеет отношения к I2C.
Про состояние Start, Stop, Аck и пр. - нужно вначале прочитать, как это работает. По рабоче-крестьянски - вот вам картинка-раскрасска, сделайте так же:
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 08:41 
Старожил
Аватара пользователя

Зарегистрирован: 09 июн 2016, 13:49
Сообщения: 263
Откуда: Севастополь
... с программным I2C, задолго до ардуинщиков, пиководы маялись, в те времена, когда кроме PIC16F84 больше ничего не было.
Прошло 20 лет, и тут - хренась !
Плохой подход, совсем плохой...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 09:47 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 744
711aa писал(а):
(на самом деле я хочу поднять USB 2.0, а то может и USB 3.x, на МК у которого нет их аппаратной реализации) или мне лениво ковырять 'Errata'

Вот это замашка. Пойдите для начала взгляните код программной реализации хотя бы того же USB 1.0 да хоть для AVR - V-USB. И осознайте масштаб. А для 2.0 и тем более 3.0 сложность и требования увеличиваются экспоненциально.
I2C можно, но вот нужно ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 10:38 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 553
Откуда: Германия
Мне недавно I2C понадобился именно программный. Следующая комбинация условий:
1. Надо общаться с двумя одинаковыми МС (TM1650), адрес не меняется.
2. МС согласна получать данные до 4 МГц.
3. Самое главное - железо уже готово. Один пин для такта на обе МС, по одному пину для данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 11:51 
Только пришел

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 22
Откуда: Украина
Выложу пример программной реализации правда не I2C а MICROWIRE Bus для EEPROM 93C56, МК AT91M55800

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 12:22 
Старожил

Зарегистрирован: 19 апр 2016, 11:59
Сообщения: 295
711aa писал(а):
Вот я, к примеру, желаю программно реализовать какой-либо протокол, пусть это будет 'I2C'
В STM32F103C8T6 есть два аппаратных I2C.

711aa писал(а):
(на самом деле я хочу поднять USB 2.0, а то может и USB 3.x
В STM32F103C8T6 есть аппаратный USB 2.0.
Даже не представляете чего хотите. Посмотрите вики. https://ru.wikipedia.org/wiki/USB#USB_2.0
У USB 2.0 есть несколько скоростей работы. Если Low-speed со скоростью 1.5 Мбит/с может и получится реализовать, то Full-speed, и тем более High-speed вероятно не получится. Про USB 3.0 со скоростью передачи 5 Гбит/с и говорить нечего.

711aa писал(а):
Я вообще туда копаю или вручную дрыгать ногами не надо, а надо юзать аппаратный кварц, а как?
Типа того, только не кварц, а аппаратный I2C.


Последний раз редактировалось Maik 15 июн 2018, 12:24, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 12:23 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1124
711aa писал(а):
Правильно ли я понимаю, что есть только '0' и '1', т.е. на ноге есть напряжение = '1', на ноге нет напряжения = '0', а все остальное - это высокоуровневая вошкотня вокруг того, как сделать эту простую истину сложной для понимания большинством людей.

Скорее низкоуровневая, но мне нравится такой незамыленный взгляд )
711aa, какой у тебя бэкграунд в программировании?

_________________
less is more


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 12:43 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2651
Программный I2C сделать то можно, проблемы начнутся на вполне безобидных штуках, типа растягивания клока у слейва. Только нафига делать софтовый? Уж проще обойти все баги, описанные в Errata, да сделать годную библиотеку. Тем более - интерфейс довольно медленный, на него обычно DMA цепляют, чтобы проц не тратил все свои мегагерцы на ожидание приема/передачи.
Ну и I2C - это все же интерфейс, такой же как SPI, USART. Протокол - всё что выше уровнем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 12:56 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4571
Maik писал(а):
STM32F103C8T6 есть два аппаратных I2C.
Угу, есть. Только они глючные и, что действительно важно - эти глюки костылями не устраняются полностью. Вполне реально получить остановившийся механизм.
Так что, у меня на F1 используется софтовый I2C.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 13:33 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2013, 00:58
Сообщения: 2914
Откуда: Тольятти
viewtopic.php?p=528731#p528731


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 13:45 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4571
iev91, на это есть костыль, описан в errata. После этого "оно" работает. Проблема в том, что его "работа" не абсолютно надежна - через какое-то время, особенно при наличии помех, сам механизм машины I2C останавливается. Выдернуть его оттуда можно ногодрыгом (описано в той-же errata).
А теперь самое веселое - даже с учетом костылей и ногодрыга, вполне возможно получить остановившийся I2C.
Т.е. устройство в-принципе не работоспособно. Во всех последующих семействах контроллер I2C был заменен. (Именно "заменен", а не "исправлен", IMHO). Всё(?) остальное железо лишь немного эволюционизирровало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 15:37 
Заглядывает иногда

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 198
Господа, я тут Windows решил написать, только вот что такое байт объясните, дальше я сам :))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 16:03 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2651
На F4, где I2C такой же как на F1, нам удалось нормально запустить I2C на прерываниях. Все на регистрах, разве что инициализация на SPL. С проверкой ошибок, зависаний, повторов в случае неудачи и т.д. Работает без сбоев в десятке проектов. Но да, геморно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 16:16 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 560
Hold писал(а):
На F4, где I2C такой же как на F1, нам удалось нормально запустить I2C на прерываниях.

На F4 часть I2C багов пофиксили, правда добавились и новые, но уже не такие критичные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 16:33 
Заглядывает иногда

Зарегистрирован: 06 янв 2014, 17:52
Сообщения: 35
VladislavS писал(а):
Господа, я тут Windows решил написать, только вот что такое байт объясните, дальше я сам :))

Я уже делал такое, почти все работало.. Появлялась заставка Windows98 и часики крутились. Там немного осталось.. Правда это было 20 лет назад.. Теперь нужно только картинку заменить.

711aa,
Тут отлично описан USB http://microsin.ru/content/view/1107/44
Готов поспорить, что после 2-х абзацев ты решишь что - "тут слишкам многа букаф" и пойдешь играть в доту :)


Последний раз редактировалось Utyf 16 июн 2018, 19:04, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 19:23 
Заглядывает иногда

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 198
Utyf писал(а):
Тут отлично описан USB http://microsin.ru/content/view/1107/44
Готов поспорить, что после 2-х абзацев ты решишь что - "тут слишкам многа букаф" и пойдешь играть в доту :)

Не знаю что такое дота, но USB CDC на F103 и F427 с нуля без библиотек я делал. Там всё просто, главное узнать что такое байт, остальное просто запрограммировать и всё :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 20:37 
Старожил

Зарегистрирован: 13 июл 2016, 11:05
Сообщения: 262
поддерживаю, в 1995 году очень тяжело было (никак) с I2C. Я делал программно, ногодрыганием.
И даже где-то в 2004.
Но сейчас???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 15 июн 2018, 23:43 
Только пришел

Зарегистрирован: 15 июн 2018, 03:48
Сообщения: 17
BusMaster писал(а):
Эк вы сразу махнули - вам лениво читать, но поспешили сразу же обвинить производителей в вашей собственной косорукости. Это моветон (французское слово).

Разве 'Errata' самим своим существованием не доказывает наличие ошибок сделанных производителем, моя вина в чём? И по поводу моей 'косорукости', вы, я извиняюсь, на основании чего делаете такие выводы?

BusMaster писал(а):
Как вы собрались делать программный USB 3.0, если даже не представляете, из чего он состоит.

Опять же у меня вопрос, на основании чего вы делаете такие выводы?

BusMaster писал(а):
...даже не буду терять время на ответ. Вы не знаете реализацию I2C и не читали мануалов. Аппаратный кварц - это что это и где это? Он не имеет отношения к I2C.

Собственно это я и хотел услышать, разве что в несколько менее агрессивной форме, ну что то типа "Братишка, кварц это вообще не то, юзай таймеры".
А так спасибо за ответ и потерянное на меня время.

AlexTA писал(а):
Выложу пример программной реализации правда не I2C а MICROWIRE Bus для EEPROM 93C56, МК AT91M55800

Да это не важно какой интерфейс, тут важен сам принцип работы. А почему задержка программная, на таймере разве не лучше?
За пример кода спасибо!

vt340 писал(а):
711aa писал(а):
Правильно ли я понимаю, что есть только '0' и '1', т.е. на ноге есть напряжение = '1', на ноге нет напряжения = '0', а все остальное - это высокоуровневая вошкотня вокруг того, как сделать эту простую истину сложной для понимания большинством людей.

Скорее низкоуровневая, но мне нравится такой незамыленный взгляд )
711aa, какой у тебя бэкграунд в программировании?

Да все как обычно, начал с 'C++ Builder' под 'winDOS', как и все брызгал слюнями, что это 'TRUE' а всё остальное ересь (мне стыдно, но это голая правда), со временем понял, что мой мозг не осиливает, а скорее даже с омерзением отторгает любую абстракцию, потом голое ядро Linux+asm+syscalls, потом 'OSDEV', а теперь вот скатился до МК, если так пойдет дальше, то походу высока вероятность падения в бездну 'FPGA'.

ALL писал(а):
...

Спасибо всем, кто ответил, пойду юзать таймеры, читать маны и плакать в подушку, еще не решил в какой именно последовательности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 16 июн 2018, 12:20 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1124
711aa писал(а):
а теперь вот скатился до МК

Примерно ясно
Тут мало программистов, в основном программирующие электроники [это примерно как программирующий сисадмин]
Есть хороший вход в эту кухню с точки зрения программиста - https://eax.me и автор - afiskon - тут иногда появляется
Если же хочешь хардкора, то книжка - Joseph Yiu "The Definitive Guide to the ARM Cortex-M3" [есть и хороший перевод на русский]

_________________
less is more


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 16 июн 2018, 12:52 
Заглядывает иногда

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 198
711aa писал(а):
читать маны

Если отбросить всю шелуху, то это главное чем стоит заняться. Чтение даташитов, спецификаций, протоколов и т.д. занимает больше половины времени эмбэддера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 16 июн 2018, 14:01 
Старожил

Зарегистрирован: 02 май 2015, 16:16
Сообщения: 1640
VladislavS писал(а):
711aa писал(а):
читать маны
Если отбросить всю шелуху, то это главное чем стоит заняться. Чтение даташитов, спецификаций, протоколов и т.д. занимает больше половины времени эмбэддера.
Как утверждают английские учёные: наш мозг не может воспринять и запомнить в долговременной памяти ненужную для повседневной жизни информацию...
поэтому из прочитанных сотен тысячестраничных иноязычных пэдээфов про сотни модификаций процессоров в памяти может задержаться несколько (7) иноязычных слов без сохраняемого смыслового контекста.
Проще использовать нормальную интерактивную среду программирования, которая напомнит о существующих проблемах 'I2C' в выбранном в Кубе процессоре и предложит пути её обхода :)
В том же Кубе очень удобно смотреть на неудобное и нелогичное расположение ножек
не совсем удобно настраивать порты и внутренние устройства...
нет возможности интерактивного взаимодействия со средой программирования
но пока никто не разработал идеальной среды программирования... всё по старинке... листай мануалы ... вместо быстрого интерактивного CHM, в котором собрана информация о всех процессорах, их регистрах и их глюках.
Ситуация даже хуже чем было 40 лет назад... в эпоху i8080.
Хотели с RISCом сделать Мир лучше, а получилось как всегда... Человек умный, а 1-нанометровый процессор 21-го века тупой и глючный.

Всю нужную информацию можно извлечь из поставки Куба
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 16 июн 2018, 16:33 
Заглядывает иногда

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 198
petrplc писал(а):
в памяти может задержаться несколько (7) иноязычных слов без сохраняемого смыслового контекста.
Что??? Рыбка и то больше запомнит.
petrplc писал(а):
Проще использовать нормальную интерактивную среду программирования
А ещё проще изобретательную машину.
petrplc писал(а):
Всю нужную информацию можно извлечь из поставки Куба
Мир микроконтроллеров, к счастью, не состоит из одних лишь STM32.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 16 июн 2018, 16:47 
Старожил

Зарегистрирован: 02 май 2015, 16:16
Сообщения: 1640
VladislavS писал(а):
petrplc писал(а):
в памяти может задержаться несколько (7) иноязычных слов без сохраняемого смыслового контекста.
Что??? Рыбка и то больше запомнит.
о чём это я писал?
Цитата:
Мы согласны, есть исключения из правил: некоторые люди действительно могут выучить и запомнить более 10 слов в день.
Но на следующий день он может их и не вспомнить...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программная реалицация протокола, например 'I2C'
СообщениеДобавлено: 16 июн 2018, 16:53 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1942
Петя, где фотки твоего словарного запаса из 7 иностранных слов? Без фоток не верим, что ты выучил два раза по 7 иностранных слов!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 116 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB