[riot-users] STM32F3Discovery + CC1101 radio

Viktor Váczi viktor.vaczi.90 at gmail.com
Fri Jan 29 16:23:14 CET 2016


I was able to reach the shell using the radio, but I have some questions.
I have a CC1101, it seems to me that CC1100 is different, both are usable
with the driver right?
I've tried to make gnrc_networking example to work, using the instructions
of Kapsar which I've found on this mail list:

1. create a file "cc110x_params.h" and put it in your board's include/
directory. See "boards/msba2/include/cc110x_params.h" as example. You
have to put the right parameters for your board.

2. Add these lines to your board's Makefile.include:

ifneq (,$(filter gnrc_netif_default,$(USEMODULE)))
    USEMODULE += cc110x gnrc_netdev2 gnrc_cc110x
endif

3. Append these lines to Makefile.dep:

ifneq (,$(filter cc110x,$(USEMODULE)))
    DISABLE_MODULE += gnrc_sixlowpan_iphc
endif

4. make clean all flash term ...

The next steps depend on whether your board has an implementation of
cpuid. Check that by typing "ifconfig" and see whether
"fe80::201:203:405:607/64" is every node's link-local address.
If they're different and unique, continue at step 6. Otherwise, manually
set new addresses:

5. on each node, enter these lines:

ifconfig 7 del fe80::201:203:405:607
ifconfig 7 set addr <n>
ifconfig 7 add fe80::<n>

(replace <n> with any hex number from 1 to fe)

After the nodes should be able to ping each other at fe80::<n>.

6. on one node, type:
udp server start 12345

7. on another node, type:
udp send <other-node-ip> 12345 TEST
(replace <other-node-ip> ...)

By the way I'm using this module using a simple 164 mm antenna made from an
UTP cable wire in a breadboard, the module is also in the breadboard with
~10 cm wires.
http://www.radiocontrolli.com/applications/download-datasheet/category/3-multichannels-transceiver-modules.html?download=10:transceiver-module-cc1101-868-35mhz

The modified Makefile.dep is the one in the root folder.

I've also enabled debugging in the CC1101 driver files and added a small
segment to the setup, which prints out the configuration/status registers,
so I can see that the connection between the board and the radio works
properly, and it does indeed.
ifconfig tells me this:

->ifconfig

-Iface 7 HWaddr: 20 Channel: 0

-MTU:1280 HL:64 6LO RTR IPHC

-Link type: wireless

-inet6 addr: ff02::1/128 scope: local [multicast]

-inet6 addr: fe80::3600:3400:757:3156/64 scope: local

-inet6 addr: ff02::1:ff57:3156/128 scope: local [multicast]

If I set the channel it says:

-ifconfig 7 set chan 8

-drivers/cc110x/cc110x.c:cc110x_set_channel:204

-drivers/cc110x/cc110x.c:cc110x_switch_to_rx:157

-success: set channel on interface 7 to 8

But if I write in ifconfig again the "Channel" parameter stays on 0.


So I've continued with point number 5 with:

-ifconfig 7 del fe80::3600:3400:757:3156

-ifconfig 7 set addr 1

-ifconfig 7 add fe80::1

even though our adresses were different. I've tried this on different
channels.


After this I've started the udp server with:

-udp server start 12345


After that I set up the other node similarly and write:
-udp server start fe80::1 12345 TEST

And every type I try that then this appears on the first nodes terminal:
-drivers/cc110x/cc110x.c:cc110x_switch_to_rx:157

This line also appears randomly sometimes.


I've also tried txtsnd 7 20 HELLO and txtsnd 7 fe80::2 HELLO with no success


This also appears in the console:

-_send:42

-cc110x: snd pkt to 0 payload_length=28

-cc110x_isr_handler() RADIO_TX_BUSY + GDO2
I've ran a debugger and it really sends something, but not a text
apparently.

What am I missing?
Thanks!
Viktor

2016-01-28 17:49 GMT+01:00 Viktor Váczi <viktor.vaczi.90 at gmail.com>:

> I've solved the problem. The problem was in the cc110x gpio
> initialization. You should use:
> const cc110x_params_t cc110x_params[] = {
>     {
>         .spi  = 0,
>         .cs   = GPIO_PIN(0,3),
>         .gdo0 = GPIO_PIN(0,0),
>         .gdo1 = GPIO_PIN(0,6),
>         .gdo2 = GPIO_PIN(0,2)
>     },
> };
> instead of pure numbers.
>
> 2016-01-28 16:57 GMT+01:00 Viktor Váczi <viktor.vaczi.90 at gmail.com>:
>
>> I forgot to mention that the debugger says that the CPU catched a hard
>> fault exception.
>>
>> 2016-01-28 14:06 GMT+01:00 Viktor Váczi <viktor.vaczi.90 at gmail.com>:
>>
>>> Thanks for the reply!
>>> I was using PIN3 originally, but I've tried a ton of other pins. They
>>> worked in the GPIO example.
>>> I've added an interrutpt disable before the gpio inits, it has the same
>>> error: http://pastebin.com/cBuMFyWH
>>>
>>> 2016-01-28 12:22 GMT+01:00 Viktor Váczi <viktor.vaczi.90 at gmail.com>:
>>>
>>>> Hi!
>>>> I'm trying to get STM32F3discovery board to work with a cc1101 radio,
>>>> and I'm getting an error while initializing it.
>>>> I've only included the necessary modules in the boards makefile +
>>>> created the cc110x_params.h file with the appropriate setting.
>>>> The whole thing freezes up in the netdev2_cc110x_setup function. It
>>>> goes for a while, then it calls cc110x_setup, and the first step is to
>>>> initialize the CS gpio pin, so it calls gpio_init(dev->params.cs,
>>>> GPIO_DIR_OUT, GPIO_NOPULL);
>>>> The error occures at this line: port->PUPDR |= (pushpull << (2 *
>>>> pin_num));
>>>> I've ran a debugger an its seems that its trying to do a contexts
>>>> switch.
>>>> The GPIO test example works just fine I get this output on the serial
>>>> console: http://pastebin.com/eGQLqisc
>>>>  What to do/where to go? I've just started using ARM MCUs.
>>>> Here is the github repo: https://github.com/blaisehorvath/RIOT I've
>>>> changed the stm32f3discovery in boards.
>>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.riot-os.org/pipermail/users/attachments/20160129/6207dca0/attachment.html>


More information about the users mailing list