New approaches for embedded development

The idea for this posting started when I read New approaches to dominate in embedded development article. Then I found some ther related articles and here is the result: long article.

Embedded devices, or embedded systems, are specialized computer systems that constitute components of larger electromechanical systems with which they interface. The advent of low-cost wireless connectivity is altering many things in embedded development: With a connection to the Internet, an embedded device can gain access to essentially unlimited processing power and memory in cloud service – and at the same time you need to worry about communication issues like breaks connections, latency and security issues.

Those issues are espcecially in the center of the development of popular Internet of Things device and adding connectivity to existing embedded systems. All this means that the whole nature of the embedded development effort is going to change. A new generation of programmers are already making more and more embedded systems. Rather than living and breathing C/C++, the new generation prefers more high-level, abstract languages (like Java, Python, JavaScript etc.). Instead of trying to craft each design to optimize for cost, code size, and performance, the new generation wants to create application code that is separate from an underlying platform that handles all the routine details. Memory is cheap, so code size is only a minor issue in many applications.

Historically, a typical embedded system has been designed as a control-dominated system using only a state-oriented model, such as FSMs. However, the trend in embedded systems design in recent years has been towards highly distributed architectures with support for concurrency, data and control flow, and scalable distributed computations. For example computer networks, modern industrial control systems, electronics in modern car,Internet of Things system fall to this category. This implies that a different approach is necessary.

Companies are also marketing to embedded developers in new ways. Ultra-low cost development boards to woo makers, hobbyists, students, and entrepreneurs on a shoestring budget to a processor architecture for prototyping and experimentation have already become common.If you look under the hood of any connected embedded consumer or mobile device, in addition to the OS you will find a variety of middleware applications. As hardware becomes powerful and cheap enough that the inefficiencies of platform-based products become moot. Leaders with Embedded systems development lifecycle management solutions speak out on new approaches available today in developing advanced products and systems.

Traditional approaches

C/C++

Tradionally embedded developers have been living and breathing C/C++. For a variety of reasons, the vast majority of embedded toolchains are designed to support C as the primary language. If you want to write embedded software for more than just a few hobbyist platforms, your going to need to learn C. Very many embedded systems operating systems, including Linux Kernel, are written using C language. C can be translated very easily and literally to assembly, which allows programmers to do low level things without the restrictions of assembly. When you need to optimize for cost, code size, and performance the typical choice of language is C. Still C is today used for maximum efficiency instead of C++.

C++ is very much alike C, with more features, and lots of good stuff, while not having many drawbacks, except fror it complexity. The had been for years suspicion C++ is somehow unsuitable for use in small embedded systems. At some time many 8- and 16-bit processors were lacking a C++ compiler, that may be a concern, but there are now 32-bit microcontrollers available for under a dollar supported by mature C++ compilers.Today C++ is used a lot more in embedded systems. There are many factors that may contribute to this, including more powerful processors, more challenging applications, and more familiarity with object-oriented languages.

And if you use suitable C++ subset for coding, you can make applications that work even on quite tiny processors, let the Arduino system be an example of that: You’re writing in C/C++, using a library of functions with a fairly consistent API. There is no “Arduino language” and your “.ino” files are three lines away from being standard C++.

Today C++ has not displaced C. Both of the languages are widely used, sometimes even within one system – for example in embedded Linux system that runs C++ application. When you write a C or C++ programs for modern Embedded Linux you typically use GCC compiler toolchain to do compilation and make file to manage compilation process.

Most organization put considerable focus on software quality, but software security is different. When the security is very much talked about topic todays embedded systems, the security of the programs written using C/C++ becomes sometimes a debated subject. Embedded development presents the challenge of coding in a language that’s inherently insecure; and quality assurance does little to ensure security. The truth is that majority of today’s Internet connected systems have their networking fuctionality written using C even of the actual application layer is written using some other methods.

Java

Java is a general-purpose computer programming language that is concurrent, class-based and object-oriented.The language derives much of its syntax from C and C++, but it has fewer low-level facilities than either of them. Java is intended to let application developers “write once, run anywhere” (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of computer architecture. Java is one of the most popular programming languages in use, particularly for client-server web applications. In addition to those it is widely used in mobile phones (Java apps in feature phones,) and some embedded applications. Some common examples include SIM cards, VOIP phones, Blu-ray Disc players, televisions, utility meters, healthcare gateways, industrial controls, and countless other devices.

Some experts point out that Java is still a viable option for IoT programming. Think of the industrial Internet as the merger of embedded software development and the enterprise. In that area, Java has a number of key advantages: first is skills – there are lots of Java developers out there, and that is an important factor when selecting technology. Second is maturity and stability – when you have devices which are going to be remotely managed and provisioned for a decade, Java’s stability and care about backwards compatibility become very important. Third is the scale of the Java ecosystem – thousands of companies already base their business on Java, ranging from Gemalto using JavaCard on their SIM cards to the largest of the enterprise software vendors.

Although in the past some differences existed between embedded Java and traditional PC based Java solutions, the only difference now is that embedded Java code in these embedded systems is mainly contained in constrained memory, such as flash memory. A complete convergence has taken place since 2010, and now Java software components running on large systems can run directly with no recompilation at all on design-to-cost mass-production devices (consumers, industrial, white goods, healthcare, metering, smart markets in general,…) Java for embedded devices (Java Embedded) is generally integrated by the device manufacturers. It is NOT available for download or installation by consumers. Originally Java was tightly controlled by Sun (now Oracle), but in 2007 Sun relicensed most of its Java technologies under the GNU General Public License. Others have also developed alternative implementations of these Sun technologies, such as the GNU Compiler for Java (bytecode compiler), GNU Classpath (standard libraries), and IcedTea-Web (browser plugin for applets).

My feelings with Java is that if your embedded systems platform supports Java and you know hot to code Java, then it could be a good tool. If your platform does not have ready Java support, adding it could be quite a bit of work.

 

Increasing trends

Databases

Embedded databases are coming more and more to the embedded devices. If you look under the hood of any connected embedded consumer or mobile device, in addition to the OS you will find a variety of middleware applications. One of the most important and most ubiquitous of these is the embedded database. An embedded database system is a database management system (DBMS) which is tightly integrated with an application software that requires access to stored data, such that the database system is “hidden” from the application’s end-user and requires little or no ongoing maintenance.

There are many possible databases. First choice is what kind of database you need. The main choices are SQL databases and simpler key-storage databases (also called NoSQL).

SQLite is the Database chosen by virtually all mobile operating systems. For example Android and iOS ship with SQLite. It is also built into for example Firefox web browser. It is also often used with PHP. So SQLite is probably a pretty safe bet if you need relational database for an embedded system that needs to support SQL commands and does not need to store huge amounts of data (no need to modify database with millions of lines of data).

If you do not need relational database and you need very high performance, you need probably to look somewhere else.Berkeley DB (BDB) is a software library intended to provide a high-performance embedded database for key/value data. Berkeley DB is written in Cwith API bindings for many languages. BDB stores arbitrary key/data pairs as byte arrays. There also many other key/value database systems.

RTA (Run Time Access) gives easy runtime access to your program’s internal structures, arrays, and linked-lists as tables in a database. When using RTA, your UI programs think they are talking to a PostgreSQL database (PostgreSQL bindings for C and PHP work, as does command line tool psql), but instead of normal database file you are actually accessing internals of your software.

Software quality

Building quality into embedded software doesn’t happen by accident. Quality must be built-in from the beginning. Software startup checklist gives quality a head start article is a checklist for embedded software developers to make sure they kick-off their embedded software implementation phase the right way, with quality in mind

Safety

Traditional methods for achieving safety properties mostly originate from hardware-dominated systems. Nowdays more and more functionality is built using software – including safety critical functions. Software-intensive embedded systems require new approaches for safety. Embedded Software Can Kill But Are We Designing Safely?

IEC, FDA, FAA, NHTSA, SAE, IEEE, MISRA, and other professional agencies and societies work to create safety standards for engineering design. But are we following them? A survey of embedded design practices leads to some disturbing inferences about safety.Barr Group’s recent annual Embedded Systems Safety & Security Survey indicate that we all need to be concerned: Only 67 percent are designing to relevant safety standards, while 22 percent stated that they are not—and 11 percent did not even know if they were designing to a standard or not.

If you were the user of a safety-critical embedded device and learned that the designers had not followed best practices and safety standards in the design of the device, how worried would you be? I know I would be anxious, and quite frankly. This is quite disturbing.

Security

The advent of low-cost wireless connectivity is altering many things in embedded development – it has added to your list of worries need to worry about communication issues like breaks connections, latency and security issues. Understanding security is one thing; applying that understanding in a complete and consistent fashion to meet security goals is quite another. Embedded development presents the challenge of coding in a language that’s inherently insecure; and quality assurance does little to ensure security.

Developing Secure Embedded Software white paper  explains why some commonly used approaches to security typically fail:

MISCONCEPTION 1: SECURITY BY OBSCURITY IS A VALID STRATEGY
MISCONCEPTION 2: SECURITY FEATURES EQUAL SECURE SOFTWARE
MISCONCEPTION 3: RELIABILITY AND SAFETY EQUAL SECURITY
MISCONCEPTION 4: DEFENSIVE PROGRAMMING GUARANTEES SECURITY

Many organizations are only now becoming aware of the need to incorporate security into their software development lifecycle.

Some techniques for building security to embedded systems:

Use secure communications protocols and use VPN to secure communications
The use of Public Key Infrastructure (PKI) for boot-time and code authentication
Establishing a “chain of trust”
Process separation to partition critical code and memory spaces
Leveraging safety-certified code
Hardware enforced system partitioning with a trusted execution environment
Plan the system so that it can be easily and safely upgraded when needed

Flood of new languages

Rather than living and breathing C/C++, the new generation prefers more high-level, abstract languages (like Java, Python, JavaScript etc.). So there is a huge push to use interpreted and scripting also in embedded systems. Increased hardware performance on embedded devices combined with embedded Linux has made the use of many scripting languages good tools for implementing different parts of embedded applications (for example web user interface). Nowadays it is common to find embedded hardware devices, based on Raspberry Pi for instance, that are accessible via a network, run Linux and come with Apache and PHP installed on the device.  There are also many other relevant languages

One workable solution, especially for embedded Linux systems is that part of the activities organized by totetuettu is a C program instead of scripting languages ​​(Scripting). This enables editing operation simply script files by editing without the need to turn the whole system software again.  Scripting languages ​​are also tools that can be implemented, for example, a Web user interface more easily than with C / C ++ language. An empirical study found scripting languages (such as Python) more productive than conventional languages (such as C and Java) for a programming problem involving string manipulation and search in a dictionary.

Scripting languages ​​have been around for a couple of decades Linux and Unix server world standard tools. the proliferation of embedded Linux and resources to merge systems (memory, processor power) growth has made them a very viable tool for many embedded systems – for example, industrial systems, telecommunications equipment, IoT gateway, etc . Some of the command language is suitable for up well even in quite small embedded environments.
I have used with embedded systems successfully mm. Bash, AWK, PHP, Python and Lua scripting languages. It works really well and is really easy to make custom code quickly .It doesn’t require a complicated IDE; all you really need is a terminal – but if you want there are many IDEs that can be used.
High-level, dynamically typed languages, such as Python, Ruby and JavaScript. They’re easy—and even fun—to use. They lend themselves to code that easily can be reused and maintained.

There are some thing that needs to be considered when using scripting languages. Sometimes lack of static checking vs a regular compiler can cause problems to be thrown at run-time. But it is better off practicing “strong testing” than relying on strong typing. Other ownsides of these languages is that they tend to execute more slowly than static languages like C/C++, but for very many aplications they are more than adequate. Once you know your way around dynamic languages, as well the frameworks built in them, you get a sense of what runs quickly and what doesn’t.

Bash and other shell scipting

Shell commands are the native language of any Linux system. With the thousands of commands available for the command line user, how can you remember them all? The answer is, you don’t. The real power of the computer is its ability to do the work for you – the power of the shell script is the way to easily to automate things by writing scripts. Shell scripts are collections of Linux command line commands that are stored in a file. The shell can read this file and act on the commands as if they were typed at the keyboard.In addition to that shell also provides a variety of useful programming features that you are familar on other programming langauge (if, for, regex, etc..). Your scripts can be truly powerful. Creating a script extremely straight forward: It can be created by opening a separate editor such or you can do it through a terminal editor such as VI (or preferably some else more user friendly terminal editor). Many things on modern Linux systems rely on using scripts (for example starting and stopping different Linux services at right way).

One of the most useful tools when developing from within a Linux environment is the use of shell scripting. Scripting can help aid in setting up environment variables, performing repetitive and complex tasks and ensuring that errors are kept to a minimum. Since scripts are ran from within the terminal, any command or function that can be performed manually from a terminal can also be automated!

The most common type of shell script is a bash script. Bash is a commonly used scripting language for shell scripts. In BASH scripts (shell scripts written in BASH) users can use more than just BASH to write the script. There are commands that allow users to embed other scripting languages into a BASH script.

There are also other shells. For example many small embedded systems use BusyBox. BusyBox providesis software that provides several stripped-down Unix tools in a single executable file (more than 300 common command). It runs in a variety of POSIX environments such as Linux, Android and FreeeBSD. BusyBox become the de facto standard core user space toolset for embedded Linux devices and Linux distribution installers.

Shell scripting is a very powerful tool that I used a lot in Linux systems, both embedded systems and servers.

Lua

Lua is a lightweight  cross-platform multi-paradigm programming language designed primarily for embedded systems and clients. Lua was originally designed in 1993 as a language for extending software applications to meet the increasing demand for customization at the time. It provided the basic facilities of most procedural programming languages. Lua is intended to be embedded into other applications, and provides a C API for this purpose.

Lua has found many uses in many fields. For example in video game development, Lua is widely used as a scripting language by game programmers. Wireshark network packet analyzer allows protocol dissectors and post-dissector taps to be written in Lua – this is a good way to analyze your custom protocols.

There are also many embedded applications. LuCI, the default web interface for OpenWrt, is written primarily in Lua. NodeMCU is an open source hardware platform, which can run Lua directly on the ESP8266 Wi-Fi SoC. I have tested NodeMcu and found it very nice system.

PHP

PHP is a server-side HTML embedded scripting language. It provides web developers with a full suite of tools for building dynamic websites but can also be used as a general-purpose programming language. Nowadays it is common to find embedded hardware devices, based on Raspberry Pi for instance, that are accessible via a network, run Linux and come with Apache and PHP installed on the device. So on such enviroment is a good idea to take advantage of those built-in features for the applications they are good – for building web user interface. PHP is often embedded into HTML code, or it can be used in combination with various web template systems, web content management system and web frameworks. PHP code is usually processed by a PHP interpreter implemented as a module in the web server or as a Common Gateway Interface (CGI) executable.

Python

Python is a widely used high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability. Python interpreters are available for installation on many operating systems, allowing Python code execution on a wide variety of systems. Many operating systems include Python as a standard component; the language ships for example with most Linux distributions.

Python is a multi-paradigm programming language: object-oriented programming and structured programming are fully supported, and there are a number of language features which support functional programming and aspect-oriented programming,  Many other paradigms are supported using extensions, including design by contract and logic programming.

Python is a remarkably powerful dynamic programming language that is used in a wide variety of application domains. Since 2003, Python has consistently ranked in the top ten most popular programming languages as measured by the TIOBE Programming Community Index. Large organizations that make use of Python include Google, Yahoo!, CERN, NASA. Python is used successfully in thousands of real world business applications around globally, including many large and mission-critical systems such as YouTube.com and Google.com.

Python was designed to be highly extensible. Libraries like NumPy, SciPy and Matplotlib allow the effective use of Python in scientific computing. Python is intended to be a highly readable language. Python can also be embedded in existing applications and hasbeen successfully embedded in a number of software products as a scripting language. Python can serve as a scripting language for web applications, e.g., via mod_wsgi for the Apache web server.

Python can be used in embedded, small or minimal hardware devices. Some modern embedded devices have enough memory and a fast enough CPU to run a typical Linux-based environment, for example, and running CPython on such devices is mostly a matter of compilation (or cross-compilation) and tuning. Various efforts have been made to make CPython more usable for embedded applications.

For more limited embedded devices, a re-engineered or adapted version of CPython, might be appropriateExamples of such implementations include the following: PyMite, Tiny Python, Viper. Sometimes the embedded environment is just too restrictive to support a Python virtual machine. In such cases, various Python tools can be employed for prototyping, with the eventual application or system code being generated and deployed on the device. Also MicroPython and tinypy have been ported Python to various small microcontrollers and architectures. Real world applications include Telit GSM/GPRS modules that allow writing the controlling application directly in a high-level open-sourced language: Python.

Python on embedded platforms? It is quick to develop apps, quick to debug – really easy to make custom code quickly. Sometimes lack of static checking vs a regular compiler can cause problems to be thrown at run-time. To avoid those try to have 100% test coverage. pychecker is a very useful too also which will catch quite a lot of common errors. The only downsides for embedded work is that sometimes python can be slow and sometimes it uses a lot of memory (relatively speaking). An empirical study found scripting languages (such as Python) more productive than conventional languages (such as C and Java) for a programming problem involving string manipulation and search in a dictionary. Memory consumption was often “better than Java and not much worse than C or C++”.

JavaScript and node.js

JavaScript is a very popular high-level language. Love it or hate it, JavaScript is a popular programming language for many, mainly because it’s so incredibly easy to learn. JavaScript’s reputation for providing users with beautiful, interactive websites isn’t where its usefulness ends. Nowadays, it’s also used to create mobile applications, cross-platform desktop software, and thanks to Node.js, it’s even capable of creating and running servers and databases!  There is huge community of developers. JavaScript is a high-level language.

Its event-driven architecture fits perfectly with how the world operates – we live in an event-driven world. This event-driven modality is also efficient when it comes to sensors.

Regardless of the obvious benefits, there is still, understandably, some debate as to whether JavaScript is really up to the task to replace traditional C/C++ software in Internet connected embedded systems.

It doesn’t require a complicated IDE; all you really need is a terminal.

JavaScript is a high-level language. While this usually means that it’s more human-readable and therefore more user-friendly, the downside is that this can also make it somewhat slower. Being slower definitely means that it may not be suitable for situations where timing and speed are critical.

JavaScript is already in embedded boards. You can run JavaScipt on Raspberry Pi and BeagleBone. There are also severa other popular JavaScript-enabled development boards to help get you started: The Espruino is a small microcontroller that runs JavaScript. The Tessel 2 is a development board that comes with integrated wi-fi, an ethernet port, two USB ports, and companion source library downloadable via the Node Package Manager. The Kinoma Create, dubbed the “JavaScript powered Internet of Things construction kit.”The best part is that, depending on the needs of your device, you can even compile your JavaScript code into C!

JavaScript for embedded systems is still in its infancy, but we suspect that some major advancements are on the horizon.We for example see a surprising amount of projects using Node.js.Node.js is an open-source, cross-platform runtime environment for developing server-side Web applications. Node.js has an event-driven architecture capable of asynchronous I/O that allows highly scalable servers without using threading, by using a simplified model of event-driven programming that uses callbacks to signal the completion of a task. The runtime environment interprets JavaScript using Google‘s V8 JavaScript engine.Node.js allows the creation of Web servers and networking tools using JavaScript and a collection of “modules” that handle various core functionality. Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world. Modern desktop IDEs provide editing and debugging features specifically for Node.js applications

JXcore is a fork of Node.js targeting mobile devices and IoTs. JXcore is a framework for developing applications for mobile and embedded devices using JavaScript and leveraging the Node ecosystem (110,000 modules and counting)!

Why is it worth exploring node.js development in an embedded environment? JavaScript is a widely known language that was designed to deal with user interaction in a browser.The reasons to use Node.js for hardware are simple: it’s standardized, event driven, and has very high productivity: it’s dynamically typed, which makes it faster to write — perfectly suited for getting a hardware prototype out the door. For building a complete end-to-end IoT system, JavaScript is very portable programming system. Typically an IoT projects require “things” to communicate with other “things” or applications. The huge number of modules available in Node.js makes it easier to generate interfaces – For example, the HTTP module allows you to create easily an HTTP server that can easily map the GET method specific URLs to your software function calls. If your embedded platform has ready made Node.js support available, you should definately consider using it.

Future trends

According to New approaches to dominate in embedded development article there will be several camps of embedded development in the future:

One camp will be the traditional embedded developer, working as always to craft designs for specific applications that require the fine tuning. These are most likely to be high-performance, low-volume systems or else fixed-function, high-volume systems where cost is everything.

Another camp might be the embedded developer who is creating a platform on which other developers will build applications. These platforms might be general-purpose designs like the Arduino, or specialty designs such as a virtual PLC system.

This third camp is likely to become huge: Traditional embedded development cannot produce new designs in the quantities and at the rate needed to deliver the 50 billion IoT devices predicted by 2020.

Transition will take time. The enviroment is different than computer and mobile world. There are too many application areas with too widely varying requirements for a one-size-fits-all platform to arise.

But the shift will happen as hardware becomes powerful and cheap enough that the inefficiencies of platform-based products become moot.

 

Sources

Most important information sources:

New approaches to dominate in embedded development

A New Approach for Distributed Computing in Embedded Systems

New Approaches to Systems Engineering and Embedded Software Development

Lua (programming language)

Embracing Java for the Internet of Things

Node.js

Wikipedia Node.js

Writing Shell Scripts

Embedded Linux – Shell Scripting 101

Embedded Linux – Shell Scripting 102

Embedding Other Languages in BASH Scripts

PHP Integration with Embedded Hardware Device Sensors – PHP Classes blog

PHP

Python (programming language)

JavaScript: The Perfect Language for the Internet of Things (IoT)

Node.js for Embedded Systems

Embedded Python

MicroPython – Embedded Pytho

Anyone using Python for embedded projects?

Telit Programming Python

JavaScript: The Perfect Language for the Internet of Things (IoT)

MICROCONTROLLERS AND NODE.JS, NATURALLY

Node.js for Embedded Systems

Why node.js?

Node.JS Appliances on Embedded Linux Devices

The smartest way to program smart things: Node.js

Embedded Software Can Kill But Are We Designing Safely?

DEVELOPING SECURE EMBEDDED SOFTWARE

 

 

 

1,667 Comments

  1. Tomi Engdahl says:

    Shellminator is a simple-to-use terminal interface library. You can use it with any VT-100 terminal emulator like PuTTY, Terraterm or minicom. With this library, you can create user-friendly command line interfaces for your embedded projects. Shellminator has command history support
    https://github.com/dani007200964/Shellminator

    Reply
  2. Tomi Engdahl says:

    MIT’s Exo Programming Language Designed for Hardware Accelerators
    MIT CSAIL researchers have developed a new programming language for writing high-performance code on hardware accelerators.
    https://www.hackster.io/news/mit-s-exo-programming-language-designed-for-hardware-accelerators-955b4b5435f9

    Reply
  3. Tomi Engdahl says:

    Exocompilation for productive programming of hardware accelerators
    https://dl.acm.org/doi/10.1145/3519939.3523446

    Reply
  4. Tomi Engdahl says:

    Belay Aims to Make PC-Based Python Hardware-Software Interfaces Quick and Easy via MicroPython
    https://www.hackster.io/news/belay-aims-to-make-pc-based-python-hardware-software-interfaces-quick-and-easy-via-micropython-be5579ce8c61

    Talking to any MicroPython board via serial, Belay lets you integrate hardware interaction into your Python programs in a minimum of code.

    Related
    https://www.hackster.io/news/picosoft-turns-the-raspberry-pi-pico-into-an-interactive-micropython-computer-the-orange-python-fbb6757a6196

    Reply
  5. Tomi Engdahl says:

    Arduino Looks to Add True Multitasking as It Canvases the Technical Community for Input on an API
    https://www.hackster.io/news/arduino-looks-to-add-true-multitasking-as-it-canvases-the-technical-community-for-input-on-an-api-c909a5ce91bc

    Arduino’s upcoming multitasking feature is designed to abstract the complexities of threads and messaging away from the user.

    The Arduino platform looks set to gain another string in its bow, as its development team seeks feedback on adding a major new feature: fully-functional multitasking, accessible to the user without having to worry about threads or semaphores, allowing a sketch to execute multiple tasks at the same time without fear of blocking or power wastage.

    “With the increased capabilities of Arduino and other microcontroller boards, including faster clocks or even multiple cores, the need to handle multiple tasks simultaneously arises more often than in the past,” explains Arduino’s Alessandro Ranellucci. “For instance, you often want to control motors, update a display and detect user interactions at the same time, or perform tasks that have different timing or wait for external events.”

    Reply
  6. Tomi Engdahl says:

    Using Popular Platforms in Industrial Settings
    June 28, 2022
    This article examines the rise of platforms like Raspberry Pi and Arduino in industrial solutions, including COM and SOM versions.
    https://www.electronicdesign.com/industrial-automation/article/21245354/electronic-design-using-popular-platforms-in-industrial-settings

    What you’ll learn

    Why developers are using hobbyist platforms in products.
    What industrial solutions are available?
    Problems that can arise when moving to an industrial solution.

    If you’ve looked at a development kit lately, it may be compatible with one of the popular hobbyist/maker platforms like Raspberry Pi or Arduino (Fig. 1). It’s not surprising given the ecosystems that have grown up around these popular platforms. This is partially due to the software infrastructure and available tools and applications, but it really comes down to the hardware compatibility.

    Reply
  7. Tomi Engdahl says:

    The Importance of Design Collaboration in Electronics Today
    Aug. 4, 2022
    The ability to understand and integrate every core technology and methodology in an advanced system is beyond most individuals, so collaboration is becoming more and more important in electronic design.
    https://www.electronicdesign.com/technologies/eda/video/21247918/electronic-design-the-importance-of-design-collaboration-in-electronics-today?utm_source=EG+ED+Analog+%26+Power+Source&utm_medium=email&utm_campaign=CPS220804094&o_eid=7211D2691390C9R&rdx.identpull=omeda|7211D2691390C9R&oly_enc_id=7211D2691390C9R

    It’s more important than ever today to have the latest solutions to address every aspect of your application. However, the ability to understand and integrate every core technology and methodology is beyond most individuals, so collaboration is becoming increasingly important in electronic design. We talk to Frank Schirrmeister, a Product Manager at Cadence, about collaboration and other aspects of the electronic design marketplace.

    Reply
  8. Tomi Engdahl says:

    How to Select the Right RTOS and Microcontroller Platform for the IoT
    https://www.digikey.com/en/articles/how-to-select-the-right-rtos-and-microcontroller-platform-for-the-iot?dclid=CKGWo_-Lt_kCFf9HHgIdONQKkQ

    Developing an Internet of Things (IoT) device can be more challenging than many developers or companies realize. The very act of connecting an embedded system to the cloud dramatically increases the timing complexity for the system. An increase in timing complexity means that developers need a better way to manage how their software will decide what code should be running when. The best way to avoid writing custom schedulers or dealing with the timing at the bare metal level is to instead use a real-time operating system (RTOS) to help us manage the timing complexities.

    One challenge with using an RTOS today is that many developers are coming from a bare metal environment without an operating system (OS), and selecting the right RTOS for a given application can be challenging. A quick survey of the RTOS market online would find that there are over 100 RTOSs available that developers can use that vary from open source to certified commercial RTOSs. So how does one go about selecting an RTOS and get started?

    Reply
  9. Tomi Engdahl says:

    ORBTRACE EFFORT: OPEN TOOL FOR PROFESSIONAL DEBUGGING
    https://hackaday.com/2022/07/26/orbtrace-effort-open-tool-for-professional-debugging/

    There are some fairly powerful debugging facilities available on today’s microcontrollers — if your code crashes mysteriously, chances are, there’s a debugging interface that could let you track down the exact crash circumstances in no time. Sadly, debugging tools for these powerful interfaces tend to be prohibitively expensive and highly proprietary, thus, not friendly for hobbyists. Now, there’s a community-driven high-capability debugging platform called ORBTrace, brought to us by [mubes] and [zyp].

    https://orbcode.org/orbtrace-mini/

    Reply
  10. Tomi Engdahl says:

    Your MicroPython Board Can Be Your Tinkering Peripheral
    https://hackaday.com/2022/08/10/your-micropython-board-can-be-your-tinkering-peripheral/

    [Brian Pugh] has shared a cool new project that simultaneously runs on desktop Python and MicroPython – the Belay library. This library lets you control a MicroPython device seamlessly from your Python code – interacting with real-world things like analog/digital trinkets, servos, Neopixels and displays, without having to create your own firmware or APIs.

    https://github.com/BrianPugh/belay

    Reply
  11. Tomi Engdahl says:

    How to Perform Firmware Updates Without Halting Firmware Execution
    https://www.digikey.com/en/articles/how-to-perform-firmware-updates-without-halting-firmware-execution?dclid=CKH-jMjQwPkCFU9JwgodB10Mrg

    Internet of Things (IoT) sensor-based applications are expanding, and so too is the size and complexity of the microcontroller firmware in the IoT endpoint. This firmware must become more efficient to speed execution, which is one reason flash firmware updates in the field are a necessity. However, securely updating firmware in the field usually requires halting execution of firmware while the update is in progress. Depending on the architecture, the size of the update, and network speed, this can be accomplished in as quickly as a minute or as long as an hour. For critical applications this delay can be unacceptable.

    This article explains the considerations for updating interrupt-driven firmware in the field and the need to keep executing application firmware while the update is in process. It then introduces the PIC32MZ2048EFH144T-I/PH microcontroller from Microchip Technology and shows how it can be used to execute firmware while simultaneously receiving updated firmware over a network.

    Reply
  12. Tomi Engdahl says:

    Run Machine Learning Code in an Embedded IoT Node to Easily Identify Objects
    https://www.digikey.com/en/articles/run-machine-learning-code-in-an-embedded-iot-node?dclid=CLyEmcbQwPkCFQbTGQodgJwPDw

    To run TensorFlow Lite for Microcontrollers, Microchip Technology is targeting machine learning in microcontrollers with the Arm® Cortex®-M4F-based ATSAMD51J19A-AFT microcontroller (Figure 1). It has 512 Kbytes of flash memory with 192 Kbytes of SRAM memory and runs at 120 megahertz (MHz). The ATSAMD51J19A-AFT is part of the Microchip Technology ATSAMD51 ML microcontroller family. It is compliant with automotive AEC-Q100 Grade 1 quality standards and operates over -40°C to +125°C, making it applicable for the harshest IoT and IIoT environments. It is a low-voltage microcontroller and operates from 1.71 to 3.63 volts when running at 120 MHz.

    Reply
  13. Tomi Engdahl says:

    Physical Computing Types See GitHub a Little Differently
    https://thenewstack.io/physical-computing-types-see-github-a-little-differently/

    Software people generally envision GitHub as an easy-to-access storage facility for holding source code. You can push your files up to the cloud, manage your versions, share projects and collaborate with others.

    It’s not entirely obvious, to the casual observer, that there are all kinds of projects on GitHub. Not surprisingly a great many, lean toward the software side.

    GitHub isn’t just for the pure software nerds. We hybrid software/hardware physical computing geeks, gadgeteers, engineers and inventors have a place there too.

    If you poke around a bit, physical computing, hardware developers, Maker Movement, and DIYer types will find thousands and thousands of GitHub repositories catering to 3D printing, the ESP32 microcontroller, the Arduino community, the Raspberry Pi and many other “physical” topics as well. You’ll even run across actionable projects on exotic things like “computational fluid dynamics” or “software defined radio.”

    Reply
  14. Tomi Engdahl says:

    Visuino
    Graphical Development Environment for Arduino controller type boards
    https://hackaday.io/project/21388-visuino

    Arduino and Arduino compatible controller boards have become a favorite way to control automate and animate many Maker’s projects.
    Connecting sensors, actuators, and displays to Arduinos is easy and fun. Programming the boards however has proven challenging for many Makers. The Arduino IDE is simple, and easy to use, however it offers very little aside from basic code editing functionality. Programming the Arduinos for anything more complex than blinking LED or reading a sensor, requires fair programming knowledge and has proven obstacle to many Makers, preventing them from making their dream projects.
    It has become a common practice for Makers to look around for ready project, and if they find one copy and paste the code, if not simply give up. Coding has proven an obstacle to the world of creativity.
    To solve this, Visuino It is designed in such a way that it allows anyone without any programming experience or knowledge to intuitively visually program Arduinos.

    Viduino is designed around the concept of software components. Each component represents ready to use functionality. Some of the components represent and are designed to control real hardware such as Sensor, Motor or Servo, others are representing pure software functionality such as signal generator, filter, mathematical function, or communication protocol.

    The components have connection points called “Pins”, and the Pins can be connected with “Wires” sending data between the components. Each component can have one or more pins capable of sending and receiving different data types.

    Visuino also includes components for sending multiple data channels through the Serial Port, and the Visuino IDE has Scope and Visual Instruments that can display the multichannel data, allowing the Maker to monitor and display simultaneously multiple sensors or data points from the project.

    In the spirit of Open Source development, all Arduino libraries for Visuino has been made Open Source and are available on Bitbucket:

    https://bitbucket.org/mitov/visuino-libraries

    and Sourceforge:

    Reply
  15. Tomi Engdahl says:

    4 gigatavun FAT-rajoitus murrettiin
    https://etn.fi/index.php/13-news/13930-4-gigatavun-fat-rajoitus-murrettiin

    FAT eli File Allocation Table on tiedostojärjestelmä, jonka Microsoft kehitti vuonna 1977 Microsoft Disk BASICia varten. Nyt saksalainen sulautettujen suunnittelujen työkaluja kehittävä SEGGER on julkistanut BigFAT-spesifikaation, jonka avulla kuka tahansa voi tallentaa yli 4 gigatavun tiedostoja tavalliselle FAT-medialle.

    Spesifikaatiota eivät rajoita mitkään patentit, ja sitä voidaan käyttää vapaasti tukityökalujen kanssa. Kaikkien käyttöjärjestelmien tukema FAT on alan standardi irrotettavan tallennustilan, kuten SD-korttien ja USB-muistitikkujen, alustamiseen.

    Tekninen yksinkertaisuus ja yleinen tuki tekevät siitä houkuttelevan jopa sovelluksille, jotka toimivat resurssirajoitteisissa laitteissa, kuten keskikokoisissa mikro-ohjaimissa. Se on myös loistava valinta tiedostojen siirtämiseen järjestelmien välillä.

    FATin suurin puute on rajallinen tiedostokoko, joka tulee esiin videotiedostoja tallennettaessa, siirrettäessä tai tietokantoja käytettäessä. SEGGER korjaa tämän puutteen BigFATilla laajentamalla FAT-tiedostojärjestelmää tukemalla huomattavasti yli 1 teratavun kokoisia tiedostoja. BigFAT hajottaa suuret tiedostot pieniksi osiin, joista jokainen mahtuu mukavasti FAT-taltioon yksittäisenä tiedostona, ja esittää nämä tiedostot yhtenä massiivisena tiedostona käyttäjälle säilyttäen samalla täyden yhteensopivuuden tavallisen FAT:n kanssa.

    SEGGER tarjoaa ilmaisen työkalun nimeltä BigFAT Converter, joka toimii Linuxissa, macOS:ssä ja Windowsissa. Sen avulla käyttäjät voivat luoda, lukea tai kopioida BigFAT-tiedostoja isäntätiedostojärjestelmään ja sieltä pois.

    Reply
  16. Tomi Engdahl says:

    How Tesla does Agile Hardware Development
    We Are Movement was happy to welcome Joe Justice (US), a long time Agile expert and former lead of Agile at Tesla to the Gothenburg We Are Movement Meetup.
    https://wearemovement.se/video-2/2022/how_tesla_does_agile_hardware_development/

    Reply
  17. Tomi Engdahl says:

    Sean “xobs” Cross’ Farpatch Offers Wireless Debug, Serial, and OTA Updates for Your Microcontrollers
    https://www.hackster.io/news/sean-xobs-cross-farpatch-offers-wireless-debug-serial-and-ota-updates-for-your-microcontrollers-635b252f6064

    Designed for Arm Cortex-M and Cortex-A boards, this compact add-on is designed to make debugging as painless — and wireless — as possible.

    Reply
  18. Tomi Engdahl says:

    ML-Based Framework For Automatically Generating Hardware Trojan Benchmarks
    https://semiengineering.com/ml-based-framework-for-automatically-generating-hardware-trojan-benchmarks/

    A new technical paper titled “Automatic Hardware Trojan Insertion using Machine Learning” was published by researchers at University of Florida and Stanford University.

    Reply
  19. Tomi Engdahl says:

    Tietoturvallisessa elektroniikassa tärkein asia on tarkastella elektroniikkaa osana suurempaa järjestelmää, eikä erillisenä osana. Tietoturvallisen elektroniikan valmistus tapahtuu suunnitellusti, testatusti sekä dokumentoidusti.

    Tietoturvallisemman elektroniikan suunnittelu on yhdistelmä perusasioista. Katso mitä nämä asiat ovat: https://www.techat.fi/tietoturvallinen-elektroniikka-osa-2/

    Reply
  20. Tomi Engdahl says:

    Noted embedded developer Sean “xobs” Cross is preparing to launch a tool designed to make debugging your Arm Cortex-M and Cortex-A projects considerably easier and more convenient: Farpatch, a wireless debugger accessed via Wi-Fi.

    https://www.hackster.io/news/sean-xobs-cross-farpatch-offers-wireless-debug-serial-and-ota-updates-for-your-microcontrollers-635b252f6064

    Reply
  21. Tomi Engdahl says:

    With the new Cloud CLI, the Arduino IoT Cloud has a full suite of tools available for every kind of user.

    Mass scale with the new Arduino Cloud CLI
    https://blog.arduino.cc/2022/09/06/mass-scale-with-the-new-arduino-cloud-cli/

    The Arduino IoT Cloud enables makers, IoT enthusiasts, and professionals to build easily connected projects based on a wide range of Arduino, ESP32, and ESP8266 boards.

    Following Arduino’s vision, it has been carefully designed to provide the most user-friendly and intuitive experience, abstracting the complex tasks that create barriers for users who are not familiar with coding.

    The intuitive and user-friendly web interface is a major factor of Arduino IoT Cloud’s popularity. It simply makes it easy to get started for a great variety of users, from the ones with no prior coding experience to those who are expert Arduino users.

    Introducing a new alternative IoT Cloud experience
    Alternatively, it is possible to interact with the Cloud via the API. This method is mainly used for integration with other platforms, applications or web pages.

    The interaction with the cloud is now complemented with a new Cloud CLI that provides a tool to execute scripted operations on Arduino Cloud, and satisfy use cases like massive device

    Reply
  22. Tomi Engdahl says:

    Git Intro For Hardware Hackers
    https://hackaday.com/2022/09/12/git-intro-for-hardware-hackers/

    Git is a wonderful tool that can multiply your project’s impact, or make your project easier to manage by an order of magnitude. Some of us hackers don’t yet know how to use command-line Git, but a relatable example of why a certain tool would be useful might be a good start. Today, I’d like to give you a Git crash course – showing you why and how to put a KiCad PCB into a Git repository, later to be shared with the world.

    KiCad works wonderfully with Git. The schematic and PCB files of KiCad are human-readable, especially when compared to other PCB file formats. KiCad creates different files for different purposes, each of them with a well-defined role, and you can make sense of every file in your project folder. What’s more, you can even modify KiCad files in a text editor! This is exactly the kind of use case that Git fits like a glove.

    Reply
  23. Tomi Engdahl says:

    QEMU/KVM for absolute beginners
    https://www.youtube.com/watch?v=BgZHbCDFODk

    On this episode of Veronica Explains, I explain the absolute basics of hypervisors generally, KVM specifically, and virt-manager graphically.

    Reply
  24. Tomi Engdahl says:

    Debugging: Skill, persistence, luck, and discipline
    https://www.planetanalog.com/debugging-skill-persistence-luck-and-discipline/?utm_source=newsletter&utm_campaign=link&utm_medium=EDNConsumerElectronics-20220914&oly_enc_id=2359J2998023G8W

    A few weeks ago, my smartphone refused to pick up emails, although access was fine on my desktop and laptop PCs (No need to bore you with the details, as I am sure you have your own similar stories). It’s especially frustrating and scary to fix this class of problems since access and visibility in the system (the phone and email provider) are extremely limited with only a tiny “keyhole” through which you can see and debug. It’s like building a ship in a bottle, except the bottle is painted black and the only point of view or access is via the bottle opening (Figure 1).

    Even more scary, unlike most analog-circuit debugging, I knew it was all-too-easy to do something which not only makes things worse but is possibly irreversible, resulting in loss of all email access (don’t ask how I know this risk).

    Fortunately, after several hours of trying “this and that” I did get the smartphone email to work again. Then I realized that due to the pressure and frustration of my efforts, I had totally neglected to document what didn’t work and what eventually did.

    The entire situation reminded me of all the engineering skills that we develop and master, where debugging and troubleshooting are often the most difficult and challenging. It takes a combination of practice, experience, mistakes, self-discipline, persistence, calmness, clarity, out-of-the box-thinking, attention to details, a mentor, and lucky breaks. Even if it is taught in school (usually not) or learned on the first real job, debugging is largely a formal way of approaching and working through a challenge. Yet that is hard to do when you are dealing with management and schedule pressure.

    Reply
  25. Tomi Engdahl says:

    Tekoäly löytää bugit 10 kertaa nopeammin
    https://etn.fi/index.php/13-news/14010-tekoaely-loeytaeae-bugit-10-kertaa-nopeammin

    EDA-talo Cadence Design Systems on esitellyt uuden suunnittelualustan, jota yhtiö kutsuu rohkeasti nimellä EDA 2.0. Kyse on Verisium-alustasta, joka tuo koneoppimismallit ja tekoälyn suunnittelujen verifiointiin. Verisiumin avulla bugit löytyvät 10 kertaa aiempaa nopeammin.

    EDA 1.0 tarkoitti käytännössä, että eri työkaluista pyrittiin tekemään mahdollisimman nopeita. Työkaluista tuli säännöllisesti uusia, entistä parempia versioita. Iso puute suunnittelussa on ollut se, ettei työkaluille tulevaa ja niistä lähtevää dataa analysoida mitenkään laaja-alaisesti.

    Tämän puutteen EDA 2.0 korjaa. Se tarkoittaa tekoälypohjaista suunnittelua ja verifiointia. Tämä edellyttää, että data on kaikkien työkalujen ja koko alusta käytössä. Cadencella datamalli on nimeltään JetAI. JedAI ei ole avoin standardi, mutta siihen ollaan tuomassa avointa rajapintaa, joten tulevaisuudessa ei ole pakko käyttää Cadencen työkaluja

    Reply
  26. Tomi Engdahl says:

    Unobtainium
    https://hackaday.io/project/187337-unobtainium

    Saving the world isn’t easy. Yet maybe the solution is simple: Just plant a seed. Or write some code – one day, or line … at a time.

    This project continues several others that seek to provide better software tools for creating bespoke applications that run on the Parallax Propeller P2, Arduino hardware, or other microcontrollers. Applications in the works include a comprehensive DSP toolchain for creating spectrum/logic analyzers, oscilloscopes, performing music transcription, etc. As of now. a port of the UCSD Pascal compiler to build under Visual Studio C++ has reached “hello world” status

    Details

    Even as I draw that much closer to finally having a working PASCAL compiler for the Parallax P2/Arduino/TTL-NOR machine, etc., one of the things that I would like to point out is the fact that I am also interested in the prospect of free-form natural language software development. Thus, a random narrative might turn out to be useful for developing so-called genetic algorithms.

    In the project that preceded this one, i.e., Prometheus, we finally reached Hello World status with the C++ port of the USCD Pascal compiler. So even though there are LOTS of bugs, something that looks like p-code is starting to take shape.

    Reply
  27. Tomi Engdahl says:

    Navigate Supply-Chain Issues with Virtualization and Remote Monitoring
    Sept. 21, 2022
    Supply-chain hiccups in modern times are a bane to embedded software engineers as they develop new products. This article looks at how one product can mitigate the effect of these hiccups and help ensure that engineers deliver thoroughly tested products.
    Mohammed Billoo
    https://www.electronicdesign.com/technologies/embedded-revolution/article/21251053/navigate-supplychain-issues-with-virtualization-and-remote-monitoring

    Reply
  28. Tomi Engdahl says:

    Javasta tuli uusi versio – miljoonat koodaajat ajavat vanhoilla
    https://etn.fi/index.php/13-news/14028-javasta-tuli-uusi-versio-miljoonat-koodaajat-ajavat-vanhoilla
    Javasta tuli uusi versio – miljoonat koodaajat ajavat vanhoilla
    Julkaistu: 21.09.2022
    Oracle on esitellyt uuden version Javasta. Java 19 JDK sisältää seitsemän JDK-parannusehdotusta kehittäjien tuottavuuden lisäämiseksi, kielen parantamiseksi ja alustan suorituskyvyn, vakauden ja turvallisuuden parantamiseksi. Useimmat java-koodaajat käyttävät kuitenkin aiempia versioita.
    Java on yksi suosituimpia ohjelmointikieliä. Erilaisissa vertailuissa se sijoittaa aina kärkipäähän. Oracle puhuu ”suosituimmasta teknologiatrendien kielestä”, joka ei tarkoita oikein mitään. Mutta se tiedetään, että maailmalla on 60 miljardia javavirtuaalikonetta.
    Edellisen kerran java-koodaajien käyttämiä versioita tutkittiin alkuvuodesta, Tuolloin kävi ilmi, että suosituin java-versio on Java 11, joka julkistettiin syyskuussa 2018. Sitä käytti 48 prosenttia kehittäjistä. Maaliskuussa 2014 esiteltyyn Java 8:een luotti 46 prosenttia.
    On uusien versioiden käyttöönotto sitten hidasta tai ei, uusia ominaisuuksia Oracle toi tälläkin kertaa.
    JEP 424 tunnetaan taasen projektinimelä Panama ja siinä kehitetään tekniikkaa, jolla Java-ohjelmat kommunikoivat virtuaalikoneiden ulkopuolelle natiivikirjastoilla ja -datalla. JEP 422 yrittää saada javavirtuaalikoneita toimimaan RISC-V-pohjaisilla laitteilla.
    Oracle toimittaa uusia Java Feature -julkaisuja kuuden kuukauden välein ennakoitavan julkaisuaikataulun mukaisesti. Tämä poljinnopeus tarjoaa tasaisen virran innovaatioita samalla kun se parantaa jatkuvasti alustan suorituskykyä, vakautta ja turvallisuutta, mikä auttaa lisäämään Javan leviämistä kaikenkokoisissa organisaatioissa ja toimialoilla.

    Reply
  29. Tomi Engdahl says:

    Trojans Can Lurk Inside AVR Bootloaders
    https://hackaday.com/2022/09/21/trojans-can-lurk-inside-avr-bootloaders/

    If there’s one thing we’ve learned over the years, it’s that if it’s got a silicon chip inside, it could be carrying a virus. Research by one group focused on hiding a trojan inside an AVR Arduino bootloader, proving even our little hobbyist microcontrollers aren’t safe.

    The specific aim of the research was to hide a trojan inside the bootloader of an AVR chip itself. This would allow the trojan to remain present on something like a 3D printer even if the main firmware itself was reinstalled. The trojan would still be able to have an effect on the printer’s performance from its dastardly hiding place, but would be more difficult to notice and remove.

    FLAW3D: Hiding a Trojan in an AVR Arduino Bootloader
    Code injection and memory editing!
    https://01001000.xyz/2021-04-21-Hiding-a-Trojan-in-an-AVR-Arduino-Bootloader/

    Here, we enter the world of AVR and Arduino bootloaders, and we found that yes, we could hide a Trojan that could impact upon the behaviour of the 3D printer. We even designed two different Trojans and characterized their performance on two different (anonymized) printers. You can read our complete findings

    FLAW3D: A Trojan-based Cyber Attack on the Physical Outcomes of Additive Manufacturing
    https://arxiv.org/abs/2104.09562

    https://github.com/kiwih/328p-flaw3d-bootloader

    Reply
  30. Tomi Engdahl says:

    https://etn.fi/index.php/13-news/14042-turvasertifiointi-valmiina-fpga-piireille

    Jos järjestelmää käytetään erittäin luotettavissa kaupallisissa ilmailu-, avaruus-, puolustus-, auto- ja teollisuussovelluksissa, niiltä edellytetään toiminnallisen turvallisuuden IEC 61508 Safety Integrity Level (SIL) 3 -sertifiointia. Mircochip tarjoaa nyt tämän seritfioinnin valmiina pakettina kahdelle FPGA-piiriperheelleen.

    Microchip on tarjonnut sertifiointia palveluna aiemminkin. Nyt sama mahdollisuus on lisätty yhtiön SmartFusion 2 SoC FPGA- ja IGLOO 2 FPGA -piireille. Niitä käytetään teollisuudessa esimerkiksi älyverkoissa, automaatio-ohjaimissa, prosessianalysaattoreissa ja muissa turvallisuuden kannalta kriittisissä sovelluksissa.

    Reply
  31. Tomi Engdahl says:

    The State Of The SBC Interface Ecosystem, Is It Time To Design A Standard?
    https://hackaday.com/2022/10/05/the-state-of-the-sbc-interface-ecosystem-is-it-time-to-design-a-standard/

    We are spoiled for choice when it comes to single board computers, whether they be based around a microcontroller or a more capable SoC capable of running an operating system such as GNU/Linux. They can be had from well-established brands such as Arduino, Adafruit, or Raspberry Pi, or from a Wild West of cheaper Far Eastern modules carrying a plethora of different architectures.

    Everyone has their own favourite among them, and along with that comes an ecosystem of operating systems and software development environments. There’s another aspect to these boards which has evolved; certain among them have become de facto interface connector standards for hardware peripherals. Do these standards make any sense? Let’s talk about that.

    If we were asked to name some boards whose interfaces have become unintended de facto standards, those we’d end up with wouldn’t surprise most of you. The original Arduino, the Raspberry PI, the Adafruit Feather and maybe the Raspberry Pi Pico, perhaps the BeagleBone, and one we’re seeing more and more, the BBC micro:bit. It’s worth taking a look at these individually for a minute to work out what we like about them, and what we don’t.

    We like the Arduino expansion pinout for its organisation of the different types of interface next to each other and in numerical order and we like its use of inexpensive 0.1″ pin headers, but the size of the thing and the need for two sets of headers so far apart looks distinctly unwieldy and old-fashioned. Don’t get us started on the odd row offset.

    The Raspberry Pi 40-pin header and HAT form factor seems to have become a de facto standard for more powerful boards, typically those that run Linux.

    the lines were brought out to a header at all was the most important, and not arranging them nicely for a mass market board that would dominate the sector a decade later. Thus the original 26-pin interface and the 40-pin extension that followed have the various interfaces scattered haphazardly around them, and we’re certain that were they to do the same job today they would bring some order to it.

    The dual-in-line boards such as the Feather, the Pi Pico, and the various smaller Arduinos, have a very convenient approach to expansion, following the same path as the larger DIP ICs of the past. Thus an Arduino Nano will often be found mounted on a piece of stripboard or a PCB, or plugged into a breadboard. The Feather and the Pico take this further, with both sorting add-on boards that piggy-back upon them. We like them for their well-thought-out pinouts, but we think a single connector gives more flexibility.

    Finally in our list of boards is one that takes a completely different tack. The BBC micro:bit is an educational microcontroller board originally designed for British schools, and its expansion connector is a PCB edge connector with five large pads for crocodile clips and 4 mm plugs to make life easy for kids, interspersed with finer pitch connections carrying other interfaces.

    It Could All Be So Much Better

    So having surveyed the field, we have a range of what are essentially proprietary standards which have been adopted by others. None of them are the perfect solution to SBC interfacing, so our next question is: what would be the qualities we’d look for in something better? It’s a conversation we think the industry should be addressing, but how do we think they should address it?

    Perhaps the best place to start is with the connector itself. Here the Raspberry Pi gets it right with standard two-row headers, they’re cheap and readily available without forcing a board form factor as the Arduino or DIP format boards do or requiring a special connector as the micro:bit ecosystem does. Then the next area to consider is the pinout. There is no reason that digital GPIO, analogue lines, and interfaces such as SPI or I2C can not be arranged on sequentially numbered pins for easy interfacing.

    We also don’t think there’s a particular commercial advantage to manufacturers in having their own proprietary pinout, because in this context there’s little value in exclusivity. A common pinout across multiple boards shouldn’t take a multi-million-dollar industry consortium as it does with USB, instead a simple set of I/O lines have to be wired to a set of headers.

    The reason it hasn’t happened yet is probably that there’s been no immediate sales incentive for them to do so, but we think there’s an angle there which might prove persuasive. Hardware manufacturers should imagine a world in which aside from all SBCs having the same interface, all expansion cards, shields, HATs, or wings, have it too. Suddenly the potential market for a card becomes much more lucrative, and since all the major SBC makers also sell cards we hope that they too can see the potential.

    Reply
  32. Tomi Engdahl says:

    The Cryptography Handbook
    May 3, 2021
    This series, which is designed to be a quick study guide for product development engineers, takes an engineering rather than theoretical approach.
    https://www.electronicdesign.com/technologies/embedded-revolution/whitepaper/21127823/maxim-integrated-the-cryptography-handbook

    Designed to be a study guide for a product development engineer, this series takes an engineering rather than theoretical approach. We hope to give the busy engineer a quick understanding of the basic concepts of cryptography and a relatively fast way to integrate security in his/her design.

    Cryptography: Why Do We Need It? (PDF download)
    Cryptographic Fundamentals (PDF download)
    Cryptographic Algorithms (PDF download)
    The Physically Unclonable Function Delivers Advanced Protection (PDF Download)
    Cryptographic Implementations: Hardware vs. Software
    Time to Think About the How and Where of Cryptography
    Easy Cryptography with Secure Authenticators and Coprocessors

    Reply
  33. Tomi Engdahl says:

    Bespoke Silicon Rattles Chip Design Ecosystem
    https://semiengineering.com/bespoke-silicon-rattles-chip-design-ecosystem/

    From specific design team skills, to organizational and economic impacts, the move to bespoke silicon is shaking things up

    Bespoke silicon developers are shaking up relationships, priorities, and methodologies across the semiconductor industry, creating demand for skills that cross traditional boundaries, and driving new business models that leverage these enormous investments.

    Bespoke silicon designers today are a rare breed, capable of understanding the unique requirements of a specific domain, as well as a growing array of issues that can crop up in multiple stages of the design flow. At the most basic level, they need to understand what works best in hardware, what works best in software, and how to tightly integrate both to optimize performance and power.

    “The software architect or the system architect needs to know what it takes to do silicon,”

    Reply
  34. Tomi Engdahl says:

    Google Unveils KataOS ‘Verifiably-Secure’ Operating System for Embedded Devices
    https://www.securityweek.com/google-unveils-kataos-verifiably-secure-operating-system-embedded-devices

    Google last week unveiled a new project focused on building a secure embedded platform for machine learning (ML) applications.

    The project’s goal is designing intelligent ambient ML systems that are secure and trustworthy.

    The project is named Sparrow and it revolves around a new operating system named KataOS, for which several components have already been open sourced by Google.

    “KataOS provides a verifiably-secure platform that protects the user’s privacy because it is logically impossible for applications to breach the kernel’s hardware security protections and the system components are verifiably secure,” Google explained.

    The tech giant pointed out that KataOS is mostly developed in Rust, which makes it more secure because it eliminates buffer overflows and other classes of bugs.

    Sparrow is the reference implementation for KataOS. It combines the new operating system, which provides a logically-secure kernel, with a secured hardware platform that provides a logically-secure root of trust leveraging the OpenTitan project on a RISC-V architecture.

    “The KataOS components are based on an augmented version of seL4′s CAmkES framework. Critical system services are CAmkES components that are statically configured. Applications are developed using an AmbiML-focused SDK and dynamically loaded by the system services,” KataOS developers explained.

    Google says its goal is to open source the entire Sparrow project

    Announcing KataOS and Sparrow
    https://opensource.googleblog.com/2022/10/announcing-kataos-and-sparrow.html

    To begin collaborating with others, we’ve open sourced several components for our secure operating system, called KataOS, on GitHub, as well as partnered with Antmicro on their Renode simulator and related frameworks. As the foundation for this new operating system, we chose seL4 as the microkernel because it puts security front and center; it is mathematically proven secure, with guaranteed confidentiality, integrity, and availability. Through the seL4 CAmkES framework, we’re also able to provide statically-defined and analyzable system components. KataOS provides a verifiably-secure platform that protects the user’s privacy because it is logically impossible for applications to breach the kernel’s hardware security protections and the system components are verifiably secure. KataOS is also implemented almost entirely in Rust, which provides a strong starting point for software security, since it eliminates entire classes of bugs, such as off-by-one errors and buffer overflows.

    The current GitHub release includes most of the KataOS core pieces, including the frameworks we use for Rust (such as the sel4-sys crate, which provides seL4 syscall APIs), an alternate rootserver written in Rust (needed for dynamic system-wide memory management), and the kernel modifications to seL4 that can reclaim the memory used by the rootserver. And we’ve collaborated with Antmicro to enable GDB debugging and simulation for our target hardware with Renode.

    Reply
  35. Tomi Engdahl says:

    What made USB so popular in embedded systems market?
    https://accesio.com/what-made-usb-so-popular-in-embedded-systems-market/

    How it was done back in the old days?

    Back in the 1980s and early 1990s, connecting devices was much more troublesome than it is now. Peripherals utilized a variety of interfacing methods, required manual installation of drivers and different cables and the control unit had to have the hardware or an expansion card prepared specifically for them. For example, set up of a device tree for IBM Personal Computer required a dedicated keyboard that would use a 5 pin DIN socket which was the only connection with a direct access to the motherboard. For all other peripherals, there were expansion cards that you had to plug into the special ISA slots on the motherboard: video card for a monitor, game control adapter for a joystick, IBM Asynchronous Adapter (serial port card) for various types of HIDs and a parallel port card. If that wasn’t inconvenient enough, other manufacturers used different ports and coming across devices dedicated to being compatible with only one machine was not uncommon.

    Reply
  36. Tomi Engdahl says:

    Why Build Cards?

    Laptops and other x86 mainboards often come with M.2 slots. Do you have a free B-key slot? You can put a RP2040 and bunch of sensors on a B-key PCB as an experimental platform carried safely inside your laptop. Would you like to do some more advanced FPGA experiments? Here’s a miniscule FPGA board that fits inside your laptop and lets you play with PCIe on this same laptop – the entire setup having a super low footprint. Are you looking for an extra PCIe link because you’re reusing your laptop as a home server? Again, your WiFi slot will provide you with that. Want to get some PCIe out of a SteamDeck? Building a M-key 2230 card seems to be your only hope!

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *

*

*