world leader in high performance signal processing
Trace: » blackfin_802.11_wlan_-_orinoco_based_driver

Introduction

Wireless LAN resources for Linux http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/

The linux-wlan™ Project http://www.linux-wlan.org/

Linux Wireless Networking HowTo http://www.siliconvalleyccie.com/linux-hn/wmp11-linux.htm

WLAN Adapter Chipset Directory http://www.linux-wlan.org/docs/wlan_adapters.html.gz

Supported Hardware

See WLAN Adapter Chipset Directory.

CompactFlash cards using the Prism2/2.5/3 chip set are expected to work (No Guarantee)

dcf-660w.jpg

Known working Cards:

  • D-Link DCF-660W
  • Linksys WCF12

Blackfin Interface Card

cf-ide-nand

STAMP Hardware Projects

Configuring the kernel for 802.11 WLAN Support

Under the top level submenu “Device Drivers” you should find the “Network device support” menu.

Blackfin specific configuration

  • 802.11 WLAN Configuration

bfin_cf_pcmcia

[*] Wireless LAN drivers (non-hamradio) & Wireless Extensions
---   Obsolete Wireless cards support (pre-802.11)
< >   STRIP (Metricom starmode radio IP)
< >   AT&T/Lucent old WaveLAN Pcmcia wireless support
< >   Xircom Netwave AirSurfer Pcmcia wireless support
---   Wireless 802.11 Frequency Hopping cards support
< >   Aviator/Raytheon 2.4MHz wireless support
---   Wireless 802.11b ISA/PCI cards support
<*>   Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)
< >   Atmel at76c50x chipset  802.11b support
---   Wireless 802.11b Pcmcia/Cardbus cards support
<*>   Hermes PCMCIA card support
< >   Symbol Spectrum24 Trilogy PCMCIA card support
< >   Blackfin WLAN card support
< >   Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards
< >   Planet WL3501 PCMCIA cards
< >   IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
  • External Bus Interface Unit EBIU Configuration

Enable wait states (0x99B3) for the memory bank the CF Card is connected to.

  • Adjusting System Clock Speed

Depending on the CF Cards PCMCIA I/O Mode and Attribute Memory timing requirement, System Clock SCLK must be changed
It might work up to 131MHz

Adding User Space Tools

In order to configure the WLAN Interface iwconfig is needed

Porting WLAN driver to Custom Hardware

Change configuration during kernel configuration.

bfin_cf_pcmcia

see also here gpio_interrupt_processing

Example Hardware Implementation

Access Point Configuration

Interface Usage Basics

root:~> dmesg
Linux version 2.6.12.1 (michael@mhenner-D01) (gcc version 3.4.4) #8 Tue Nov 15 5
Blackfin support (C) 2004 Analog Devices, Inc.
ADSP-BF537 Rev. 0.2
uClinux/BF537
Blackfin uClinux support by blackfin.uclinux.org
Processor Speed: 500 MHz core clock and 71 Mhz System Clock
Board Memory: 64MB
Memory map:
  text = 0x001000-0x0cc7c0
  data = 0x0d90fc-0x0f75b0
  bss  = 0x0f75b0-0x104e24
  rootfs = 0x3b00000-0x3f00000
  stack = 0x0da000-0x0dc000
Command line: 'root=/dev/mtdblock0 rw'
On node 0 totalpages: 15104
  DMA zone: 0 pages, LIFO batch:1
  Normal zone: 15104 pages, LIFO batch:7

  HighMem zone: 0 pages, LIFO batch:1
Instruction Cache Enabled
Data Cache Enabled (write-through)
Hardware Trace Enabled
Built 1 zonelists
Kernel command line: root=/dev/mtdblock0 rw
Configuring Blackfin Priority Driven Interrupts
PID hash table entries: 256 (order: 8, 4096 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Physical pages: 3b00
Memory available: 58752k/64667k RAM, (47k init code, 813k kernel code, 175k dat)
Blackfin Scratchpad data SRAM: 4 KB
Blackfin DATA_A SRAM: 16 KB
Blackfin DATA_B SRAM: 16 KB
Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)
Security Framework v1.0.0 initialized
Capability LSM initialized
Mount-cache hash table entries: 512
NET: Registered protocol family 16
Blackfin DMA Controller for BF533
stamp_init(): registering device resources
Real Time Clock Driver v1.10e
BlackFin BF533 serial driver version 2.00 With DMA Support
io scheduler noop registered
io scheduler cfq registered
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
orinoco 0.14alpha2 (David Gibson <hermes@gibson.dropbear.id.au>, Pavel Roskin <)
orinoco_wlan_blackfin.c (Michael Hennerich <hennerich@blackfin.uclinux.org>)
orinoco_wlan_blackfin: CIS: 01:03:00:00:FF:17:04:67:
Detected Orinoco/Prism2 WLAN BLACKFIN device at irq:34, io addr:0x20300000

Blackfin WLAN interrupt setup: flag PF4, irq 34
eth1: Hardware identity 801b:0000:0001:0000
eth1: Station identity  001f:0002:0001:0004
eth1: Firmware determined as Intersil 1.4.2
eth1: Ad-hoc demo mode supported
eth1: IEEE standard IBSS ad-hoc mode supported
eth1: WEP supported, 104-bit key
eth1: MAC address 00:0F:66:10:C7:11
eth1: Station name "Prism  I"
eth1: ready
uclinux[mtd]: RAM probe address=0x3b00000 size=0x400000
Creating 1 MTD partitions on "RAM":
0x00000000-0x00400000 : "EXT2fs"
uclinux[mtd0]: set EXT2fs to be root filesystem
NET: Registered protocol family 2
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
NET: Registered protocol family 1
NET: Registered protocol family 17
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 44k freed (0xcd000 - 0xd7000)
ttyS0 at irq = 18 is a builtin BlackFin UART
dma_alloc_init: dma_page @ 0x000d3000 - 256 pages at 0x03f00000
bfin_change_speed: baud = 57600, cval = 0x13
root:~>

Make sure the start up messages include a similar section:

orinoco 0.14alpha2 (David Gibson hermes@gibson.dropbear.id.au, Pavel Roskin <)
orinoco_wlan_blackfin.c (Michael Hennerich hennerich@blackfin.uclinux.org)
orinoco_wlan_blackfin: CIS: 01:03:00:00:FF:17:04:67:
Detected Orinoco/Prism2 WLAN BLACKFIN device at irq:34, io addr:0x20300000
Blackfin WLAN interrupt setup: flag PF4, irq 34
eth1: Hardware identity 801b:0000:0001:0000
eth1: Station identity 001f:0002:0001:0004
eth1: Firmware determined as Intersil 1.4.2
eth1: Ad-hoc demo mode supported
eth1: IEEE standard IBSS ad-hoc mode supported
eth1: WEP supported, 104-bit key
eth1: MAC address 00:0F:66:10:C7:11
eth1: Station name “Prism I”
eth1: ready

  • To connect directly to another PC, on the Blackfin:
    root:~> iwconfig eth1 nickname "STAMP" mode Ad-Hoc  essid "foo"
    root:~> ifconfig eth1 192.168.1.2 up
    root:~> eth1: New link status: Connected (0001)

    and on the host PC (as root):

    imhotep:/home/rgetz # iwconfig eth1 mode Ad-Hoc essid "foo"
    imhotep:/home/rgetz # ifconfig eth1 192.168.1.3 up
    imhotep:/home/rgetz # ping 192.168.1.2
    PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=1026 ms
    64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=31.8 ms
    64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=3.48 ms
    64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=5.43 ms
  • To connect to an access point:
    root:~> iwconfig eth1 essid dlink key s:12345
    root:~> dhcpcd eth1 &
    28
    root:~> eth1: New link status: Connected (0001)
    root:~> iwconfig
    lo        no wireless extensions.
    
    eth0      no wireless extensions.
    
    eth1      IEEE 802.11-DS  ESSID:"dlink"  Nickname:"Prism  I"
              Mode:Managed  Frequency:2.437GHz  Access Point: 00:13:46:C7:A2:EE
              Bit Rate:11Mb/s   Tx-Power=15 dBm   Sensitivity:1/3
              Retry min limit:8   RTS thr:off   Fragment thr:off
              Encryption key:3132-3334-35   Security mode:open
              Power Management:off
              Link Quality:88/92  Signal level:5/153  Noise level:119/153
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0
    
    root:~>
root:~> ifconfig
eth1      Link encap:Ethernet  HWaddr 00:0F:66:10:C7:11
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
                    Interrupt:34

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0

root:~>
root:~> ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=127 time=3.1 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=127 time=2.7 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=127 time=2.7 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=127 time=2.6 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=127 time=3.6 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=127 time=2.6 ms
64 bytes from 192.168.0.1: icmp_seq=6 ttl=127 time=2.8 ms
64 bytes from 192.168.0.1: icmp_seq=7 ttl=127 time=2.7 ms

--- 192.168.0.1 ping statistics ---
8 packets transmitted, 8 packets received, 0% packet loss
round-trip min/avg/max = 2.6/2.8/3.6 ms
root:~> 

Complete Table of Contents/Topics