//Quality should contain the notion of value, not just efficiency. Russell L. Ackoff.// //Whether you think you can, or you think you can't--you're right. Henry Ford.// [[https://www.youtube.com/watch?v=PUv66718DII|Inventing on principle, Bret Victor]] ====== ARM ====== **__[[STM32]]__** **__[[Beaglebone Black]]__** **__[[Raspberry PI]]__** **__[[Teensy]]__** or [[https://1bitsy.org|1bitsy]] (using the [[https://github.com/blacksphere/blackmagic/wiki|Black Magic Probe]] to get rid of OpenOCD) **__[[XMC]]__** **__[[other boards]]__** [[Building]] bare metal and linux applications Popular ARM variants are: * v7-a, thumb2, vfp, neon, implemented on Cortex cores * v5, arm, e.g. ARM9E, XScale * v4, arm, e.g. StrongARM, ARM7TDMI, ARM9TDMI [[http://stackoverflow.com/questions/15159164/how-to-get-a-call-stack-from-a-software-interrupt-exception|ARM stack traces and supervisor mode.]] [[Debugging ARM hard faults]] https://launchpad.net/gcc-arm-embedded [[https://imgur.com/r/Compilers/JEObT|ELF 101, a Linux executable workthrough (ARM)]] [[https://embeddedsecurity.io/index.html|ARM programming and TrustZone]] **__[[https://www.engr.scu.edu/~dlewis/book3/ | ARM assembly for embedded applications]]__** **__[[Quick reference handouts]]__** **[[https://static.docs.arm.com/ihi0042/g/aapcs32.pdf|ARM procedure call standard]]** **{{ :arm_cortexm4_processor_trm_100166_0001_04_en.pdf |ARM Cortex-M4 Technical Reference Manual}}** **[[https://www.engr.scu.edu/~dlewis/book3/docs/Cortex-M4%20Instruction%20Timing.pdf|ARM Cortex-M4 instruction timing]]** **{{ :ddi0403e_d_armv7m_arm.pdf |ARMv7-M Architecture Reference Manual}}** **{{ :dui0553.pdf |ARM Cortex-M4 Devices Generic User Guide}}** ====== Embedded ====== [[Debugging hardware]] https://interrupt.memfault.com/blog/asserts-in-embedded-systems [[Libraries]] [[MCUs by industry]] [[Saving flash space]] [[Security]] [[Real time data visualization]] **__[[Embedded Testing]]__** [[http://eswp3.readthedocs.io/en/master/index.html|Embedded SW principles]] [[http://users.ece.utexas.edu/~valvano/arm/#RTOS|Texas course]] [[https://jamesmunns.com/blog/hardware-ci-overview/|CI for embedded systems]] [[https://jaycarlson.net/microcontrollers/|The amazing $1 microcontroller]] [[https://embeddedartistry.com/blog/2018/4/26/embedded-rules-of-thumb/|Embedded rules of thumb]] [[https://embeddedartistry.com/recommended-reading|Embedded Artistry]] [[https://betterembsw.blogspot.com/2016/05/top-5-embedded-software-problem-areas.html|Top 5 embedded problem areas]] https://embeddedartistry.com/blog/2019/4/16/exploring-startup-implementations-newlib-arm [[https://covemountainsoftware.com/2020/03/23/the-matthew-test-15-steps-to-better-embedded-software-and-firmware/?mc_cid=c6e2df2123&mc_eid=4b5bfc8c2a|15 steps to better embedded SW]] [[https://jaycarlson.net/embedded-linux/#benchmarks|Jay Carlson's embedded linux article]] [[https://www.microchip.com/wwwproducts/en/ATSAMA5D27C-D1G|Microchip application notes on using peripherals under Linux]] [[https://blog.thea.codes/the-most-thoroughly-commented-linker-script|]] ^Board ^HW ^Project links ^Toolchain version / Build environment ^SW Components ^ | Infineon XMC4800 Relax | XMC4800-F144 @144MHz \\ 2MB Flash \\ 352KB RAM \\ Segger J-Link| [[https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc48_relax_ecat_v1/|Board]] \\ [[https://www.infineon.com/dgdl/Infineon-XMC4700-XMC4800-DS-v01_01-EN.pdf?fileId=5546d462518ffd850151908ea8db00b3|MCU_DS]] \\ [[https://www.infineon.com/dgdl/Infineon-ReferenceManual_XMC4700_XMC4800-UM-v01_03-EN.pdf?fileId=5546d462518ffd850151904eb90c0044 | MCU_RM]]| Docker Ubuntu 18.04 with: \\ gcc-arm-none-eabi-8-2018-q4-major (developer.arm.com) |XMCLib 2.1.22 \\ JLink V634g| | **ST Nucleo F429ZI** | STM32F429ZIT6 @180MHz \\ 2MB Flash \\ 256+4KB SRAM \\ On-board ST-LINK/V2-1 \\ **Black Magic Probe (and incl. UART)** | [[https://www.st.com/resource/en/user_manual/dm00244518-stm32-nucleo-144-boards-stmicroelectronics.pdf|Board]] \\ [[https://www.st.com/resource/en/datasheet/stm32f429zi.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/DM00031020-.pdf|MCU_RM]] \\ [[https://www.st.com/content/ccc/resource/technical/document/programming_manual/6c/3a/cb/e7/e4/ea/44/9b/DM00046982.pdf/files/DM00046982.pdf/jcr:content/translations/en.DM00046982.pdf|F4_PM]] | gcc-arm-none-eabi-9-2019-q4-major \\ --- \\ **gcc-arm-none-eabi-9-2019-q4-major** \\ --- \\ RTEMS toolchain | libopencm3 \\ --- \\ **CubeMX (168MHz) \\ Flash and debug with gdb** \\ --- \\ RTEMS | | Pyboard D SF6W | STM32F767VIT @216MHz \\ 2MB Flash \\ 2MB QSPI Flash \\ 512KB RAM | [[https://pybd.io/hw/pybd_sfxw.html|Board]] \\ [[https://pybd.io/hw/wbus_dip68.html|DIP68]] \\ [[https://www.st.com/resource/en/datasheet/stm32f767zi.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/dm00224583-stm32f76xxx-and-stm32f77xxx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf|MCU_RM]] \\ [[https://www.st.com/resource/en/programming_manual/dm00237416-stm32f7-series-and-stm32h7-series-cortexm7-processor-programming-manual-stmicroelectronics.pdf | F7_PM]]| (FW obtained from [[http://www.micropython.org/download/pybd/|MicroPython]] )| MicroPython 1.14-83 \\ Flash with dfu-util | |ST STM32MP157A-DK1 |STM32MP157 (2A7 @650MHz + M4 @209MHz) \\ 4-Gbit DDR3L \\ On-board ST-LINK/V2-1 | [[https://www.st.com/resource/en/user_manual/dm00591354-discovery-kits-with-stm32mp157-mpus-stmicroelectronics.pdf|Board]] \\ [[https://www.st.com/resource/en/datasheet/stm32mp157a.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/dm00327659-stm32mp157-advanced-arm-based-32-bit-mpus-stmicroelectronics.pdf | MCU_RM]] | Docker Ubuntu 18.04 with: \\ yocto thud | Real-time (RT-PREEMPT)| | **ST B-G474E-DPOW1** | STM32G474RET6 @180MHz \\ 512KB Flash \\ 128KB SRAM \\ On-board ST-LINK/V3E \\ **Segger J-Link** | [[https://www.st.com/resource/en/user_manual/um2577-discovery-kit-with-stm32g474re-mcu-stmicroelectronics.pdf|Board]] \\ [[https://www.st.com/resource/en/datasheet/stm32g474cb.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/rm0440-stm32g4-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf|MCU_RM]] \\ [[https://www.st.com/resource/en/programming_manual/pm0214-stm32-cortexm4-mcus-and-mpus-programming-manual-stmicroelectronics.pdf|M4_PM]] | gcc-arm-none-eabi-9-2019-q4-major \\ --- \\ **gcc-arm-none-eabi-9-2019-q4-major** \\ --- \\ RTEMS toolchain | libopencm3 \\ --- \\ **CubeMX (168MHz) \\ Flash and debug with gdb** \\ --- \\ RTEMS | |TI Hercules 570LC43 |TMS570LC4357 (2R5F @300MHz) \\ 4MB Flash \\ 512KB RAM \\ On-board XDS100 | [[https://www.ti.com/lit/pdf/spnu617|Board]] \\ [[https://www.ti.com/lit/pdf/spns195|MCU_DS]] \\ [[https://www.ti.com/lit/pdf/spnu563 | MCU_RM]] | CCS 10.2.0 | HALCoGen 04.07.01 \\ Flash and debug with CCS| |**Trenz TE0802** |Zynq Ultrascale+ ZU2CG (2R5F @600MHz, 2A53 @1.5GHz) \\ 32MB SPI Flash \\ 1GB LPDDR4 RAM \\ On-board USB JTAG | [[https://shop.trenz-electronic.de/de/TE0802-02-2AEU2-A-MPSoC-Development-Board-mit-Xilinx-Zynq-UltraScale-ZU2-und-LPDDR4?c=473|Board]]\\ [[https://shop.trenz-electronic.de/de/Download/?path=Trenz_Electronic/Development_Boards/TE0802/REV02/Documents|Board_Res]]\\ [[https://wiki.trenz-electronic.de/display/PD/TE0802+TRM|Board_TRM]] \\ {{:ds891-zynq-ultrascale-plus-overview.pdf|MCU_DS}} \\ {{ :ug1085-zynq-ultrascale-trm.pdf|MCU_RM}} | Vitis/Vivado 2019.2 \\ --- \\ RTEMS toolchain | Vitis/Vivado 2019.2 \\ --- \\ RTEMS | ====== RTOS ====== [[Zephyr]] http://www.keil.com/rl-arm/rtx_rtosadv.asp [[https://mynewt.apache.org/|Mynewt]] [[RTEMS]], very mature, high driver availability [[FreeRTOS]], very low resources ThreadX, resource bound, deeply embedded Mbed OS ====== Linux/Unix ====== Stuff related to [[Embedded Linux]] [[Cross-compiling]] [[Ubuntu]] **__[[kernel|Linux kernel]]__** [[tools|Development tools]] **__[[drivers|Driver programming]]__** [[device tree]] [[performance]] [[Testing]] **__[[Realtime]]__** [[http://lxr.linux.no/+trees|The Linux Cross Reference]] http://ltsi.linuxfoundation.org/what-is-ltsi [[https://lkml.org/lkml/2012/11/13/531|Linux driver template]] https://marcin.juszkiewicz.com.pl/download/tables/syscalls.html ==== BSD ==== Some [[FreeBSD|FreeBSD tips]]. ====== Programming ====== [[https://dev.to/fzammit/10-lessons-from-a-software-engineer--freelancer-1fho?utm_source=Newsletter+Subscribers&utm_campaign=f369aac752-EMAIL_CAMPAIGN_2018_12_31_01_56&utm_medium=email&utm_term=0_d8f11d5d1e-f369aac752-154658141|10 lessons from a sw engineer and freelancer]] [[https://dev.to/haseebelaahi/what-not-to-do-as-a-programmer-my-list-after-2-years-of-working-with-teams-1b23|What not to do as a programmer]] [[https://www.profocustechnology.com/software-development/nasas-ten-commandments-programming/|Nasa's ten commandments of programming]] * **Read the Reference** * **Break Down Problems** * **Never Stop Learning** * **Have Patience** * **Keep it Simple** [[SW design lessons learned]] [[C]] [[Python]] [[Software tools]] [[Build tools]] [[Psychology]] [[http://autotest.github.com/|Autotest]] is an interesting testing framework that can be used to test big systems or e.g. to validate hardware. http://throwtheswitch.org/white-papers/ceedling-intro.html http://www.drdobbs.com/cpp/a-lightweight-logger-for-c/240147505 http://ideone.com/KbienB http://nathanleclaire.com/blog/2013/10/27/5-cool-unix-hacks-for-fun-and-productivity/ https://pybit.es/career-development-programmers.html ====== Internet of Things ====== [[GPRS modems]] [[WSN hardware]] [[Data acquisition hardware]] [[Standards]] We can use sensor networks specific OSs like [[http://www.tinyos.net/|TinyOS]] or [[http://www.sics.se/~adam/contiki/docs/|Contiki]] (see also the [[http://www.sics.se/contiki/wiki/index.php/Main_Page|wiki]]), and standard RTOSs like FreeRTOS or uCOS-III. In systems with enough HW resources, embedded Linux can also be used. ====== Machine Learning ====== [[ML libraries]] [[SciPy ecosystem]] [[python visualization]] [[statsmodels]] [[time series]] [[ML courses]] [[https://www.youtube.com/watch?v=6GV5bTCLC8g|Bayesian statistics presentation]] http://svds.com/tensorflow-image-recognition-raspberry-pi/ http://partiallyderivative.com/podcast/2017/03/28/learning-machine-learning https://towardsdatascience.com/how-to-build-a-complex-reporting-dashboard-using-dash-and-plotl-4f4257c18a7f https://github.com/jonnor/embeddedml/ ====== Projects ====== [[Working on]] [[Sensors]] ====== Basic lab bench equipment ====== * Power supply: Peaktech 6035D * Signal generator: Peaktech 4055 * Data acquisition: Labjack U12 * Logic analyzer: TOL-08938 from Saleae Logic * Oscilloscope: Picoscope 2203, TDS2024B, TDS2001C * low-power currempt consumption measurement: uCurrent from EEVblog´s Dave Jones * antistatic mat: Vermason * Western Digital WD Blue 3D NAND Internal SSD Hard Drive * Black SSS-T6 Pepper Jobs stand * PCBite probes (https://amzn.to/44uIWqw) * Ergonomic keyboard: MoErgo http://dangerousprototypes.com/docs/Bus_Pirate http://www.watterott.com/en/Bus-Pirate https://interrupt.memfault.com/blog/four-favorite-firmware-debug-tools https://www.embeddedrelated.com/showarticle/1473.php ====== Other ====== https://github.com/papers-we-love/papers-we-love [[Single board computers]] and modules [[LCD displays intefacing]] [[WiFi modules interfacing]] [[Shops]] [[PCB manufacturers]] Porting from [[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0235c/index.html|MIPS to ARM]] [[http://blogs.arm.com/software-enablement/684-coding-for-neon-part-5-rearranging-vectors/|Coding for Neon]]. Read also [[http://www.cnx-software.com/2011/11/27/arm-neon-tutorial-in-c-and-assembler/|this post]]. [[http://www.embeddedrelated.com/showarticle/124.php|Boot sequence on an ARM-based system]] http://www.kunen.org/uC/beagle/omap_dmtimer.html http://www.bravegnu.org/gnu-eprog/ ---- http://www.freertos.org/embeddedtcp.html http://stackoverflow.com/questions/1160362/experiences-with-free-embedded-tcp-ip-stacks http://lwip.wikia.com/wiki/Porting_For_Bare_Metal http://mbed.org/forum/mbed/topic/2073/ http://andybrown.me.uk/wk/2012/09/01/ethernet-phy-stm32f107/ [[https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy.st.com%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fUsing%20STM32%20Optimized%20I2C%20examples%20when%20two%20I2C%20devices%20connected%20to%20one%20I2C%20port&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=586|I2C STM32 example]] ---- http://en.wikipedia.org/wiki/Wi-Fi_Direct http://www.arm.com/community/partners/display_company/rw/company/celestial-semiconductor-ltd-now-a-part-of-cavium-networks/ [[http://www.coremark.org/home.php|Coremark]] benchmark, intending to become an industry standard, replacing the aging Dhrystone benchmark. See [[http://en.wikipedia.org/wiki/EEMBC]]. [[scratchpad]]