Forum: Mikrocontroller und Digitale Elektronik Funktionele Sicherheit


von Russe (Gast)


Lesenswert?

Funktionale Sicherheit
Aufgrund grosser Veränderungen auf dem Markt und in unserer Firma  muss 
ich mich einem anderen Thema widmen und zwar Funktionale Sicherheit. Die 
IEC61508 ist gelesen und soweit auch verstanden. Die Normen sind aber 
sehr allgemein gehalten.
Ich bin gerade dabei für CPU Selbst Test Bibliotheken zu entwickeln. 
Laut IEC61508-2 Anhang A müssen die CPU Bestandteile auch periodisch 
geprüft werden. Nehmen wir an ich habe für Trumb V7 für jedes Befehl 
eine Test-Funktion nach „walking bit (one-channel)“ Technik 
geschrieben.  Jetzt stellt sich die Frage - Wie soll ich aber die 
Units-Tests für diese Funktionen  implementieren. Ich  nehme ein 
Beispiel:
1
ADC  <Rd>, <Rm>+  Add the register value and the C-flag to the register value.
2
Rd = Rd + Rm + C
1
PUSH  {R14}
2
  BL    stlCpuInitApsr
3
  ADCS  R0, R1
4
5
  POP    {R14}
6
  B    stlCpuSaveApsr
7
8
9
  END

Wie kann man dort einen Fault Injection produzieren?

Danke an alle

von A. S. (Gast)


Lesenswert?

Diagnose wird nicht diagnostiziert.

von Russe (Gast)


Lesenswert?

A. S. schrieb:
> Diagnose wird nicht diagnostiziert.

Abschnitt 5 beschreibt die Verwendung des Fehlerinjektionssystems zur 
Validierung der generischen Selbsttests anhand der IEC 
61508-Anforderungen für CPU-Selbsttests.

von Achim M. (minifloat)


Lesenswert?

Russe schrieb:
> Ich bin gerade dabei für CPU Selbst Test Bibliotheken zu entwickeln.

Der Hersteller hat keinen solchen, den er dir bereitstellen kann?

Russe schrieb:
> Wie kann man dort einen Fault Injection produzieren?

Breakpoint setzen, Fehler injizieren, weiterlaufen lassen, schauen ob es 
wie erwartet knallt?

von Jucki (Gast)


Lesenswert?

Achim M. schrieb:
> Breakpoint setzen, Fehler injizieren, weiterlaufen lassen,
> schauen ob es wie erwartet knallt?

Meine Erfahrung:
Erstens knallt es anders - und zweitens als man denkt.

Probleme an "problematischen Punkten" werden natürlich gut erkannt,
weil man sie vorher identifiziert und mit Testpunkten/Testroutinen
umzingelt hat. - Gähn, schnarch, ...

Was hilft sowas gegen Schwachstellen in der Programmierung, die noch
nicht erkannt sind? Eher NIX.

von Russe (Gast)


Lesenswert?

Jucki schrieb:
> Achim M. schrieb:
>> Breakpoint setzen, Fehler injizieren, weiterlaufen lassen,
>> schauen ob es wie erwartet knallt?
>
> Meine Erfahrung:
> Erstens knallt es anders - und zweitens als man denkt.
>
> Probleme an "problematischen Punkten" werden natürlich gut erkannt,
> weil man sie vorher identifiziert und mit Testpunkten/Testroutinen
> umzingelt hat. - Gähn, schnarch, ...
>
> Was hilft sowas gegen Schwachstellen in der Programmierung, die noch
> nicht erkannt sind? Eher NIX.

Es geht nicht darum ob etwas knallt. Es geht um ein Produkt der nach 
IEC61508 (SIL2)entwickelt wird. Wir waren zur Abklärung beim Tüv Süd und 
grob geschildert was wir vorhaben. Die waren im Grunde mit dem Prinzip, 
was wir vorgeschlagen hatten, einverstanden. Jetzt geht es darum wie man 
nach den Normen das Ganze implementiert. Und natürlich sind die 
Selbst-tests von der Hardware enorm wichtig. Leider ist der Tüv da nicht 
wirklich eine Hilfe, da Sie immer betonen - Sie machen wir schauen 
drüber. Wie man etwas genau machen sollte  sagen die nicht. Und in so 
einem Fall geht es um die Zeit und das liebe Geld. Die Stunde kostet 
dort 165 Euro + MwSt.

von Stefan F. (Gast)


Lesenswert?

Russe schrieb:
> da Sie immer betonen - Sie machen wir schauen
> drüber. Wie man etwas genau machen sollte  sagen die nicht. Und in so
> einem Fall geht es um die Zeit und das liebe Geld.

Eben. Die Normen sollen einen dazu verleiten, viel mehr Geld auszugeben, 
als notwendig. Da macht man lieber zu viel als zu wenig, den mehrere 
Runden durch den Audit zu drehen wird auch wieder teurer.

Das ist wie bei den Juristen eine Branche, die sich selbst Arbeit 
beschafft.

Konkrete Anweisungen bekommst du nicht, weil man sich ja später im 
Schadenfall darauf berufen könnte. Dazu müsste dann ja jemand 
Verantwortung tragen. Vielleicht ist es dir noch nicht aufgefallen, aber 
heutzutage wälzt man Verantwortung auf die Leute ab, die nicht schnell 
genug weglaufen können und nicht die finanziellen Mittel haben, sich 
dagegen zu wehren.

von FuSiX (Gast)


Lesenswert?

Russe schrieb:
> Leider ist der Tüv da nicht
> wirklich eine Hilfe, da Sie immer betonen - Sie machen wir schauen
> drüber.

Jepp. Die müssen unabhängig sein und bewerten.
Wenn Sie die Lösung vorgeben sind sie befangen.

Es gibt Dienstleister die so etwas machen. kostet halt wieder.


In welcher Branche wird das Gerät genutzt ?
High/Low demand ?
Ein oder mehrkanalige HW?

von FuSiX (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Eben. Die Normen sollen einen dazu verleiten, viel mehr Geld auszugeben,

Du musst keine Normen anwenden, sie sind kein Gesetz.

Gesetzte und Richtlinien (der EU) musst du einhalten.
Mit Normen ist dies meist einfacher (Beweisslastumkehr)

von Achim M. (minifloat)


Lesenswert?

Jucki schrieb:
> Achim M. schrieb:
>> Breakpoint setzen, Fehler injizieren, weiterlaufen lassen, schauen ob es
>> wie erwartet knallt?
>
> Meine Erfahrung: Erstens knallt es anders - und zweitens als man denkt.

Es geht hier aber um einen Negativ-Test mit erwarteten Ergebnis. Also 
keinen Sunshine-Test. Danke für nichts.

Geht es hier um
a) einen Selbsttest zur Laufzeit
b) einen Integrations-/Unit-Test
wenn es auf letzteres argumentierbar ist, umso besser.

Um auf b) zu kommen, hilft meist die Argumentation, dass dieser 
Sicherheitsmechanismus  gegen einen latenten Fehler testet. Damit muss 
kein Fault-Injection zur Laufzeit, sondern nur zur Entwicklung gemacht 
werden.

mfg mf

von Russe (Gast)


Lesenswert?

FuSiX schrieb:
> Russe schrieb:
>> Leider ist der Tüv da nicht
>> wirklich eine Hilfe, da Sie immer betonen - Sie machen wir schauen
>> drüber.
>
> Jepp. Die müssen unabhängig sein und bewerten.
> Wenn Sie die Lösung vorgeben sind sie befangen.
>
> Es gibt Dienstleister die so etwas machen. kostet halt wieder.
>
> In welcher Branche wird das Gerät genutzt ?
> High/Low demand ?
> Ein oder mehrkanalige HW?

Es wird in Robotik eingesetzt. High demand System, an sich nichts 
komplexes nur zwei Analogwerte miteinander vergleichen. Zur Absicherung 
haben wir uns für ein zweikanaliges System entschieden.

Wenn es ein Dienstleister macht dann hat er knowhow und beim nächsten 
System sind wir dann genauso weit wie jetzt.

von Russe (Gast)


Lesenswert?

Achim M. schrieb:
> Geht es hier um
> a) einen Selbsttest zur Laufzeit

Ja es geht um einen Test zur Laufzeit. (RAM ROM, BUS, CPU)

von Russe (Gast)


Lesenswert?

Achim M. schrieb:
> Jucki schrieb:
>> Achim M. schrieb:
>>> Breakpoint setzen, Fehler injizieren, weiterlaufen lassen, schauen ob es
>>> wie erwartet knallt?
>>
>> Meine Erfahrung: Erstens knallt es anders - und zweitens als man denkt.
>
> Es geht hier aber um einen Negativ-Test mit erwarteten Ergebnis. Also
> keinen Sunshine-Test. Danke für nichts.
>
> Geht es hier um
> a) einen Selbsttest zur Laufzeit
> b) einen Integrations-/Unit-Test
> wenn es auf letzteres argumentierbar ist, umso besser.
>
> Um auf b) zu kommen, hilft meist die Argumentation, dass dieser
> Sicherheitsmechanismus  gegen einen latenten Fehler testet. Damit muss
> kein Fault-Injection zur Laufzeit, sondern nur zur Entwicklung gemacht
> werden.
>
> mfg mf

Die Norm erfordert 100%ges Code Covering. Und da stelle ich mir die 
Frage wie ich alle else abdecken soll.
1
u32Result = (* (*pfnCpuAddFunc))(
2
            *pu32AddInputValueA,
3
            *pu32AddInputValueB,
4
            *pu8AddInputValueAPSR);
5
6
    if(*pu8AddInputValueAPSR != 0xFF){
7
      u8APSRValue = stlCpuGetApsr();
8
      /** Calculating value  or APSR value error occur */
9
      if((u32Result != *pu32AddExpectValue) ||
10
         (u8APSRValue != mc_au8AddExpectAPSRValue[u32CpuTestNum])){
11
        /** Set error flag */
12
        b1TimeErrorFlag = TRUE;
13
      }
14
    } else {
15
      /** Calculating value error occur */
16
      if(u32Result != *pu32AddExpectValue){
17
        /** Set error flag */
18
        b1TimeErrorFlag = TRUE;
19
      }
20
    }

von Anja (Gast)


Lesenswert?

Achim M. schrieb:
> Um auf b) zu kommen, hilft meist die Argumentation, dass dieser
> Sicherheitsmechanismus  gegen einen latenten Fehler testet. Damit muss
> kein Fault-Injection zur Laufzeit, sondern nur zur Entwicklung gemacht
> werden.

Das Feindbild ist das eine PPM an defekten CPUs (Maskenfehler oder 
Schädigung durch Umwelteinflüsse)zu finden bevor der Fehler einen 
Menschen verletzt.
Da hilft keine Argumentation.

Die Tests müssen in der Regel auch so angelegt sein daß die 
Fehlerreakton (hochzählen einens Fehlerzählers zur Abschaltung der 
Endstufen) mitgetestet wird.

Gruß Anja

von Anja (Gast)


Lesenswert?

FuSiX schrieb:
> Mit Normen ist dies meist einfacher (Beweisslastumkehr)

Das ist leider zu kurz gedacht. Kommt es zu einem Schaden gilt das 
Produkthaftungsgesetz. Da mußt Du dann beweisen daß Du alles nach dem 
Stand der Technik (Enhaltung der zum Zeitpunkt des Inverkehrsbringens 
gültigen Normen) getan hast um den Schaden zu verhindern.

Gruß Anja

Beitrag #6373913 wurde von einem Moderator gelöscht.
von A. S. (Gast)


Lesenswert?

>> Achim M. schrieb:
>>> Breakpoint setzen, Fehler injizieren, weiterlaufen lassen,
>>> schauen ob es wie erwartet knallt?

Russe schrieb:
> Es geht nicht darum ob etwas knallt. Es geht um ein Produkt der nach
> IEC61508 (SIL2)entwickelt wird.

Dann konkretisiere Dein Problem.

Wenn es nur um die Diagnose geht, dann ist die Methode von Achim M. OK.

Russe schrieb:
> Wenn es ein Dienstleister macht dann hat er knowhow und beim nächsten
> System sind wir dann genauso weit wie jetzt.

Nein, dann habt Ihr ein Referenzsystem und macht es beim nächsten analog 
dazu.

Russe schrieb:
> Die Norm erfordert 100%ges Code Covering. Und da stelle ich mir die
> Frage wie ich alle else abdecken soll.

Aber in einem anderen Kontext. Beschreibe doch mal Dein Problem, dass Du 
nicht mit Breakpoint und knallen lassen lösen sollst, kannst, willst.

Prinzipiell ist 100% Code Coverage ja kein Problem, da Du jede Routine 
wie auch immer gemocked aufrufen kannst.

von FuSiX (Gast)


Lesenswert?

Anja schrieb:
> Das ist leider zu kurz gedacht. Kommt es zu einem Schaden gilt das
> Produkthaftungsgesetz

Volle Zustimmung. Ich hab's nur stark vereinfacht. Produkthaftungsgesetz 
gilt halt immer. Auch bei nicht safety...

von FuSiX (Gast)


Lesenswert?

Russe schrieb:
> Es wird in Robotik eingesetzt. High demand System, an sich nichts
> komplexes nur zwei Analogwerte miteinander vergleichen. Zur Absicherung
> haben wir uns für ein zweikanaliges System entschieden.
Für ein SIL2, HFT1, HighDemand System mit Complexen Bauteilen (uCs...)
müsst Ihr ein SFF ≥ 60% nachweisen. Das müsst Ihr in Eure Argumentation 
einbauen. Ich braucht keine hohe Diagnosedeckung in jedem Subsystem.

Ich habe solche Systeme schon komplett ohne CPU Selbsttest realisiert.
Das hängt davon ab, wie gut man die Datenverarbeitung der beiden Kanäle 
zur Laufzeit vergleichen kann. Dann decken die Kanäle die Fehler 
gegenseitig auf.
(Vorischt: jedes System ist anders... ich behaupte nicht, dass es bei 
Euch auch geht!! )

> Wenn es ein Dienstleister macht dann hat er knowhow und beim nächsten
> System sind wir dann genauso weit wie jetzt.
Falsch gedacht, er ist Dienstleister und liefert Dir natürlich alle 
Ergebnisse in Dokumentation und Quellcode.

CPU Selbsttests würde ich selber nicht machen sondern zukaufen.
Der Aufwand wir IMMER unterschätzt. Und was machst Du mit dem Know How?
Dein Produkt Know How ist IMHO wichtiger.


<Ironie>Ich kauf meine uCs auch zu und designe sie nicht selber.... 
</Ironie>

von FuSiX (Gast)


Lesenswert?

Russe schrieb:
> Die Norm erfordert 100%ges Code Covering.

Nach Tabelle B.2 (EN61508-3) braucht Ihr für SIL2 eine 100% 
Testabdeckung für Anweisungen (nicht für Verzweigungen oder 
Bedingungen).
Lies Dir das mal genau durch.

Und gerade bei CPU Tests ist es oft schwer 100% aller Verzweigungen und 
Bedingungen abzudecken. Da gilt:
Ausnahmen sind zu dokumentieren / zu begründen.

Was man immer verinnerlichen sollte:
Wir können nicht alle Fehler beseitigen.
Wir können nur versuchen zufällige (HW) Fehler zu beherrschen und 
systematische Fehler zu minimieren.
Kein System ist 100% sicher. (Wer das behauptet hat das Prinzip nicht 
verstanden).

von FuSiX (Gast)


Lesenswert?

Ergänzung:
Unabhängig ob Ihr 100% Codecoverage in den Tests Eurer Diagnose 
erreicht:
ihr müsst in der Verifikation nachweisen, dass die Diagnose im kleinen 
auch am Ende das Große abschaltet.

Früher gab's auch schon nicht angeschlossene Nothalt Schalter.

von Russe (Gast)


Lesenswert?

A. S. schrieb:
> Russe schrieb:
>> Die Norm erfordert 100%ges Code Covering. Und da stelle ich mir die
>> Frage wie ich alle else abdecken soll.
>
> Aber in einem anderen Kontext. Beschreibe doch mal Dein Problem, dass Du
> nicht mit Breakpoint und knallen lassen lösen sollst, kannst, willst.
>
> Prinzipiell ist 100% Code Coverage ja kein Problem, da Du jede Routine
> wie auch immer gemocked aufrufen kannst.

Eben, das ist die Frage wie kann ich z.B. bei oben genannter Funktion 
alle Abzweige abdecken. Ich habe um die 80 unterschiedlichen CPU 
Komandos und sollten zyklisch aufgerufen werden.
1
PUSH  {R14}
2
  BL    stlCpuInitApsr
3
  NEGS  R0, R1
4
  
5
  POP    {R14}
6
  B    stlCpuSaveApsr

Also heisst es ich setze einen Breakpoint nach NEGS Befehl und ändere 
über Debug Interface den Inhalt des Registers. So lande ich im 
Else-Zweig. Verstehe ich es richtig?

von Russe (Gast)


Lesenswert?

FuSiX schrieb:
> Und gerade bei CPU Tests ist es oft schwer 100% aller Verzweigungen und
> Bedingungen abzudecken. Da gilt:
> Ausnahmen sind zu dokumentieren / zu begründen.

vielen Dank für die konstruktiven Anmerkungen! Könntest du mir sagen wie 
die Argumentation lauten soll? technisch nicht realisierbar, da man in 
der CPU Architektur keine Möglichkeit für Fault Injection vorgesehen 
hat?


FuSiX schrieb:
> Nach Tabelle B.2 (EN61508-3) braucht Ihr für SIL2 eine 100%
> Testabdeckung für Anweisungen (nicht für Verzweigungen oder
> Bedingungen).
> Lies Dir das mal genau durch.

Die Anforderungen in der Robotik sind zum Glück nicht so hoch wie bei 
der Ind. Automatisierung. Aber die werden sicher strenger werden. Somit 
dachten wir für die Zukunft, orientieren wir uns an SIL3.

von A. S. (Gast)


Lesenswert?

Russe schrieb:
> Ich habe um die 80 unterschiedlichen CPU
> Komandos und sollten zyklisch aufgerufen werden.

zyklisch nur der Test. Die Verifikation nur einmal. Und die Kommandos 
jeweils mit jeder Adressierungsart.

Russe schrieb:
> Also heisst es ich setze einen Breakpoint nach NEGS Befehl und ändere
> über Debug Interface den Inhalt des Registers. So lande ich im
> Else-Zweig. Verstehe ich es richtig?

Ja.

Wobei ich immer noch nicht weiß, wo Du genau bist:

Wenn Du ein Kommando testest, dann ändert ein Kommando einen 
Kontrollfluss oder einen Wert. Das kannst Du automatisch testen. 
Funktioniert increment? 4 vorgeben, incrementieren, schauen ob jetzt 5 
drin steht. Fehlerreaktion testen? 4 vorgeben, incrementieren, schauen 
ob jetzt 6 drin steht.

von FuSiX (Gast)


Lesenswert?

Russe schrieb:
> Die Anforderungen in der Robotik sind zum Glück nicht so hoch wie bei
> der Ind. Automatisierung. Aber die werden sicher strenger werden. Somit
> dachten wir für die Zukunft, orientieren wir uns an SIL3.

OK. Argument. Aber ein gefährliches...
Oft macht man für die Zukunft zuviel...

>Könntest du mir sagen wie die Argumentation lauten soll?
> technisch nicht realisierbar, da man in der CPU Architektur keine Möglichkeit 
für Fault Injection vorgesehen hat?

Du hast die Antwort schon gegeben.
(Man sollte natürlich dass auch geprüft haben und schriftlich 
festgehalten was man nicht per fault injection test getestet hat.)

Wie hast du ermittelt welche Assembler Befehle du per CPU Test testest?

von A. S. (Gast)


Lesenswert?

FuSiX schrieb:
> Wie hast du ermittelt welche Assembler Befehle du per CPU Test testest?

Alle die verwendet werden, in jeder Adressierungsart. Da ist es 
einfacher, zu schauen ob man überhaupt welche ausschließen kann. Ist bei 
einem C-Compiler schwierig.

von Peter D. (peda)


Lesenswert?

Russe schrieb:
> Nehmen wir an ich habe für Trumb V7

Was soll das sein, baut Donald jetzt auch CPUs?

Ich würde erstmal die Hersteller fragen, welche Controller speziell für 
Sicherheitsanwendungen im Programm haben. Die haben bestimmt schon 
fertige Libs im ROM-Code, Flash/RAM mit ECC, Taktüberwachung, 
Fertigungstests usw.

Sicherheit läßt sich auch nie allein durch Software erreichen. Immer 
noch  State of the Art ist der Interlockschalter, der abschaltet, sobald 
ein Mensch die Schutzhaube öffnet.

von Peter D. (peda)


Lesenswert?

Russe schrieb:
> Wenn es ein Dienstleister macht dann hat er knowhow

Dienstleister kochen auch nur mit Wasser. Du bezahlst Sie für die 
Anwälte und Versicherungen, falls mal was schief läuft.
Oder sie beraten Dich unverbindlich, d.h. die volle Verantwortung bleibt 
bei Dir.

von physicist (Gast)


Lesenswert?

Russe schrieb:
> /** Set error flag */
>         b1TimeErrorFlag = TRUE;
Ein anderes Thema: Das ist kein guter Kommentar. Generell sollte man 
nicht das im Kommentar wiederholen was man mit vernünftiger 
Variablenbenennung ohnehin dem Code entnehmen kann. Stattdessen sollte 
man kommentieren warum man etwas mach.

von Russe (Gast)


Lesenswert?

Peter D. schrieb:
> Russe schrieb:
>> Nehmen wir an ich habe für Trumb V7
>
> Was soll das sein, baut Donald jetzt auch CPUs?
>
> Ich würde erstmal die Hersteller fragen, welche Controller speziell für
> Sicherheitsanwendungen im Programm haben. Die haben bestimmt schon
> fertige Libs im ROM-Code, Flash/RAM mit ECC, Taktüberwachung,
> Fertigungstests usw.
>
> Sicherheit läßt sich auch nie allein durch Software erreichen. Immer
> noch  State of the Art ist der Interlockschalter, der abschaltet, sobald
> ein Mensch die Schutzhaube öffnet.

In der Ind. Automatisierung ist es unüblich spezielle Hardware für die 
funktionelle Sicherheit zu verwenden. Beckhoff setzt z.B bei den 
Safety-Produkten auf die einfachen PIC24E -16 bit Mikrocontrollern. ST 
empfiehlt auch ihre universale STM32 Serie. Die Hersteller haben selbst 
keine Bibliotheken und verweisen gen auch solche Firmen wie Hitex oder 
Embex …

von Russe (Gast)


Lesenswert?

physicist schrieb:
> Russe schrieb:
>> /** Set error flag */
>>         b1TimeErrorFlag = TRUE;
> Ein anderes Thema: Das ist kein guter Kommentar. Generell sollte man
> nicht das im Kommentar wiederholen was man mit vernünftiger
> Variablenbenennung ohnehin dem Code entnehmen kann. Stattdessen sollte
> man kommentieren warum man etwas mach.

Danke, solche Kritik ist sehr willkommen.

von Peter D. (peda)


Lesenswert?

Russe schrieb:
> In der Ind. Automatisierung ist es unüblich spezielle Hardware für die
> funktionelle Sicherheit zu verwenden.

Wenn man wenig Ressourcen und keine Erfahrungen damit hat, könnte das 
aber eine gute Lösung sein.
Eine kurze Suche ergab z.B. die Hercules Familie von TI mit integrierten 
Diagnosefunktionen (BIST usw.):
https://www.ti.com/de-de/microcontrollers/hercules-safety-mcus/overview.html

TI bietet auch Schulungen dazu an:
https://training.ti.com/search-catalog/field_language/EN?keyword_op=AND&keywords=hercules&start=&end=

Nutzt man dagegen Standardcontroller kann auch sehr schön damit 
hereinfallen.
Wir haben z.B. mit einem Kaufteil Probleme, daß der PHY (LAN8720) darauf 
abschmiert, wenn in der Nähe ein Relais 230V schaltet. Der MC (LPC4357) 
hat auch keinen Zugriff auf den Resetpin des PHY.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

A. S. schrieb:
>> Wie hast du ermittelt welche Assembler Befehle du per CPU Test testest?

> Alle die verwendet werden, in jeder Adressierungsart. Da ist es
> einfacher, zu schauen ob man überhaupt welche ausschließen kann. Ist bei
> einem C-Compiler schwierig.

Du hast die Frage nach dem "was" beantwortet, er hat aber nach dem "wie" 
gefragt. Woher willst du wissen, dass durch eine Fehlfunktion nicht 
viele Testfälle übersprungen wurden?

von FuSiX (Gast)


Lesenswert?

Peter D. schrieb:
> Immer noch  State of the Art ist der Interlockschalter, der abschaltet, sobald 
ein Mensch die Schutzhaube öffnet.

Das änder sich gerade.
Viele Applikationen arbeiten ohne Schutzzaun z.B. Kollaborierende 
Roboter.

Auch bei autonomen Autos hängt die Sicherheit mehr an der Software als 
an der ausführenden Hardware....

von FuSiX (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Woher willst du wissen, dass durch eine Fehlfunktion nicht viele Testfälle 
übersprungen wurden?

Die Online Diagnose sollte über eine Programmlaufkontrolle gekapselt 
sein,
die erkennt, wenn einzelne Tests nicht ausgeführt wurden.
(bzw. andersrum, die einen Watchdog nur dann triggert, wenn alle Tests 
durchlaufen wurden).

von FuSiX (Gast)


Lesenswert?

Peter D. schrieb:
> Eine kurze Suche ergab z.B. die Hercules Familie von TI mit integrierten
> Diagnosefunktionen (BIST usw.):
> https://www.ti.com/de-de/microcontrollers/hercules-safety-mcus/overview.html

Diese Controller "können" helfen. Sind allerdings auch komplex und haben 
auch Fehler. Sie machen dann Sinn, wenn man z.B. ein einkanaliges System 
aufbaut.
Kein Aufwand für Datenaustausch zw. Kanälen, keine Probleme der 
Synchronisation. zw. den Kanälen.

In zweikanaligen Systemen findet man sie seltener. Dort kommen oft 
"normale" Controller zum Einsatz.

von DO-178C (Gast)


Lesenswert?

FuSiX schrieb:
> Diese Controller "können" helfen. Sind allerdings auch komplex und haben
> auch Fehler. Sie machen dann Sinn, wenn man z.B. ein einkanaliges System
> aufbaut.
> Kein Aufwand für Datenaustausch zw. Kanälen, keine Probleme der
> Synchronisation. zw. den Kanälen.
>
> In zweikanaligen Systemen findet man sie seltener. Dort kommen oft
> "normale" Controller zum Einsatz.

Falsch. Wir setzen sie in der Luftfahrt in 3 und 4-kanaligen Systemen 
ein. Warum sollte ein Controller, der bzgl. functional safety optimiert 
ist, in zwei- oder mehrkanaligen Systemen nicht helfen können, bestimmte 
Objectives zu erreichen?

von Programmierer (Gast)


Lesenswert?

Wie testet man denn eigentlich Hint-Anweisungen wie "dsb" oder 
Cache-Maintenance-Operations wie "DCCMVAC"? Es lässt sich nur schwierig 
prüfen ob die ausgeführt wurden oder ob die CPU die Operation sowieso 
schon gemacht hatte und die Instruktion ohnehin wirkungslos war, aber 
ggf. nicht immer funktioniert.

Wenn man Werte in den RAM schreibt die dann per DMA abgeholt werden, 
sollte man ja sicherstellen können dass die DMA-Einheit auch die 
aktuellen Werte sieht...

Dinge wie "SVC" oder "CPS" sind da ja noch "vergleichsweise einfach".

Wie stellt man sicher dass man die MMU korrekt konfiguriert hat und 
Register-Zugriffe auch wirklich bei der Peripherie landen und nicht 
sporadisch (so 1x in 1000000 Fällen oder so) alte Werte gelesen werden?

Wie prüft man atomic Zugriffe (LDREX+STREX) - hier bestimmte Fälle zu 
"mocken" stelle ich mir ziemlich kompliziert vor weil man mehrere 
CPU-Kerne oder ISRs synchronisieren muss.

Was ist mit den SIMD-Instruktionen?

von FuSiX (Gast)


Lesenswert?

DO-178C schrieb:
> Falsch. Wir setzen sie in der Luftfahrt in 3 und 4-kanaligen Systemen

Sorry, zu sehr verallgemeinert. Alles eine Frage des Sicherheitslevels, 
der Applikation, der Restrisiko Sicht der entwickelnden Menschen (oder 
derer die dem Teil ausgeliefert sind) und natürlich des Geldbeutels...

In Industriellen Anlagen im Bereich SIL2 und SIL3 wird das "häufig" so 
gemacht. Vermutlich setzt Ihr aber auch nicht 4mal den gleichen 
Controller mit den gleichen Bugs in einem System ein....

von FuSiX (Gast)


Lesenswert?

Programmierer schrieb:
> Wie testet man denn eigentlich Hint-Anweisungen wie "dsb" oder
>...
>...
>...

Genau deshalb halte ich nichts davon, die gesamte Sicherheit der CPU 
über solche Selbsttests zu begründen. Zuviele Internas, die wenig/nicht 
dokumentiert sind oder beeinflussbar sind.

Du wirst nicht alle Fehler aufdecken. (Denk an Deine SFF=90%).
Selbst bei den ICs wie die obigen von TI bekommst Du nur einen 
Diagnosedeckungsgrad < 100%.

>Wie stellt man sicher dass man die MMU korrekt konfiguriert hat und
>Register-Zugriffe auch wirklich bei der Peripherie landen und nicht
>sporadisch (so 1x in 1000000 Fällen oder so) alte Werte gelesen werden?

Indem man die Signalverarbeitung als Ganzes betrachtet (denn Fehler 
passieren ja nicht nur auf Registerebene...) und Top-Down mögliche 
Fehler in der Kette analysiert, prüft wie sie sich auswirken und ob die 
genutzten Diagnosen ausreichen oder ergänzt werden sollten.

Habt Ihr bei der Prüfstelle nur einzelne Maßnahmen vorgestellt oder habt 
Ihr ein "schlüssiges" Sicherheitskonzept präsentiert?

(davon unabhängig kann man eine MMU natürlich auch zyklisch testen)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.