What is the bug in STM32 hardware I2C? - stm32

I am from China,I was told that STM32 hardware I2C has bug.So I always use software simulation I2C with two ordinary GPIO Pins.
I was wondering what is the bug exactly?Is it a rumor ,or is it true?I hope get opinion from abroad website,because you speak English ,you may get more infomation first hand.
Thank you.

Each device may have some silicon faults. Go to the product web page and look for Errata documentation.
For example, this is the errata for STM32F103, available on its product page. There, you can see that it mentions some silicon faults related to I2C hardware.

that STM32 hardware I2C has bug
STM is manufacturing many lines of uCs and basically, their I2C implementations are pretty good. The only family having some issues in typical use cases is F10x but this family is old and NRFND.
So you can use I2C hardware without hesitation unless you mix 10 and 7 bits address mode or do similar very unusual things.
I have never encountered problems using F3, F4, F7 & H7 families.

Related

Olimax STM32-E407 cannot connect over SWD

Good day
The problem:
I am trying to connect/flash/debug a Olimax STM32-E407 dev board over SWD and I am not able
When trying to connect, using CubeProgrammer, I get: "No STM32 Target Found"
What I have tried:
I have connected a ST-link V3 mini to the pinout of the the 20pin header of the Olimax board including 3.3V, GND, SWDIO (PA13/Pin7), SWCLK (PA14/Pin9) and NRST (Pin15).
I am powering the powering the board from a power supply into the power jack
All jumpers and solder bridges are in stock places.
I have also tried manually pulling NRST to ground and doing a full chip erase, but that has not worked either.
I have used these ST-link debuggers on other boards I made and it works perfectly fine
I have 3 Olimax boards and none of them work
Any help would he hugely appreciated.
Debugging problems on microcontrollers have two general common methodes.
Hardware Problems:
In this part, it is highly recommended that use an oscilloscope to monitor circuit.
Make sure the microcontroller is powered with a correct and stable power supply.
Check the soldering quality and there is no short circuit on the board (especially between ground pins and other pins).
Check the NRST pin is high when the board is powered.
Remember that this reset is active low so during programming or debugging this pin should be high. Also, check this pin is debounced with a capacitor.
Also you can check the JTAG pins signals with an Oscilloscope to check if the programmer device is working fine.
Sometimes adding a capacitor between debugging pins and GND increases the bus capacitance and solves the problem. The value of the capacitor should be found by trying.
Software Problems
Check the programmer driver is correctly installed on your PC.
Check the programming method is true(for example maybe the board is designed to be programmed with SWD, not JATG).
Sometimes reducing the programming clock of the programmer solved the problem.
If all of these methods didn't work and you are sure that the board is fine, probably the programmer is broken, so change the programmer with another one.

Where to get started programming iBeacon BLE sensor modules?

I'd really love to learn to program cheap sensors and modules such as this one:
barometer sensor nRF51822 bluetooth module ibeacon LPS22HB, CR2032 battery holder, specifically to use within iOS and Swift.
I reached out to the company who makes them and tried researching how to get started multiple times, but I really can't figure out where to start. There are also pre-programmed modules, but my interest is programming these cheap ones to fit my needs.
I have the linked module, and a few others, and they appear and can be connected to using beacon detector apps, but display no understandable info.
I'd like to read the barometer pressure reading to start. Help is highly appreciated, I'd love to start working with these.
EDIT/UPDATE: I was able to read the modules manufacture name on one of many iBeacon scanner apps I tried and their name is Yunjia. With this information I am able to find alot more details online about what I have. One website says for these chips I can use LightBlue (the app I used to find the manufacturer name) to modify, read, and write to the module. Any additional advice is welcomed, I'll be researching and testing things out.
I also found the Schematics along with some additional info hidden in the seller website.
Edit 2: I found the manufactures little YouTube channel with some info, looks like I just have to do lots of research and testing and learn everything. https://www.youtube.com/channel/UCvqhWNqDE-v0je0X8XAEF2Q It contains some video instructions.
Edit 3: My short term goal of reading the barometer data was a success! After tons of digging I found I just had to write a value of 0x01 to turn on all sensors, then I was flooded with data and the barometer pressure in bytes which could be translated to the actual amount. Write 0x00 to trun off all sensors.
Apple's iBeacon framework is dirt-simple and very easy to use. It allows you to listen for beacons based a unique UUID, major id, and minor ID. It lets you know when a beacon enters or leaves range, and provides crude (immediate, near, medium, and far) distance values. You can create "beacon regions" that will notify your app when you enter or leave them. That's about it.
If you want to do something like read barometric pressure or temperature readings, you will need to either write your own low-level BLE code or use an existing library. My guess is that these modules are using very standard hardware and that you should be able to find libraries to read their specialized data.
Failing that, you will need specifications on their BLE interface and need to learn how to write Apple Core Bluetooth code. (The link you posted has zero specifications for the units. The only thing it provides is the numbers "nRF51822 bluetooth module ibeacon LPS22HB" (It's not in well-formed English so I don't know how to parse those descriptive terms. I'd google those numbers) Note that Core Bluetooth is a fairly low-level framework and not very easy to learn.
EDIT:
Googling "nRF51822", that is apparently an ARM based chip that includes radio hardware that supports BLE. It sounds like that is a general-purpose chip that vendor would use to build a BLE module. Given that, you'd probably have to reverse-engineer it to figure out how it works.
The "LPS22HB" appears to be a solid state pressure sensor that can be used to build a barometric pressure measurement device. It's no doubt interfaced with the "nRF51822". Without specs you're going to have a very hard time figuring out how it's interfaced however.

How does the OS detect hardware?

Does the OS get this information from the BIOS or does it scan the buses on its own to detect what hardware is installed on the system. Having looked around online different sources say different things. Some saying the BIOS detects the hardware and then stores it in memory which the OS then reads, others saying the OS scans buses (e.g pci) to learn of the hardware.
I would have thought with modern OSs it would ignore the BIOS and do it itself.
Any help would be appreciated.
Thanks.
Generally speaking, most modern OSes (Windows and Linux) will re-scan the detected hardware as part of the boot sequence. Trusting the BIOS to detect everything and have it setup properly has proven to be unreliable.
In a typical x86 PC, there are a combination of techniques used to detect attached hardware.
PCI and PCI Express busses has a standard mechanism called Configuration Space that you can scan to get a list of attached devices. This includes devices installed in a PCI/PCIe slot, and also the controller(s) in the chipset (Video Controller, SATA, etc).
If an IDE or SATA controller is detected, the OS/BIOS must talk to the controller to get a list of attached drives.
If a USB controller is detected, the OS/BIOS loaded a USB protocol stack, and then enumerates the attached hubs and devices.
For "legacy" ISA devices, things are a little more complicated. Even if your motherboard does not have an ISA slot on it, you typically still have a number of "ISA" devices in the system (Serial Ports, Parallel Ports, etc). These devices typically lack a truly standardized auto-detection method. To detect these devices, there are 2 options:
Probe known addresses - Serial Ports are usually at 0x3F8, 0x2F8, 0x3E8, 0x2E8, so read from those addresses and see if there is something there that looks like a serial port UART. This is far from perfect. You may have a serial port at a non-standard address that are not scanned. You may also have a non-serial port device at one of those addresses that does not respond well to being probed. Remember how Windows 95 and 98 used to lock up a lot when detecting hardware during installation?
ISA Plug-n-Play - This standard was popular for a hot minute as ISA was phased out in favor of PCI. You probably will not encounter many devices that support this. I believe ISA PnP is disabled by default in Windows Vista and later, but I am struggling to find a source for that right now.
ACPI Enumeration - The OS can rely on the BIOS to describe these devices in ASL code. (See below.)
Additionally, there may be a number of non-PnP devices in the system at semi-fixed addresses, such as a TPM chip, HPET, or those "special" buttons on laptop keyboards. For these devices to be explained to the OS, the standard method is to use ACPI.
The BIOS ACPI tables should provide a list of on-motherboard devices to the OS. These tables are written in a language called ASL (or AML for the compiled form). At boot time, the OS reads in the ACPI tables and enumerates any described devices. Note that for this to work, the motherboard manufacturer must have written their ASL code correctly. This is not always the case.
And of course, if all of the auto-detection methods fail you, you may be forced to manually install a driver. You do this through the Add New Hardware Wizard in Windows. (The exact procedure varies depending on the Windows version you have installed.)
I see a lot of info about system hardware, except for memory ,one of the main important part besides the cpu, which funnily isn't really mentioned as well.
This is fair because perhaps there's so many things to enumerate, you kind of lose sight of the forest through the trees.
For memory on x86/64 platforms you will want to query either BIOS or EFI for a memory map. for BIOS this is int 0x15 handle 0xe820. EFI has it's own mechanism which provides similar information.
This will show you which memory ranges are reserved by hardware etc. in order for your OS to know to leave them alone. (ok you have to built that part too of course ;D)
For other platforms, often the OS will be configured for a fixed memory size, like in embedded platforms. There is no BIOS for you, and performing a sort of bruteforce on memory is unreliable at best. (as far as i know! - not much experience outside of x86/64!!!)
For the CPU you will definitely want to look into MSRs, control registers and CPUID functions to enumerate the CPU and see what it's capable of. you can query if for example 64 bit mode is supported, and some other features which might not be present on all cpus.
For other hardware like pci etc, i would recommend like myron-semack said to look into PCI specification, pci-express, and importantly ACPI as implementing that will make you handle hardware and powermanagement a . bit more generically / according to newer standards.

iPhone to RS-232 via Bluetooth

I'm looking to connect my iPhone to an RS-232 serial device via Bluetooth. Has anyone implemented this successfully and can offer advice on hardware to use? It's kind of tricky because of the need for the Apple Authentication Processor with the device. The best potential device I've found is this guy but it only comes in an embedded package, its serial port interface is just logic-level UART rather than line-level RS-232, and I can't find a supplier with it in stock.
Any thoughts would be appreciated.
I'm considering just using WiFi to serial instead, but please ignore that possibility for the purposes of this question.
most of the question was answered by yourself already.
Basically you have 5 (+2) choices.
Join the MFi program. This might be hard to impossible if you are not part of a at least mid-size company.
Buy the OEM Bluetooth Module. I'm not sure if this is even allowed by the apple policies.
Use WiFi. Keep in mind that you want to use a wifi chipset that can act as at least ad-hoc access point. Those chipsets are quite expensive, and you have to think of a way to join existing networks (customers don't want to leave their home network to use your product). This will add a lot of cost to the BOM of your device.
Jailbreak might be an option. I never tried to use accessories with a jailbreak, so I don't know if it's possible to use bluetooth without authentication.
Work with a company that is member of the MFi program.
(Maybe an option, and depending of the speed you want to have via RS232: Eventually you can convert the audio output of the head-phone jack to RS232 levels and vice versa)
(Not really an option: develop for Android and do whatever you want)
If you jailbreak your device, you can use BTstack.org (disclaimer: I'm the author of BTstack) to connect to a Bluetooth device that supports the Serial Port Profile. You can get Bluetooth Modules that implement SPP and provide UART level output. As David R. above points out, you then need a UART to RS232 converter, e.g. the MAX232.
Ok. Another option. There are one or two companies that sell RS232 cables for iOS, eg. Skywire here: http://www.southernstars.com/products/skywire/index.html
Then, you could uses a Bluetooth RS232 extender, which consists of a RS232-to-SPP and a SPP-to-RS232 pair. Ugly, but within Apple's rules.
Well. It seems like my answer could be something you didnt ask for.
But the guy you referred to is the answer. Buy his product and you are good to go, all you need is a MAX232 chip. Converts logic level UART to RS232.
the diffrence high + voltage low zero voltage is converted to high +~10volts low -~10volts.
I use the MAX232 chip with my microprocessor, that uses logic level USART to communicate over RS232.
There is a lot of tutorials out there explaining how to hook things up.
This product works: https://serialio.com/product/bluetooth-serial-adapter/bluesnap-smart-bluetooth-40-ble-rs232-adapter
The only downside is that the adapter requires power.
It should be possibly I would think to create something in the middle that accept the bluetooth commands and convert them to serial, similar to what this does with TCP connections: https://www.npmjs.com/package/stellar-socks

Embedded device, once seen on code project and can't remember the manufacturer

The article was about an embedded device containing a memory chip, processor and could be extended with bluetooth wifi and an other RF transmitter.
The manufacturer developed a framework which contained: memory managment, TCP/IP stacks and more.
Anyone has an idea what it was?
thnx
ZigBee was partially correct =)
The wireless module was from ZigBee (XBee), the company I ment was Arduino =)
Took me allot of digging but I found it, thnx for you input =D