Ankündigung

Einklappen
Keine Ankündigung bisher.

owfs Versionen/Einfluss auf Stabilität des 1wire Bus

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [-] owfs Versionen/Einfluss auf Stabilität des 1wire Bus

    Hallo,

    ich hatte bis gestern einige Probleme mit meinem 1-wire Bus.
    Ich habe kein WG, sondern einen Clone, bzw. nutze sh.py für die Brücke KNX/1wire.

    Da ich meine Komponenten aber alle von ElabNet habe und/oder aus Freundlichkeit hat Stefan und zuvor auch mal Makki mir im WG-Forum geholfen, wobei eine Frage war, welches Patchlevel ich verwende.
    Dem bin ich jetzt mal (endlich) nachgegangen. Ein PL gibt es für mich natürlich nicht, aber hier ist es dann ja u.a. die owfs-Version.

    Ich habe also die Version aus dem wg-Forum genommen und für 64bit Ubuntu gebaut.
    Seitdem ist der Bus seit 48h stabil, d.h. ohne Restarts. Das ist neu für mich.
    Deshalb hab ich jetzt mal die Version, die auf dem WG genutzt wird mit der entsprechenden Original-Version (2.8p14) verglichen.
    In dem Source Paket aus dem WG-Repo sind viele Dateien mehr drin, als in der Original-Version, viele *.o, weshalb ich davon ausgehe, dass die Dateien dadurch in das Paket geraten sind, dass vor dem Packen einmal kompiliert wurde.
    Daher habe ich jetzt mal nur die Dateien verglichen, die in beiden Versionen enthalten sind.

    Hier möchte ich die Unterschiede zeigen:
    1) Einige Pfade in Makefiles sind angepasst. Ich gehe davon aus, dass keinen Einfluss auf die Stabilität hat.
    2) unter examples\ sind einige *.php Dateien unterschiedlich. Ich gehe davon aus, dass keinen Einfluss auf die Stabilität hat.
    3) Interessant wird es in module\owlib\src\c\
    Da gibt es die ow_ds9490.c und die ow_usb_msg.c
    Hierin gibt es einige Änderungen von Makki.
    Code:
    diff ./ow_ds9490.c ~/owfs/wg_version/owfs-2.8p14/module/owlib/src/c/ow_ds9490.c
    508a509,511
    >       LEVEL_DEBUG("DS9490 RESET. changed %d, flex: %d", in->changed_bus_settings, in->flex) ;
    >       //in->changed_bus_settings=1; //FIXME: MM!!!! quirk this should be done completely in ow_usb_msg!
    >
    510c513
    <               LEVEL_DEBUG("Attempting RESET on null bus") ;
    ---
    >               LEVEL_DEBUG("Attempting RESET on null bus %d/%d", in->master.usb.usb, in->master.usb.dev) ; //FIXME! what doees it mean? no reconnect is tried->null the bus?
    533c536,538
    <       if ( BAD( USB_Control_Msg(COMM_CMD, COMM_1_WIRE_RESET | COMM_F | COMM_IM | COMM_SE, USpeed, pn)) ) {
    ---
    >       //FIXME: MM/ changed hard to flexible speed
    >       //if ( BAD( USB_Control_Msg(COMM_CMD, COMM_1_WIRE_RESET | COMM_F | COMM_IM | COMM_SE, USpeed, pn)) ) {
    >       if ( BAD( USB_Control_Msg(COMM_CMD, COMM_1_WIRE_RESET | COMM_F | COMM_IM | COMM_SE, ONEWIREBUSSPEED_FLEXIBLE, pn)) ) {
    547a553
    >                       LEVEL_DEBUG("DS9490_Reset: SHORT");
    549a556
    >                       LEVEL_DEBUG("DS9490_Reset: OK");
    552a560,580
    >                       LEVEL_DEBUG("DS9490_Reset: ERROR");
    >                       /* FIXME: FIXED. In ow_usb_msg.c an USB-reset was was issued:
    >                       * USB_Control_Msg(CONTROL_CMD, CTL_RESET_DEVICE, 0x0000, pn) ;
    >                       * So we need to setup the Adapter again
    >                       * Though here is probably the wrong place, duplicated code from _setup_adaptor
    >                       */
    >
    >               // enable both program and strong pulses
    >               if ( BAD( USB_Control_Msg(MODE_CMD, MOD_PULSE_EN, ENABLE_PROGRAM_AND_PULSE, pn)) ) {
    >                       LEVEL_DATA("EnableProgram error");
    >               }
    >               // enable speed changes
    >               if ( BAD( USB_Control_Msg(MODE_CMD, MOD_SPEED_CHANGE_EN, 1, pn)) ) {
    >                       LEVEL_DATA("RESET_Error: SpeedEnable error");
    >               }
    >               // set the strong pullup duration to infinite
    >               if ( BAD( USB_Control_Msg(COMM_CMD, COMM_SET_DURATION | COMM_IM, 0x0000, pn)) ) { //FIXME: changed from 0x0000 to 0x40 which is 1024ms to avoid timeout&reset_error
    >                       LEVEL_DATA("StrongPullup error");
    >                       return gbBAD;
    >               }
    >                       DS9490_SetSpeed(pn);
    559c587
    <               LEVEL_DEBUG("Status bytes[%d]: %X", i, val);
    ---
    >               LEVEL_DEBUG("Reset: Status bytes[%d]: %X", i, val);
    817c845
    <       LEVEL_DATA("start");
    ---
    >       LEVEL_DATA("DS9490_PowerByte start");
    828a857
    >       LEVEL_DEBUG("DS9490_PowerByte DELAY:%d", delay); //FIXME: MM send
    830a860
    >       //DS9490_HaltPulse(pn); //FIXME: MM send twice
    889c919
    <       LEVEL_DATA("timeout");
    ---
    >       LEVEL_DATA("DS9490_HaltPulse timeout");
    999c1029
    <       if ( BAD( USB_Control_Msg(COMM_CMD, COMM_SET_DURATION | COMM_IM, 0x0000, pn)) ) {
    ---
    >       if ( BAD( USB_Control_Msg(COMM_CMD, COMM_SET_DURATION | COMM_IM, 0x0000, pn)) ) { //FIXME: changed from 0x0000 to 0x40 which is 1024ms to avoid timeout&reset_error
    1039c1069
    <               in->master.usb.pulldownslewrate = PARMSET_Slew0p83Vus;
    ---
    >               in->master.usb.pulldownslewrate = PARMSET_Slew1p10Vus; //FIXME: was: PARMSET_Slew0p83Vus DS recommends PARMSET_Slew1p10Vus (0x4)??
    Code:
    diff ./ow_usb_msg.c ~/owfs/wg_version/owfs-2.8p14/module/owlib/src/c/ow_usb_msg.c
    198a199,238
    >                       //FIXME: if the line below really works we dont nee the line above ;)
    >                       LEVEL_DEBUG("USB status registers EFlags:%u->SPU:%u Dspeed:%u,Speed:%u,SPUdur:%u, PDslew:%u, W1lowtime:%u, W0rectime:%u, DevState:%u, CC1:%u, CC2:%u, CCState:%u, DataOutState:%u, DataInState:%u",
    >                           buffer[0], (buffer[0]&0x01), (buffer[0]&0x04 ? 1 : 0),
    >                           buffer[1],
    >                           buffer[2],
    >                           buffer[4],
    >                           buffer[5],
    >                           buffer[6],
    >                           buffer[8],
    >                           buffer[9],
    >                           buffer[10],
    >                           buffer[11],
    >                           buffer[12],
    >                           buffer[13]                      );
    >               /*
    >         Datasheet DS2490 page 29 table 16
    >         0: Enable Flags: SPUE=1(bit0) If set to 1, the strong pullup to 5V is enabled, if set to 0, it is disabled.
    >         bit1 should be 0 but is 1 ?! SPCE = 4(bit2) If set to 1, a dynamic 1-Wire bus speed change through a Communication command is enabled, if set to 0, it is disabled.
    >         1: 1-Wire Speed
    >         2: Strong Pullup Duration
    >         3: (Reserved)
    >         4: Pulldown Slew Rate
    >         5: Write-1 Low Time
    >         6: Data Sample Offset / Write-0 Recovery Time
    >         7: reserved
    >         8: Device Status Flags: bit0: SPUA if set to 1, the strong pullup to 5V is currently active, if set to 0, it is inactive.
    >             bit3(8): PMOD if set to 1, the DS2490 is powered from USB and external sources, if set to 0, all DS2490 power is provided from USB. FIXME: expose this to clients to check!
    >             bit4(16): HALT if set to 1, the DS2490 is currently halted, if set to 0, the device is not halted.
    >             bit5(32): IDLE if set to 1, the DS2490 is currently idle, if set to 0, the device is not idle.
    >             bit5(64): EPOF: Endpoint 0 FIFO status, see: If EP0F is set to 1, the Endpoint 0 FIFO was full when a new control transfer setup packet was
    >                 received. This is an error condition in that the setup packet received is discarded due to the full
    >                 condition. To recover from this state the USB host must send a CTL_RESET_DEVICE command; the
    >                 device will also recover with a power on reset cycle. Note that the DS2490 will accept and process a
    >                 CTL_RESET_DEVICE command if the EP0F = 1 state occurs. If EP0F = 0, no FIFO error condition exists.
    >         9: Communication Command, Byte 1
    >         10: Communication Command, Byte 2
    >         11: Communication Command Buffer Status
    >         12: 1-Wire Data Out Buffer Status
    >         13: 1-Wire Data In Buffer Status
    >                */
    212a253,266
    >                       //FIXME: if the line below really works we dont nee the line above ;)
    >                       LEVEL_DEBUG("USB status registers EFlags:%u->SPU:%u Dspeed:%u,Speed:%u,SPUdur:%u, PDslew:%u, W1lowtime:%u, W0rectime:%u, DevState:%u, CC1:%u, CC2:%u, CCState:%u, DataOutState:%u, DataInState:%u",
    >                           buffer[0], (buffer[0]&0x01), (buffer[0]&0x04 ? 1 : 0),
    >                           buffer[1],
    >                           buffer[2],
    >                           buffer[4],
    >                           buffer[5],
    >                           buffer[6],
    >                           buffer[8],
    >                           buffer[9],
    >                           buffer[10],
    >                           buffer[11],
    >                           buffer[12],
    >                           buffer[13]                      );
    216c270
    <               if (++loops > 100) {
    ---
    >               if (++loops > 100) { //FIXME: mm changed 100->200
    220a275,277
    >                       //FIXME: really! we must setup the adapter settings and speed!
    >                       //if ( BAD( DS9490_setup_adapter(in)) )
    >                       //DS9490_SetSpeed(pn);
    Wer Probleme mit der Stabilität seines 1w-Bus hat, kann ja diese Patches mal ausprobieren.

    Anbei auch die kompilierten Pakete für ubuntu 64 bit.

    Ach so: Bitte keinen Flame-War jetzt.

    Gruß,
    Hendrik
    Angehängte Dateien

    #2
    Also ich fand's interessant

    von unterwegs gesendet

    Kommentar


      #3
      Hallo,

      obige Patches sind identisch zu denen von Makki hier geposteten:
      OWFS Developers - Problems in owserver with USB and longer cables | Page 2
      http://owfs-developers.1086194.n5.na...peed_slew.diff
      http://owfs-developers.1086194.n5.na...msg_debug.diff

      Gruß,
      Hendrik

      Kommentar


        #4
        Hallo Henfri,

        ... habe deien Post gerade gefunden.
        Vielen Dank.

        Ich bin gerade an der Fehlersuche mit sh.py und raspberrypi.
        Hier habe ich die raspbian Pakete genutzt. (2.8pl15)

        Hättest Du die gepatchten sourcen noch irgendwo liegen, damit ich mal auf der Himbeere ein dpkg-buildpackage mit der 2.8pl14-makki machen kann?

        Vielen Dank
        Wolfgang

        Kommentar


          #5
          Hallo,

          das einfachste wäre sicher, diese Patchs anzuwenden:
          http://owfs-developers.1086194.n5.na...peed_slew.diff
          http://owfs-developers.1086194.n5.na...msg_debug.diff

          Hier das, was ich verwendet habe:
          https://dl.dropboxusercontent.com/u/...version.tar.gz

          Sollte identisch sein zu dem, was du unter http://repo.wiregate.de/wiregate/poo...+nmu1_i386.deb findest

          Das solltest du über apt-get src auch bekommen, wenn du das WG source repository eingebunden hast.

          Gruß,
          Hendrik

          Kommentar


            #6
            Hallo Henfri,

            vielen Dank! Leider konnte ich die Sourcen vom wg - repo mit dem PI nicht bauen.

            Mal sehen, wenn ich die original - Sorcen patche.

            Vielen Dank
            Wolfgang

            Kommentar


              #7
              Da drücke ich mal die Daumen.

              Wenn's nicht klapt, meld dich.

              Gruß,
              Hendrik

              Kommentar


                #8
                Hallo Wolfgang,

                wieso nicht das aktuelle owfs nehmen? Mir sind keine Probleme damit bekannt.
                Oder einfach unser Image verwenden.

                Bis bald

                Marcus

                Kommentar


                  #9
                  Hallo Marcus,

                  siehe oben: Mein BUs ist vielleicht ein bisschen zu lang oder was auch immer. Jedenfalls hatte ich arge Probleme. Die o.g. Patches (die sind nur für den USB-Busmaster) haben da wirklich merklich geholfen.
                  Es war danach noch nicht perfekt, aber Welten besser.

                  Gruß,
                  Hendrik

                  Kommentar


                    #10
                    Hallo Hendrik,

                    Ich spreche von 2.9p1. Die ist wesentlich aktueller. Hast Du es denn auch mit der probiert? Das geht aus den Posts nicht hervor.

                    Bis bald

                    Marcus


                    Gesendet von unterwegs

                    Kommentar


                      #11
                      Ich hatte vorher die aktuellste Version von Ubuntu (12.04) genutzt. Wenn ich es richtig sehe, ist das noch vor 2.9.

                      Die 2.9 habe ich im Source auf dem Rechner, aber soweit ich es sehen kann nicht kompiliert --> ich glaube nicht, dass ich die getestet hatte.

                      --> Vielleicht erstmal die testen!

                      Gruß,
                      Hendrik

                      Kommentar


                        #12
                        Hallo Marcus,

                        supi, hast Du irgenwo die *armhf.deb liegen? Im rasbian repo sind leider nur die 2.8p15.

                        ... ich wollte doch mein WG auch vom WRAP - Board auf einen weiteren PI migrieren. (nicht verraten)

                        vG
                        Wolfgang

                        Kommentar


                          #13
                          Hallo zusammen,

                          noch ein Nachtrag:

                          Ich habe mir gerade die release notes von owfs 2.8P15 angesehen:
                          owfs and owhttpd - Browse /owfs/2.8p15 at SourceForge.net
                          Fixes 1. USB handles bus errors with better parameters and better reinitialization -- patch from Michael Markstaller
                          Damit sollte doch eigentlich das USB - Problem gelöst sein.
                          @Hendrik
                          Wie siehst Du das?

                          vG
                          Wolfgang

                          Kommentar


                            #14
                            Das klingt doch gut. Mal den Code vergleichen.!

                            Gesendet von meinem LT26i mit Tapatalk

                            Kommentar


                              #15
                              Hallo Wolfgang,

                              Zitat von ZeitlerW Beitrag anzeigen
                              supi, hast Du irgenwo die *armhf.deb liegen?
                              leider nicht einfach greifbar.

                              Bis bald

                              Marcus

                              Kommentar

                              Lädt...
                              X