Вот такие вот:
Взял я их на собственные эксперименты, но речь пойдёт не об этом. Выбор пал на этот чип, так как в нём уже есть свой процессор на базе 8051, что не может не радовать. Я бегло пролистал даташит и вроде ничего не вызвало вопросов. Мол, получим — а там разберёмся. И вот модули у меня.
Первое, с чем я столкнулся — как его запрограммировать? Другими словами — как записать в него прошивку? В даташите нашлось описание процедуры программирования через SPI порт. Отлично!
Прежде чем изобретать велосипед, я спросил у Гугла, а не изобрёл ли кто чего до меня? Как оказалось, изобрели. У здешнего пользователя MaksMS есть публикация «Программируем nRF24LE1 через Raspberry PI и USBasp», но в ней описывается метод работы с Raspberry PI, или как альтернатива USBasp. Первого у меня нет, а второе я закинул в такой дальний угол и думал, что уже никогда не вернусь к этим творениям AVR. Но судьба — злодейка, потащила меня обратно.
Так вот, нашёл я этот USBasp и залил в него предложенную прошивку. Собрал софтину программатора под Windows, не без проблем, кстати, но собрал. У меня даже с трудом получилось записать предложенный MaksMS'ом пример с миганием диодом. Но это стоило невероятных усилий. Всё это написано настолько на скорую руку, что просто вызывает отвращение. Всё сырое и шаткое. И прошивает достаточно медленно.
В общем, решил что-то с этим сделать. Я уже давненько перешёл на детища STM и у меня достаточно много платок с процом STM32F103. Решил попробовать всё-таки изобрести велосипед. За основу взял пример DFU из пакета библиотек STM USB FS. К этому примеру прилагается шикарная утилита для программирования и драйвер.
На скриншоте выше видно, что помимо Внутренней Flash процессора есть ещё SPI и nRF. Просто у меня была плата с процессором и припаянным к нему SPI флешем, и я решил оставить. Ну мало ли. Так же добавил nRF как дополнительную область памяти. Пришлось, конечно, извернуться и «промаппить» его аж в 0x14000000, но, думаю в частном случае на это всё равно.
Со стороны прошивки DFU этот адрес, конечно же, отбрасывается.
Дописал небольшой «драйвер» для работы с чипом nRF24LE1 — и, вуаля, можно прошивать через DFU интерфейс. В ходе написания возникли кое-какие вопросы, такие как «Как долго флеш стирается?» Пока жду по 10ms и считываю статус бита RDY и WEN, итого уходит около 3 ожиданий. Но было замечено, что если ждать меньшее количество времени, к примеру, 1ms, то операция записи/стирания флеша может вообще не закончится. Отвлекаю я его что ли…
Второй вопрос: «С какой максимальной скоростью можно работать с процом по SPI?» Сейчас в коде стоит примерно следующее:
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI_SPI, &SPI_InitStructure);
Делитель 64, основная частота процессора 72MHz. Меня пока устраивает, всё быстрее чем USBasp.
Вот, вроде бы, и всё. Надеюсь, это кому-то поможет.
Ах, да! Совсем забыл упомянуть, как подключать:
#define SPI_SCK_PIN GPIO_Pin_13 /* PB.13 */
#define SPI_MISO_PIN GPIO_Pin_14 /* PB.14 */
#define SPI_MOSI_PIN GPIO_Pin_15 /* PB.16 */
#define SPI_CS_PIN GPIO_Pin_12 /* PB.12 */
#define SPI_PROG_PIN GPIO_Pin_10 /* PC.10 */
Думаю, тут всё ясно.
Исходный код прошивки можно взять здесь. Проект под Eclipse с плагином GCC ARM.
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий