Mirf86 Treiber NUR als AES-Engine

  • 1
  • 2
  • Page 1 of 2
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 17.06.2011 - 22:25  ·  #1
Hallo Leute.

Ich teste gerade mal mit dem Mirf86 Treiber. Ich möchte diesen als reinen CoPro für die AES-Verschlüsselung nutzen.

Im Handbuch steht leider keine Info über "function mrf86AesAction(SrcPtr : Pointer; Cnt : byte; AESMode : tmrf86AesMode) : Boolean;"

Wenn ich nach dem Beispiel-Init im DEMO-S und -M gehe:
Code

  mrf86SetChan(mrf86Chan11, false);    // channel 11
  mrf86SetPower(mrf86dBm3P0);          // 3dBm output = 2mW
  mrf86SetLocalAddr($04);              // device address in the PAN
  mrf86SetPANAddr($02);                // main address in the channel
  mrf86SetRetryMax(6);                 // max 6 retries

  // mrf86SetSpeed(mrf86S250,false);
  mrf86SetSpeed(mrf86S2000, false);    // 2Mbit/sec

  if not(mrf86Init) then
    Writeln(serout, 'MIRF86 Init Error !!');
    Loop
      BeepSiren(10, 1);
      mDelay(1000);
    endloop;
  endif;
  Writeln(serout, 'MIRF86 TX start' + #10 + #10);

  // Key only after MIRFInit
  mrf86SetKey(15, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, $FF);

Ich schalte doch damit entsprechend den Funkteil mit dem INIT ein!
Aber das will ich ja nicht, mit welchen Werten wird der Treiber bei einem INIT OHNE die Funkparameter gestartet?

Beispiel:
Code

  if not(mrf86Init) then
    Writeln(serout, 'MIRF86 Init Error !!');
    Loop
      BeepSiren(10, 1);
      mDelay(1000);
    endloop;
  endif;
  Writeln(serout, 'MIRF86 TX start' + #10 + #10);

  // Key only after MIRFInit
  mrf86SetKey(15, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, $FF);

Normalerweise müsste ich doch die State Control Command Register (TRX_CMD) auf 0x03 "Force_TRX_OFF" setzen.

Laut Datenblatt befindet sich doch der CHIP bereits im "Receiver Mode" RX_ON, das will ich aber gar nicht. Wie kann ich das im Treiber von Miparo verhindern oder wird es bereits beim Init verhindert?

@Miparo:
Hast Du das in Deinem Treiber berücksichtigt: "Using AES in TRX_OFF state requires an activated clock at pin 17 (CLKM), i.e. register bits
CLKM_CTRL!= 0." Der Init Wert im Chip ist sowieso "1" somit würde er automatisch 1MHz an diesen Pin rausgeben. Hast Du den in Deinem Treiber abgeschaltet um evtl. Strom zu sparen?

Wie stellst Du fest, das der INIT nicht geklappt hat? Bei meinem Test (MIRF86-M) mit dem MIRF86-Modul von eLab erhalte ich IMMER ein "MIRF86 InitError", ich dachte erst es würde an meinem Board liegen, ist aber auch bei dem Board von ELab.

Hier meine Portbelegung:
Code

// MIRF AES Engine
MIRF86port = SPI_Soft, PortC.0, PortC.1, PortC.2, PortC.3, PortC.4, PortE.4;
//                         SCK,     MOSI,    MISO,    SS,      CE,      IRQ


Gruss
Thorsten
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 59
Posts: 956
Registered: 09 / 2007
Subject:

Re: Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 17.06.2011 - 23:41  ·  #2
Quote
@Miparo:
Hast Du das in Deinem Treiber berücksichtigt: "Using AES in TRX_OFF state requires an activated clock at pin 17 (CLKM), i.e. register bits
CLKM_CTRL!= 0." Der Init Wert im Chip ist sowieso "1" somit würde er automatisch 1MHz an diesen Pin rausgeben. Hast Du den in Deinem Treiber abgeschaltet um evtl. Strom zu sparen?

Wie stellst Du fest, das der INIT nicht geklappt hat? Bei meinem Test (MIRF86-M) mit dem MIRF86-Modul von eLab erhalte ich IMMER ein "MIRF86 InitError", ich dachte erst es würde an meinem Board liegen, ist aber auch bei dem Board von ELab.


Hi Thorsten,
Hast Du die .41 installiert ? Mit dem davor geht das nicht.

Wenn es zum INIT Error kommt funktioniert Dein SPI nicht richtig da hier die geschriebenen Init Werte zurück gelesen werden.

Um mrf86AesAction zu benutzen lang es :
mrf86Init - mit welchen Parametern ist egal
mrf86SetKey

Danach steht der Chip automatisch im RX Mode, was ja egal ist.

Nun kann mrf86AesAction benutzt werden. Vorzugsweise mit einen vielfachen von 16 Bytes.

Var
buffer : Array[0..1023] of byte;


..
mrf86AesAction(@buffer,SizeOf(buffer),mrf86AesEncrypt);
und wieder zurück
mrf86AesAction(@buffer,SizeOf(buffer),mrf86AesDecrypt);


Gruß
miparo
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 59
Posts: 956
Registered: 09 / 2007
Subject:

Re: Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 19.06.2011 - 20:31  ·  #3
Hi Thorsten,
ich habe die Demos gerade noch einmal getestet und die laufen einwandfrei aus der .41.

Zusätzlich habe ich das mrf86AesAction noch probiert. Geht auch.

Code

program MIRF86_M;

{$NOSHADOW}
{ $W+ Warnings}            {Warnings off}

Device = 90usb128, VCC = 5;

Define_Fuses
  Override_Fuses;
//  NoteBook  = C;
  COMport                = USB;
  Supply                 = 5.0, 200;
  FuseBits0              = [SUT0];
  FuseBits1              = [JTAGEN, SPIEN, OCDEN];
  FuseBits2              = [];
  ProgMode               = JTAG;    // SPI, JTAG or PDI
  ProgFuses              = true;    // or false – program Fuse Bits
  ProgLock               = true;    // or false – program Lock Bits
  ProgFlash              = true;    // or false – program Flash
  ProgEEprom             = true;    // or false – program Eeprom

Import SysTick, BeepPort, SerPort, MIRF86port;

Define
  ProcClock              = 16000000;        {Hertz}
  SysTick                = 10;              {msec}
  StackSize              = $060, iData;
  FrameSize              = $0100, iData;
  BeepPort               = PortE, 5;
  SerPort                = 38400, Stop1;    {Baud, StopBits|Parity}
  RxBuffer               = 20, iData;
  TxBuffer               = 32, iData;

  MIRF86port             = SPI_Soft, PortA.2, PortA.3, PortA.4, PortA.1, PortA.0, PortA.5;
  //                         SCK,     MOSI,    MISO,    SS,      CE,      IRQ
// MIRF86port   = SPI, PortB, 0,  1,   2;          // standard SPI port
  // SS, CE, IRQ
//  MIRF86port   = MSPI_2,   PortA, 0,  1,   2;    // MSPI_0..MSPI_3
  // SS, CE, IRQ
//  MIRF86port   = Mega128RFA1;

uses uMIRF86;

Implementation

{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
{$IDATA}
var
  txBuff                 : array[0..111] of byte;
  txString[@txBuff]      : string[111];
  idx                    : byte;

//---------------- MAIN --------------------
begin
  EnableInts;
  mrf86SetChan(mrf86Chan11, false);    // channel 11
  mrf86SetPower(mrf86dBm3P0);          // 3dBm output = 2mW
  mrf86SetLocalAddr($04);              // device address in the PAN
  mrf86SetPANAddr($02);                // main address in the channel
  mrf86SetRetryMax(6);                 // max 6 retries

  // mrf86SetSpeed(mrf86S250,false);
  mrf86SetSpeed(mrf86S2000, false);    // 2Mbit/sec

  if not(mrf86Init) then
    Writeln(serout, 'MIRF86 Init Error !!');
    Loop
      BeepSiren(10, 1);
      mDelay(1000);
    endloop;
  endif;
  Writeln(serout, 'MIRF86 TX start' + #10 + #10);

  // Key only after MIRFInit
  mrf86SetKey(15, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, $FF);

  idx:= 0;
  Loop
    txString:= 'first we send MIRF86 crypted text ' + ByteToStr(idx);
    mrf86AesAction(@txString[1], byte(SizeOf(txString)), mrf86AesEncrypt);
    Writeln(serout, txString);
    mrf86AesAction(@txString[1], byte(SizeOf(txString)), mrf86AesDecrypt);
    Writeln(serout, txString);
    inc(idx);
    mDelay(1000);
  endloop;
end MIRF86_M.


Ergebnis:

Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“ihý
first we send MIRF86 crypted text 0
Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“iH0‚
first we send MIRF86 crypted text 1
Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“i.BÖ
first we send MIRF86 crypted text 2
Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“i..½
first we send MIRF86 crypted text 3
Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“i.[,
first we send MIRF86 crypted text 4
Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“i›2ñ
first we send MIRF86 crypted text 5
Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“i½°&
first we send MIRF86 crypted text 6
Lñ.ñK.¼ÀñwÜ.$VBótT þÓ¶?'#0³õ×A“i.č
first we send MIRF86 crypted text 7
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 20.06.2011 - 13:48  ·  #4
Hallo Miparo.

Also ich benutze die .41er Version, ich gehe noch mal mit dem Protokollanalyser dran und schaue mal was der SPI macht. Aber ich mache erstmal meine WizNet-Schaltung auf meinem BETA-Board fertig (der Switch läuft schon :) jetzt kommt noch der W3150a+ im Reverse MMI :) )

Gruß
Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 10.07.2011 - 02:26  ·  #5
Hallo Miparo.

Da jetzt mein AT86RF... wieder auf meinem Board drauf ist, habe ich mal ein bissle getestet :)

Leider bekomme ich immer noch einen InitERROR, ABER....

Ich habe mal etwas mit mit meinem Oszi. gemessen, irgendwie läuft der MIRF nach dem Start nicht richtig, als ob er irgendwie in einen undefinierten Zustand ist.

Wenn ich am PIN17 messe (CLKM) sollte ja eigentlich 1MHz da sein, das einzige was ich messer ist totaler Müll! Wenn ich aber dann mit dem Oszi am Quarz messe habe ich meine 16MHz. Wenn ich dann wieder am PIN17 messe habe ich mein 1MHz und ich kann den AT86RF sauber initialiisieren. Es scheint fast so als müsste ich den RF oder Quarz anstoßen ??

Ich habe das Gefühl der braucht einen richtigen Reset, leider hatte ich das auf meinem BETA-Board nicht vorgsehen, ich habe den Fest auf 3v3 gelegt. Das heisst ich müsste die Leiterbahn unterbrechen einen 10k Widerstand einbauen und nach den Widerstand auf einen PortPin des Atmegas legen. Um diesen dann auf GND zu schalten.

Fährst Du mit Deinem Treiber über SPI einen Reset beim INIT?

Gruß
Thorsten
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 59
Posts: 956
Registered: 09 / 2007
Subject:

Re: Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 10.07.2011 - 11:13  ·  #6
Hallo Thorsten,
der Reset Pin liegt bei mir auch an VCC.
Ich habe x MIRF86 Module hier und 8 Eval Bord's und an jedem laufen die MIRF's einwandfrei.
Der Treiber macht natürlich einen Soft-Reset was nicht immer langt und man das Board einmal stromlos machen muss.

Gruß
Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 10.07.2011 - 12:47  ·  #7
Hallo Miparo.
Quote by miparo

Hallo Thorsten,
der Reset Pin liegt bei mir auch an VCC.
Ich habe x MIRF86 Module hier und 8 Eval Bord's und an jedem laufen die MIRF's einwandfrei.
Der Treiber macht natürlich einen Soft-Reset was nicht immer langt und man das Board einmal stromlos machen muss.

Gruß
Thorsten


OK, dann werde ich das mal entsprechend via Hardware vorsehen :), ich denke dann sollte es keine Probleme mehr geben.

Gruss
Thorsten
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 59
Posts: 956
Registered: 09 / 2007
Subject:

Re: Mirf86 Treiber NUR als AES-Engine

 · 
Posted: 10.07.2011 - 13:22  ·  #8
Quote

Wenn ich am PIN17 messe (CLKM) sollte ja eigentlich 1MHz da sein, das einzige was ich messer ist totaler Müll! Wenn ich aber dann mit dem Oszi am Quarz messe habe ich meine 16MHz. Wenn ich dann wieder am PIN17 messe habe ich mein 1MHz und ich kann den AT86RF sauber initialiisieren. Es scheint fast so als müsste ich den RF oder Quarz anstoßen ??


Nach dem Init sollte am CLKM auch nichts anliegen da wir das nicht brauchen.

Code

function  mrf86Init : boolean;
...
_mrf86RegWrite(TRX_CTRL_0, $00);                     // CLKM off
..
return(mrf86CHAN = _mrf86BitRead(SR_CHANNEL));
end;
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.025792s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI